2018.9.30 Atcoder比赛

A - AtCoder Beginner Contest 999

  模拟水题string输入,逐位比较输出即可

#include<iostream>
#include<cstring>
using namespace std;
string s;
int main(){
    cin>>s;
    for(int i=0;i<s.size();++i)
        if(s[i]==49) cout<<9;
        else cout<<1;
    return 0;
}

 

B - AtCoder Beginner Contest 111

考虑这个数是否可以被111整除,可以直接输出这个数。

如果不可以的话,就输出不小于这个数的最小可以被111整除的数

#include<iostream>
#include<cstdio>
using namespace std;
int n;
int main(){
    scanf("%d",&n);
    if(n%111==0) printf("%d",n);
    else printf("%d",(n/111+1)*111);
    return 0;
}

 

C - /\/\/\/

 贪心做法,对于奇数项和偶数项分别统计出出现数量最多的和出现数量次多的数字,分两组情况讨论

1.奇数项和偶数项上出现次数最多的数字不一样 输出总长度分别减去这两个数在奇数位置和偶数位置出现次数;

2.奇数项和偶数项上出现次数最多的数字一样 比较奇数项上出现最多的数字出现次数和偶数项上出现次数次多的数字出现次数 与  偶数项上出现最多的数字出现次数和奇数项上出现次数次多的数字出现次数

用n减去他们之间的较大者就是答案。

#include<iostream>
#include<cstring> 
#include<cstdio>
using namespace std;
const int Maxn=100010;
int n,vis[Maxn][3],num[Maxn];
int g1,g2,g3,g4;
int maxn1=0,second1=0;
int maxn2=0,second2=0;
int main(){
    scanf("%d",&n);
    memset(vis,0,sizeof(vis));
    for(int i=1;i<=n;++i){
        scanf("%d",&num[i]);
        if(i%2==0) vis[num[i]][2]++;
        else vis[num[i]][1]++;
    }
    for(int i=1;i<=n;i+=2){
        if(maxn1<vis[num[i]][1]){
            second1=maxn1;
            maxn1=vis[num[i]][1];
            g2=g1; g1=i;
        }
        else 
          if(second1<vis[num[i]][1]&&num[i]!=num[g1]){
              second1=vis[num[i]][1];
              g2=i;
          }
    }
    for(int i=2;i<=n;i+=2){
        if(maxn2<vis[num[i]][2]){
            second2=maxn2;
            maxn2=vis[num[i]][2];
            g4=g3; g3=i;
        }
        else 
          if(second2<vis[num[i]][2]&&num[i]!=num[g3]){
               second2=vis[num[i]][2];
               g4=i;
          }
    }
    if(num[g1]!=num[g3]) printf("%d",n-vis[num[g1]][1]-vis[num[g3]][2]);
    else printf("%d",n-max(maxn1+second2,maxn2+second1));
    return 0;
}

 

D - Robots Arms

 

转载于:https://www.cnblogs.com/Hadesa/articles/9729095.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值