//目录

Tinkoff Challenge - Final Round (ABC)

A题:从两个保安中间那钞票

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int a,b,c;
 8     scanf("%d%d%d",&a,&b,&c);
 9     int n;
10     scanf("%d",&n);
11     int pos;
12     int ans = 0;
13     for(int i=0;i<n;i++) {
14         scanf("%d",&pos);
15         if(pos>b&&pos<c)
16             ans++;
17     }
18     printf("%d\n",ans);
19     return 0;
20 }
View Code

 

B题:切胡萝卜,每个面积相等;公式化简到最简试,否则精度会损失

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int n;
 8     double h;
 9     scanf("%d%lf",&n,&h);
10 /*
11     double s = h/n;
12     double S = h;
13     for(int i=0;i<n-1;i++) {
14         printf("%.12lf ",h*sqrt(s/S));
15         s +=s;
16     }
17     */
18 
19 
20     for(int i=1;i<n;i++) {
21         printf("%.12lf ",sqrt(i*1.0/n)*h);
22     }
23 
24     return 0;
25 }
View Code

 

C题:两个绝顶聪明的人,第一个人要字典序最小,第二个人字典序最大;

贪心:

第一个人从小到大排,第二个人从大到小排,

当第一个人的最小的都大于第二个人的,那么他只能放到字符后面(否则第二个人就得逞了,他把他的放到后面),但是这样还不够,因为他反正还要继续放,那么他后面的操作将大于这次的,为何不交换一下呢? 这时,他应该从他的最大的那一个放到后面;

 1 #include <iostream>
 2 
 3 #include <cstdio>
 4 
 5 #include <cstring>
 6 
 7 #include <algorithm>
 8 
 9 using namespace std;
10 
11 const int maxn=300000+10;
12 
13 char A[maxn],B[maxn],ans[maxn];
14 
15 bool cmp(char a,char b) {
16     return a>b;
17 }
18 
19 int main() {
20 
21     scanf("%s%s",A,B);
22     int len=strlen(A);
23     int l1=0,l2=0;
24     int r1,r2;
25     int L=0,R=len-1;
26     r1=(len+1)/2-1;
27     r2=len/2-1;
28     sort(A,A+len);
29     sort(B,B+len,cmp);
30     for(int i=0; i<len; i++) {
31         if(i%2==0) {
32             if(A[l1]<B[l2])
33                 ans[L++]=A[l1++];
34             else ans[R--]=A[r1--];
35         } else {
36             if(A[l1]<B[l2])
37                 ans[L++]=B[l2++];
38             else ans[R--]=B[r2--];
39         }
40     }
41 
42     printf("%s\n",ans);
43 
44     return 0;
45 
46 }
View Code

 

posted @ 2017-05-16 20:20  小草的大树梦  阅读(137)  评论(0编辑  收藏  举报