2020.12.20vj補題
阿新 • • 發佈:2020-12-23
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;View Code10 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 }elseif(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 }View Code
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的效果
程式碼:
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 }View Code