1. 程式人生 > >CodeForce 841 A/B/C 解題報告

CodeForce 841 A/B/C 解題報告

ret def 解題報告 col 存在 抽屜原理 code const 不存在

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 解題報告