zoukankan      html  css  js  c++  java
  • CodeForce 841 A/B/C 解题报告

    A Generous Kefa

    题目大意:

    一共有n个物品,k个人。每一个物品都有自己的颜色,颜色相同意味着同一件物品。现在要把所有的物品分出去,如果有人拿到了相同的物品就会不高兴。问是否存在方案使得每一个人都高兴?

    大致思路:

    给每一个物品开一个桶,然后按照顺序把物品放到桶里,最后扫一遍桶,如果有桶里物品的数目大于人数,那么根据抽屉原理可以知道必然有有人会拿到相同的物品

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     ios::sync_with_stdio(false);
     6     int button[26];
     7     int n,k;
     8     char color[110];
     9     memset(button,0,sizeof(button));
    10     cin>>n>>k;
    11     cin>>color;
    12     for(int i=0;i<n;++i)
    13         button[color[i]-'a']++;
    14     bool flag=true;
    15     for(int i=0;i<26;++i)
    16         if(button[i]>k){
    17             flag=false;
    18             break;
    19         }
    20     if(flag)
    21         cout<<"YES"<<endl;
    22     else
    23         cout<<"NO"<<endl;
    24     return 0;
    25 }
    View Code

    B Godsend

    题目大意:

    第一个人能够拿走和为奇数的序列,第二个人能够拿走和为偶数的序列,如果轮到某人时发现序列已为空,或者没有能拿走的序列,则另一个人获胜。现在给你一个序列,问如果两个人都足够聪明,那么谁必将获胜。

    大致思路:

    仔细思考整个过程,可以发现;

    一旦整个序列和为奇数,则第一个人可以直接把整个序列拿走然后获得胜利。所以当序列中存在奇数时,如果和是奇数则第一个人直接胜利,若是偶数,则拿走和为奇数的序列。剩下和为奇数的序列,无论第二个人怎么拿,都不会改变整个序列和的奇偶性,第一个人第二次拿的时候必定能把序列全部拿完从而获得胜利。

    所以,只要序列中存在奇数,则第一个人获胜。若不存在,则第二个人获胜。

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     ios::sync_with_stdio(false);
     6     int n,a;
     7     bool flag=false;
     8     cin>>n;
     9     for(int i=0;i<n;++i){
    10         cin>>a;
    11         if(a%2)
    12             flag=true;
    13     }
    14     if(flag)
    15         cout<<"First"<<endl;
    16     else
    17         cout<<"Second"<<endl;
    18     return 0;
    19 }
    View Code

    C  Leha and Function

     

    这个题我纯粹看样例答案猜规律的,没想到真猜出来了,就不写思路和大意了。

    发现的规律如下:比如下面序列中某一个数在下面序列中排第K个,则对应上面的序列按大小排序后的第N-K个。

    代码:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=2e5+7;
     4 int a[maxn],ans[maxn];
     5 struct node{
     6     int v,id;
     7 }b[maxn];
     8 bool cmp(node a,node b)
     9 {
    10     return a.v>b.v;
    11 }
    12 int main()
    13 {
    14     ios::sync_with_stdio(false);
    15     int n,pos;
    16     cin>>n;
    17     for(int i=0;i<n;++i)
    18         cin>>a[i];
    19     for(int i=0;i<n;++i){
    20         cin>>b[i].v;
    21         b[i].id=i;
    22     }
    23     sort(a,a+n);
    24     sort(b,b+n,cmp);
    25     for(int i=0;i<n;++i){
    26         pos=b[i].id;
    27         ans[pos]=a[i];
    28     }
    29     for(int i=0;i<n;++i){
    30         if(i)
    31             cout<<" ";
    32         cout<<ans[i];
    33     }
    34     cout<<endl;
    35     return 0;
    36 }
    View Code
  • 相关阅读:
    Java框架之SpringMVC
    Java进阶之路
    Java入门基础教学(含配置环境变量等)
    Vue 入门学习
    WCF综合运用之:文件断点续传
    爬取集思录数据(1)--强赎表
    爬虫知识点(一)
    已知1、某股票的增减持日期,2、股票从上市至今的交易数据,求减持后(交易日)1天,5天,15天的收盘价。
    从tushare获取增减持数据
    生成文本序列
  • 原文地址:https://www.cnblogs.com/SCaryon/p/7397357.html
Copyright © 2011-2022 走看看