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掉很多发,但是自己又做对的感觉真的贼好,有时候比一次就做对的感觉也要好,少刷水题,水题真的没什么用处,一定坚持下去多接触接触自己踮脚可以够到的题