CodeForce 841 A/B/C 解题报告

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于CodeForce 841 A/B/C 解题报告的主要内容,如果未能解决你的问题,请参考以下文章

zoj3707(Calculate Prime S)解题报告

CodeForce-762B USB vs. PS/2(贪心)

AtCoderAtCoder Grand Contest 041 解题报告(开坑之时已至,目前只有$A,B,C$)

AtCoderAtCoder Grand Contest 041 解题报告(开坑之时已至,目前只有$A,B,C$)

Codeforces Round #766 (Div. 2) D - Not Adding解题报告

Codeforces Round #766 (Div. 2) D - Not Adding解题报告