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 }
View Code
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 }
View Code
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个元素
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 }