码迷,mamicode.com
首页 > 其他好文 > 详细

chd校内选拔赛题目+题解

时间:2016-04-17 14:35:49      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

题目链接   A. Currency System in Geraldion

有1时,所有大于等于1的数都可由1组成。没有1时,最小不幸的数就是1.

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 void solve(){
 6     int n,x;
 7     scanf("%d",&n);
 8     int flag = 0;
 9     for(int i = 1; i<=n; i++){
10         scanf("%d",&x);
11         if(x == 1) flag = 1;
12     }
13     if(flag) printf("-1\n");
14     else printf("1\n");
15 }
16 int main()
17 {
18     solve();
19     return 0;
20 }

题目链接:B .Gerald is into Art

神之队友,八个if条件秒A,orz...

最后给的两个矩形每个长和宽翻过来倒过去,有四种情况。再和给的第一个矩形匹配总共有八种情况。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 void solve(){
 6    int a1,b1,a2,b2,a3,b3;
 7    cin>>a1>>b1>>a2>>b2>>a3>>b3;
 8    int flag = 0;
 9    if(a2+a3<=a1 && max(b2,b3)<=b1) flag = 1;
10    if(a2+a3<=b1 && max(b2,b3)<=a1) flag = 1;
11    if(a2+b3<=a1 && max(b2,a3)<=b1) flag = 1;
12    if(a2+b3<=b1 && max(b2,a3)<=a1) flag = 1;
13    if(b2+a3<=a1 && max(a2,b3)<=b1) flag = 1;
14    if(b2+a3<=b1 && max(a2,b3)<=a1) flag = 1;
15    if(b2+b3<=a1 && max(a2,a3)<=b1) flag = 1;
16    if(b2+b3<=b1 && max(a2,a3)<=a1) flag = 1;
17    if(flag) printf("YES\n");
18    else printf("NO\n");
19 }
20 int main()
21 {
22     solve();
23     return 0;
24 }

 

题目链接: C.Making a String

题意:给定每一个字母出现的个数ai,组成一个最长的字母串.

此字母串满足的条件:

1.其中的每个字母出现的总次数不超过ai.

2.每个字母出现的次数必须是不同的。

题解:这个题直接贪心。 从最大值开始,拿第一组样例,2 5 5来说

排序后2 5 5,从最后5开始,找局部最优解。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 int a[30];
 6 void solve(){
 7    int n;
 8    scanf("%d",&n);
 9    for(int i = 0; i<n; i++) scanf("%d",&a[i]);
10    sort(a,a+n);
11    int maxn = 1e9+7;
12    long long sum = 0;
13    for(int i = n-1; i>=0; i--){
14     if(maxn == 0) break;
15     if(maxn>=a[i]){
16         sum += a[i];
17         maxn = a[i] - 1;
18     }
19     else{
20         sum += maxn;
21         maxn--;
22     }
23    } 
24    printf("%I64d\n",sum);
25 }
26 int main()
27 {
28     solve();
29     return 0;
30 }

 

题目链接: D.Bear and Elections

记得寒假做过这道水题,我发现我一见到做过的题就懵了。。。

就把第一个人票数一直和后面最大的比较,如果此人最大的小于后面最大的,他就再得一票,后面最大的那个就减一票,ans+1,排序,直到后面没有比它还大的。数据较小,不会超时,至于司老大说的二分法我还没有领会。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 int a[105];
 6 void solve(){
 7    int n,ans = 0;
 8    scanf("%d",&n);
 9    for(int i = 0; i<n; i++) scanf("%d",&a[i]);
10    while(1){
11     sort(a+1,a+n);
12     if(a[n-1]<a[0]) break;
13     a[n-1]--;
14     a[0]++;
15     ans++;
16    }
17    printf("%d\n",ans);
18 }
19 int main()
20 {
21     solve();
22     return 0;
23 }

 

chd校内选拔赛题目+题解

标签:

原文地址:http://www.cnblogs.com/littlepear/p/5400804.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!