题解 P2952 ([USACO09OPEN]Cow Line S)
这是一位萌新的第一篇题解,求关照qwq
题目传送门
解法由来
这一题当然是直接使用deque啦
(不会deque的蒟蒻
那就用vector暴力模拟!
vector简介
头文件
1 2
| #include<vector> using namespace std;
|
创建一个vertor对象
类型有很多种 char int string 等等
看到这里,你应该会有疑问
怎么访问vector函数中的一个数呢?
有俩种实现方式
1.直接下标访问 就像int型数组一样
1 2
| …… //省略头文件以及定义(雾 cout<<v[i];
|
2.迭代器访问 一种很简洁的访问方式
1 2
| vector<int>::iterator it; for(it=vec.begin();it!=vec.end();it++) cout<<*it<<endl;
|
来说说这题吧
思路
首先,这需要用一个vector类型的数组来记录。
遇到’AL’ 就左边加
遇到’AR’ 就右边加
添加的函数详情看代码注释
以此类推
最后,再用迭代器或者for循环语句输出不就完美了??
淦代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<map> #include<cstring> #include<vector> //本篇重点 vector头文件 #define ll long long using namespace std; vector<int> b; int sum=0,s,k; char a; inline int read() { char c=getchar(); ll f=1,s=0; while(!isdigit(c)) { if(c=='-')f=-1,c=getchar(); } while(isdigit(c)) { s=(s<<3)+(s<<1)+c-48; c=getchar(); } return f*s; } int main() { cin>>s; for(int i=0;i<s;i++) { cin>>a; if(a=='A') { sum++; cin>>a; if(a=='L') b.insert(b.begin(),sum); else b.push_back(sum); } else { cin>>a>>k; if(a=='L')b.erase(b.begin(),b.begin()+k); else { for(int i=0;i<k;i++) b.pop_back(); } } } for(int i=0;i<b.size();i++) cout<<b[i]<<endl; return 0; }
|
看,这不就淦完了?
各位大佬有什么意见,欢迎评论QWQ