Tinkoff Challenge

来源:互联网 发布:刑不上大夫知乎 编辑:程序博客网 时间:2024/05/16 18:33

A:

思路:就是找b,c之前有多个s[i]

代码:

#include<stdio.h>#define ll long longusing namespace std;ll a,b,c;int n;int s[110000];int main(){while(~scanf("%lld%lld%lld",&a,&b,&c)){scanf("%d",&n);int sum=0;for(int i=0;i<n;i++){scanf("%d",&s[i]);if(s[i]>b&&s[i]<c)sum++;}printf("%d\n",sum);}return 0;}


B:

题意:把一个等腰三角形分成面积相等的n部分,输出h1,h1+h2,h1+h2+h3,...

思路:先找出第一部分的高h1,然后h1+h2=sqrt(2)*h1,后面每个值都可以通过h1得到。

代码:

#include<stdio.h>#include<math.h>#include<stdlib.h>#include<algorithm>using namespace std;int n,h;double a[1008];int main(){while(~scanf("%d%d",&n,&h)){a[0]=h*1.0/sqrt(n);for(int i=1; i<n-1; i++){a[i]=sqrt(i+1)*a[0];}for(int i=0; i<n-1; i++)i==n-2? printf("%.16f\n",a[i]):printf("%f ",a[i]);}return 0;}


C:

题意:Oleg手中有个字符串a,Igor有个字符串b,他们需要构成一个新的字符串c,Oleg的希望是c这个字符串尽可能的小,lgor的希望是c这个字符串尽可能大。从Oleg开始从a中选一个字符放入c中,然后是lgor。

思路:先将a串从小到大排序,b从大到小,如果n为偶数a选取前n/2+1位,否则a,b都选前n/2位。轮到Oleg放置时比较当前a的最小值与b的最大值,如果是小于就把当前a的最小值放在c的前面部分,否则把当前a的最大值放在c的后面部分。轮到lgor放置时比较当前a的最小值与b的最大值,如果是小于就把b当前的最大值放到c的前面部分,否则把b的最小值放在c的后面部分。

代码:

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;char a[300005];char b[300005];char c[300005];int vis[300005];bool cmp1(char aa,char bb){return aa<bb;}bool cmp2(char aa,char bb){return aa>bb;}int main(){while(~scanf("%s",a+1)){scanf("%s",b+1);int n=strlen(a+1);sort(a+1,a+n+1,cmp1);sort(b+1,b+n+1,cmp2);// puts(a+1);// puts(b+1);int k=1;int t=n;int jj=n/2;int ii=n/2;if(n&1)ii++;int i=1;int j=1;for(int l=1; l<=n; l++){if(l==n&&(l&1))c[k++]=a[i++];if(l&1){if(a[i]<b[j])c[k++]=a[i++];elsec[t--]=a[ii--];}else{if(a[i]<b[j])c[k++]=b[j++];elsec[t--]=b[jj--];}}c[n+1]='\0';puts(c+1);}return 0;}


 

原创粉丝点击