首页 > 代码库 > Tinkoff Challenge - Final Round (ABC)

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

 

Tinkoff Challenge - Final Round (ABC)