题目链接:B最强的决斗者一切都是必然的!
题意分析:只可意会不可言传~(其实是懒得打字enmmm);
思路:设置“指针”(double)记录改变状态的起始位置,然后进行暴力求解。
总结:注意题意的理解,注意连锁数的概念。可圈可点的是,通过本题,我重温了一下codeblocks的调试方法。
每日一句正能量:责其所难,则其易者不劳而正;补其所短,则其长者不功而遂。
代码:
#include <bits/stdc++.h>
using namespace std;
struct card{
int s;
int t;
int x;
};
card c[1010];
int f(int from, int to){
int temp = 0;
for (int i = to; i >= from; i--){
if (c[i].t == 1){
temp += c[i].x;
}
if (c[i].t == 2){
temp += (i - from + 1) * c[i].x;
}
if (c[i].t == 3){
return temp;
}
if (c[i].t == 4){
i --;
}//为什么这么写?题意使然!
}
return temp;
}
int main(){
int n;
while (scanf("%d", &n) != EOF){
for (int i = 0; i < 1010; i ++){
c[i].s = 0;
c[i].t = 0;
c[i].x = 0;
}//初始化
for(int i = 0; i < n; i ++){
scanf("%d%d", &c[i].s, &c[i].t);
if (c[i].t == 1 || c[i].t == 2){
scanf("%d", &c[i].x);
}
}//读入数据
int i = 0;//循环变量
int from = 0, to = 0;//"指针“
int ans = 0;
while (i < n){
if (c[i].s <= c[i + 1].s){
//啥也不做~~
}
else{
to = i;
ans += f(from, to);
from = to + 1;//指针更新以及函数调用
}
i ++;
}
printf("%d\n", ans);
}
return 0;
}