首页 > 代码库 > 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 }
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 }
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 }
Tinkoff Challenge - Final Round (ABC)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。