Codeforces Round #710 (Div. 3)

简介: A. Strange Table

A. Strange Table


题意:数列按照横排和竖排两种,告诉你行和列和位置x,求他在竖排的时候的数是多少


思路:画画图就出来鸟找规律。


#include<bits/stdc++.h>
#define int long long 
using namespace std;
signed main()
{
  int n,i,j,t,m,x;
  cin>>t;
  while(t--){
    cin>>n>>m>>x;
    int x1,y1;
    x1=(x%n?x%n:n)-1;
    y1=(x%n?x/n:x/n-1);
    int ans=x1*m+y1+1;
    cout<<ans<<endl;
  }
}


B. Partial Replacement


题意:给你一个由“”和“.”两种字符构成的字符串,要求把其中的一部分“**替换成“X”,且第一个和最后一个“”一定会被替换成‘X’,要求两个相邻的‘X’之间距离不超过k,保证有解,求最小替换次数。


思路:用两种下标去记录一种是目前能修改但是不用修改的下标,当遍历到需要修改的时候优先改之前记录的下标,模拟题,不过有细节处理有点多。


#include<bits/stdc++.h>
using namespace std;
int main()
{
  int n,i,j,k,t; 
  string s1;
  cin>>t;
  while(t--){
    cin>>n>>k>>s1;
    int cs=0,zd=0,cnt=0,f=0,mo=0;
    for(i=0;i<s1.length();i++) {
      if(s1[i]=='*'&&f==0)
        f=1,cs=i,cnt++;
      else if(s1[i]=='*')
        zd=i,cnt++;
    }
    if(cnt<=2) {
      cout<<cnt<<endl;
      continue;
    }
    else cnt=2;
    s1[cs]='X',s1[zd]='X';
    for(i=cs;i<=zd;i++){
      if(s1[i]=='*'){
        if(i-cs<=k){
          mo=i;
}
        else {
          cs=mo; cnt++;
          mo=i;
        }
      }
      else if(s1[i]=='X'){
        if(i-cs<=k){
          cs=i;
        }
        else {
          cnt++,cs=i;
        }
      }
    }
    cout<<cnt<<endl;
  }
}

C. Double-ended Strings


题意:有两个字符串 a,b。我们每次操作可以将两个字符串中的一个字符串的最前面一个字符或这最后面一个字符删去(可以将某个字符串通过若干次操作变为空串)。求需要多少次操作才能够使 a,ba,b 两个字符串是相同的。


思路:想用暴力的可是觉得太麻烦了,看到题解发现有substr函数,然后搞了一通也没搞明白,但其实三重循环最外面用长度,然后里面用下标的起点暴力搞就行了。


#include<bits/stdc++.h>
using namespace std;
int main()
{
  int n,i,j,t,k;
  string s1,s2,s3;
  cin>>t;
  while(t--){
    cin>>s1>>s2; 
    int ans=0;
    if(s1>s2) {
      s3=s1;
      s1=s2;
      s2=s3;
    }
    for(k=0;k<=min(s1.length(),s2.length());k++){
      for(i=0;i<s1.length();i++){
        for(j=0;j<s2.length();j++){
          if(s1.substr(i,k)==s2.substr(j,k)&&i+k<=s1.length()&&j+k<=s2.length()){
            ans=max(ans,k);
          }
        }
      }
    }
    ans=(s1.length()-ans)+(s2.length()-ans);
    cout<<ans<<endl;
  }
}


D. Epic Transformation


题意:n 个数,每次可以选择其中两个不同的数进行删除,求最后最少剩下多少个数。


思路:找规律的数论题叭,感觉比前面两个容易点= = ,手动模拟一下删数过程,会发现如果一个数出现的次数大于n/2次的话,那么数就是删不完的,否则如果是奇数就剩1,偶数就是0。


#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+100000;
int a[maxn];
int main()
{
  int n,i,j,t;
  cin>>t;
  while(t--){
    cin>>n;
    map<int ,int >mo;
    int ans=0;
    for(i=0;i<n;i++){
      cin>>a[i];  
      mo[a[i]]++;
      ans=max(ans,mo[a[i]]);
    }
    if(ans<=n/2){
      if(n%2==0)
        cout<<0<<endl;
      else 
        cout<<1<<endl;
      continue;
    } 
    else {
      if(ans==n)
cout<<n<<endl;
      else {
        cout<<(n-((n-ans)*2))<<endl;
      }
    }
  }
}



相关文章
|
缓存 NoSQL 安全
Linux设备驱动程序(四)——调试技术3
Linux设备驱动程序(四)——调试技术3
185 0
|
机器学习/深度学习 人工智能 算法
通俗认识理解OpenAI Five
通俗认识理解OpenAI Five
391 0
|
6月前
|
数据采集 存储 数据可视化
基于Python 网络爬虫和可视化的房源信息的设计与实现
本文介绍了一个基于Python Scrapy框架和echart库的房源信息采集与可视化系统,该系统通过自动化爬虫提高房地产数据采集效率,并通过Flask服务器实现数据的Web可视化展示,旨在帮助房地产从业人员和政策制定者高效、直观地了解房源信息。
136 1
|
9月前
|
Ubuntu 编译器 C语言
如何在 Ubuntu 22.04 LTS 上安装 Spack?
【1月更文挑战第8天】
195 0
如何在 Ubuntu 22.04 LTS 上安装 Spack?
|
SQL 安全 Shell
看完这篇 教你玩转渗透测试靶机vulnhub——DC3
看完这篇 教你玩转渗透测试靶机vulnhub——DC3
388 0
|
9月前
|
缓存 JavaScript 前端开发
【整理七】
【整理七】
73 0
|
消息中间件 关系型数据库 数据安全/隐私保护
Openstack架构构建及详解(2)--keystone组件
Openstack架构构建及详解(2)--keystone组件
528 0
Openstack架构构建及详解(2)--keystone组件
剑指offer 72. 求1+2+…+n
剑指offer 72. 求1+2+…+n
89 0
|
大数据 Python
2022年最新Python大数据之Python基础【九】面向对象与继承
一般实例属性写在实例方法中,调用该方法才能获取实例属性,对象创建后,其中一个实例调用该方法,获取实例属性,其余对象不发生变化
81 0
|
Java BI 测试技术
Jmeter系列(40)- 详解 Jmeter CLI 模式
Jmeter系列(40)- 详解 Jmeter CLI 模式
321 0
Jmeter系列(40)- 详解 Jmeter CLI 模式

热门文章

最新文章