CSP2016-09
CSP201609-1 最大波动
1 // 2 // main.cpp 3 // CSP201609-1 最大波动 4 // 5 // Created by sylvia on 2021/11/2. 6 // Copyright © 2021 apple. All rights reserved. 7 // 8 9 #include <iostream> 10 #include <math.h> 11 #include <algorithm> 12 using namespace std; 13 int main(){ 14 int n,x,y,ans=-1; 15 cin>>n>>x; 16 y=x; 17 n--; 18 while (n--){ 19 cin>>x; 20 ans=max(ans,abs(x-y)); 21 y=x; 22 } 23 cout<<ans<<endl; 24 return 0; 25 }
CSP201609-2 火车购票
家人们,太丢人了,写了这么多年代码,第一次用双判断的for循环语句,忘了写&&,结果咋交都是90'
害
又是当🚮的一天呢
1 // 2 // main.cpp 3 // CSP201609-2 火车购票 4 // 5 // Created by sylvia on 2021/11/2. 6 // Copyright © 2021 apple. All rights reserved. 7 // 8 9 #include <iostream> 10 #include <stdio.h> 11 #include <math.h> 12 #include <algorithm> 13 #include <string.h> 14 using namespace std; 15 #define M 20+5 16 int a[M]; 17 int flag; 18 int main(){ 19 memset(a,0,sizeof(a)); 20 int n,p; 21 cin>>n; 22 while (n--){ 23 cin>>p; 24 flag=0; 25 for (int i=0;i<=19&&flag==0;i++){ 26 if (5-a[i]>=p){ 27 for(int j=1;j<=p;j++){ 28 cout<<a[i]+i*5+j<<' '; 29 } 30 flag=1; 31 a[i]+=p; 32 cout<<endl; 33 } 34 } 35 if(!flag){ 36 for (int i=0;i<=19&&flag==0;i++) { 37 if(a[i]<5){ 38 for (int j=1;j<=min(5-a[i],p);j++){ 39 cout<<a[i]+i*5+j<<' '; 40 } 41 p-=(5-a[i]); 42 if(p<=0) flag=1; 43 a[i]=5; 44 } 45 } 46 cout<<endl; 47 } 48 } 49 }
CSP201609-3 炉石传说
一看这种题干又臭又长的题目就知道大概率是个大模拟,当然这比起来近几年csp的题目已经算短的了,也确实是个小模拟,关键在于如何处理插入的随从,使用数组肯定行不通,每次插入会导致后面的数据后移,使用指针算是一种可行选择,但是指针其实挺容易写错的,于是我就想到了vector里面有没有相关的可以用呢?
当然!
使用insert和erase就会让这个题变得超级简单,当然,菜菜如我,起初只拿了50‘,还不是因为粗心大意读错了题目,没有理解到“当随从攻击时,攻击方和被攻击方会同时对彼此造成等同于自己攻击力的伤害。”这句话的含义,然后改了一处后80‘……不得不说这数据水的可以,我都没改全就能多拿30分……
再次提一提,struct内定义结构函数进行初始化
15struct character{ 16 int life; 17 int aggre; 18 character(int l,int a):life(l),aggre(a){} 19 };
insert使用戳这里
简单来讲就是a.insert(位置,元素)
erase使用戳这里两种用法:
- 删除第n个元素
a.erase(a.begin()+5);
//erase the 6th element
- 删除第n-n+m个元素
a.erase(a.begin(),a.begin()+3);
//erase the first 3 elements
1 // 2 // main.cpp 3 // CSP201609-3 炉石传说 4 // 5 // Created by sylvia on 2021/11/3. 6 // Copyright © 2021 apple. All rights reserved. 7 // 8 9 #include <iostream> 10 #include <vector> 11 #include <string.h> 12 #include <string> 13 using namespace std; 14 #define M 1000+5 15 struct character{ 16 int life; 17 int aggre; 18 character(int l,int a):life(l),aggre(a){} 19 }; 20 vector <character> a[2]; 21 int n; 22 string c; 23 int main(){ 24 cin>>n; 25 int sit,lif,agg,j=0; 26 a[0].push_back(character(30,0)); 27 a[1].push_back(character(30,0)); 28 for (int i=1;i<=n;i++){ 29 cin>>c; 30 if(c=="end"){ 31 j=(j+1)%2; 32 } 33 else if(c=="summon"){ 34 cin>>sit>>agg>>lif; 35 a[j].insert(a[j].begin()+sit,character(lif,agg)); 36 } 37 else if(c=="attack"){ 38 cin>>sit>>agg; 39 a[j][sit].life-=a[(j+1)%2][agg].aggre; 40 a[(j+1)%2][agg].life-=a[j][sit].aggre; 41 if(a[j][sit].life<=0&& sit!=0){ 42 a[j].erase(a[j].begin()+sit); 43 } 44 if(a[(j+1)%2][agg].life<=0 &&agg!=0){ 45 a[(j+1)%2].erase(a[(j+1)%2].begin()+agg); 46 } 47 } 48 } 49 if(a[0][0].life>0&&a[1][0].life>0) cout<<0<<endl; 50 else if(a[0][0].life<=0) cout<<-1<<endl; 51 else cout<<1<<endl; 52 for (int j=0;j<=1;j++){ 53 cout<<a[j][0].life<<endl; 54 cout<<a[j].size()-1<<' '; 55 for (int i=1;i<a[j].size();i++){ 56 cout<<a[j][i].life<<' '; 57 } 58 cout<<endl; 59 } 60 return 0; 61 }