Codeforces Round #436 (Div. 2)

来源:互联网 发布:wampserver for mac 编辑:程序博客网 时间:2024/06/06 00:51

http://codeforces.com/contest/864
A。
比赛前两个人拿两张牌,不能相同的数字,然后比赛后这个牌堆中与他们手中数字相同的都是他们的牌。问他们俩可否拿走所有牌。
就是看是否一个是否 存在两种数,且数量相等均为N/2

#include <bits/stdc++.h>using namespace std;const int maxn=1e5;int map1[106];int fir[2];int main(){   int n,a;    while(~scanf("%d",&n)){          memset(map1,0,sizeof(map1));          int siz=0;          for(int i=0;i<n;i++){             scanf("%d",&a);             if(!map1[a]){                map1[a]++;                //siz++;                fir[siz++]=a;             }             else                map1[a]++;          }          if(siz==2&&map1[fir[0]]==map1[fir[1]])          {puts("YES");          printf("%d %d\n",fir[0],fir[1]);          }          else            printf("NO");    }    return 0;}

2 要求你输出 一组小写字母。
① 每种小写字母只输出一个。
② 输出的小写字母之间不能有 大写字母。
思路:遇到大写的就置0,否则就记录。

#include <bits/stdc++.h>using namespace std;string s;int m;bool vis[30];vector<char>q;int main(){   while(cin>>m>>s){         q.clear();         int ans=-1;         for(int i=0;i<s.length();i++){             if(s[i]>='A'&&s[i]<='Z'){                ans=max((int)q.size(),ans);                q.clear(),memset(vis,false,sizeof(vis));                }             else if(s[i]>='a'&&s[i]<='z')             {   if(!vis[s[i]-'a']){                 vis[s[i]-'a']=true;                 q.push_back(s[i]);                 }                ans=max((int)q.size(),ans);             }         }         printf("%d\n",ans);   }    return 0;}

3 给定一段马路(x轴,从0开始)。长度为a,里面油料为b,加油站再f处(1,f),这条路循环走m次。
问你最少的加油次数。
模拟。。其实没有那么难。。。
先看走后一步油够不够,如果不够就加。不然就不加。

#include <bits/stdc++.h>using namespace std;/*模拟,贪心。因为这条路是有循环的。*/int a,b,f,k;int main() {    while(~scanf("%d%d%d%d", &a, &b, &f, &k)){          int fuel=b;          int ans=0;          bool flag=false;          //fuel-=b;          while(k--){               fuel-=f;               if(fuel<0){                 puts("-1");flag=true;               }               f=a-f;               if(fuel<2*f&&k){                 fuel=b;ans++;                }                else if(fuel<f&&k==0){                    fuel=b;ans++;                }                fuel-=f;                if(fuel<0){                    puts("-1");flag=true;                }                if(flag)break;          }          if(!flag)            printf("%d\n",ans);    }    return 0;}

4 5 再补。