2020.12.20vj补题
A - Insomnia cure
题意:一共s只龙,每隔k,l,m,n只龙就会受伤,问这s只龙有多少龙是受伤的
思路:看起来题目范围并不是很多,直接进行循环判断
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 using namespace std; 7 int main(){ 8 int sum=0,s=0; 9 int k,l,m,n; 10 int a[15100]={0}; 11 scanf("%d",&k); 12 scanf("%d",&l); 13 scanf("%d",&m); 14 scanf("%d",&n); 15 scanf("%d",&s); 16 sum=0; 17 for(int i=1;i<=s;i++){ 18 if(i%k==0){ 19 sum++; 20 }else if(i%l==0){ 21 sum++; 22 }else if(i%m==0){ 23 sum++; 24 }else if(i%n==0){ 25 sum++; 26 } 27 } 28 printf("%d\n",sum); 29 }
B - Escape
题意:总共是c公里,公主以每小时Vp公里的速度逃跑,龙在t小时后发现公主逃跑然后开始以每小时Vd公里的速度追,当龙追上公主的时候,公主就会扔一块糖果出来,然后龙就会捡起糖果拿回最开始的位置,并且停留f小时,再继续追赶公主,问公主逃跑总共需要多少糖果
思路:分开直接进行梳理计算就可以,只是龙拿回起点以后,再追公主的时候就要重新计算一下时间,一定记得是double
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 using namespace std; 7 int main(){ 8 double vp,vd,t,f,c; 9 scanf("%lf",&vp); 10 scanf("%lf",&vd); 11 scanf("%lf",&t); 12 scanf("%lf",&f); 13 scanf("%lf",&c); 14 double g=vp*t; 15 int sum=0; 16 int l=0; 17 if(g>=c){ 18 printf("0\n"); 19 }else{ 20 if(vp>=vd){ 21 printf("0\n"); 22 }else{ 23 double m=g*1.0/(vd-vp);//第一次相遇的时间 24 double s=0; 25 g+=vp*m;//第一次相遇的位置 26 // printf("%d\n",g); 27 while(g<c){ 28 if(g<c){ 29 sum++; 30 }else{ 31 break; 32 } 33 s=0; 34 s+=f+m; 35 g+=s*vp;//返回后公主走的位置 36 m=g*1.0/(vd-vp); 37 g+=m*vp; 38 39 } 40 printf("%d",sum); 41 } 42 } 43 }
C - Terse princess
题意:有个公主找王子,如果这个人比之前所有王子的财富都高,公主就Oh,如果这个人比之前所有的财富值的总和加起来还多,就WOW,有n个人a次Oh,b次WOW。输出一个序列满足a,b,如果没有就输出-1.
思路:就是直接构造,先构造wow的数,再构造oh的数,第一个数输出是n-a-b里面的数,然后先输出b里面的数,然后再输出a的数,注意的情况就是:1)n为1,b为0,a为0的情况,直接输出1即可;2)n-a为1,b为0的情况,这样的无法构造;3)其余的情况当b的数的时候其实直接进行乘2就行,就是当b为0的时候注意一下,需要往后靠一个,因为如果b为0,a放在第二个位置,那么就会产生wow的效果
wa掉的点:一开始的大致思路是对的,就是特殊点没有考虑到,然后又改想着先输出降序的让他成为那n-a-b个数,发现也是会wa掉,这样会吹西安负数,如果前面输出都是1,这样很容易输出负数,我就想着先输出100这样进行,发现很可能也会超过50000,这样一来就用1先输出,像题目中那样,看着样例知道了当时思路中没有考虑到特殊样例,即使是在看着样例的情况下改的,发现也要wa掉10发才能够真的做对,从wa思路到wa特殊样例到wa数值范围,就一点一点的改
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 using namespace std; 7 int main(){ 8 int n,a,b; 9 scanf("%d %d %d",&n,&a,&b); 10 int sum=0; 11 int p[150]={0}; 12 for(int i=0;i<=n;i++){ 13 p[i]=1; 14 } 15 if(n==1&&b==0&&a==0){ 16 printf("1\n"); 17 }else if(n-a==1&&b==0){ 18 printf("-1\n"); 19 }else{ 20 int sum1=0; 21 int item=n-a-b; 22 for(int i=1;i<=b;i++){ 23 //int item=sum1; 24 //printf("%d %d\n",sum,item); 25 p[1+i]=p[i]*2; 26 } 27 if(b==0){ 28 b++; 29 } 30 for(int i=1;i<=a;i++){ 31 p[b+1+i]=p[b+i]+1; 32 } 33 for(int i=1;i<=n;i++){ 34 printf("%d ",p[i]); 35 } 36 } 37 38 }
最近补题的感想:最近也可能忙于复习,就感觉事情很多,但是干完以后自己又没有什么收获,就像是在浪费时间,从繁忙中挤出时间来一边补自己和大家一起做的cf,一边抽出时间来补自己要求比别人多补的cf,可能是最近cf都是思维题,所以可能锻炼了基本的一些思维,学到了一些新的思维精髓,也因为算法题比较少,最近一直也没有怎么好好的学习算法,就想着补题的时候看算法,系统的看从头到尾看是感觉到真的没有时间,真的感觉到:明日复明日明日何其多,但是即使wa掉很多发,但是自己又做对的感觉真的贼好,有时候比一次就做对的感觉也要好,少刷水题,水题真的没什么用处,一定坚持下去多接触接触自己踮脚可以够到的题

浙公网安备 33010602011771号