首页 > 代码库 > 哈尔滨理工大学第六届程序设计团队 I-Team
哈尔滨理工大学第六届程序设计团队 I-Team
/*以前做过一个插队的题,这个类似从后往前操作*/#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>#include <vector>#define N 600000using namespace std;struct node{ int x,y,z; //每一个操作,z表示这个操作是不是有效的 node(){} node(int a,int b,int c) { x=a; y=b; z=c; }};vector<node>v;vector<int>w;int t,n,m;int x,y,z;int done[N];//表示当前数字操作过没有int a[N];//表示那些人被添加进来了void init(){ memset(a,0,sizeof a); v.clear(); v.push_back(node(0,0,0)); w.clear(); memset(done,0,sizeof done);}int main(){ //freopen("C:\\Users\\acer\\Desktop\\in.txt","r",stdin); scanf("%d",&t); //cout<<t<<endl; while(t--) { init(); scanf("%d%d",&n,&m); //cout<<n<<" "<<m<<endl; for(int i=0;i<m;i++) { scanf("%d%d",&x,&y); v.push_back(node(x,y,1)); } for(int i=v.size()-1;i>=0;i--) { if(v[i].z)//这个操作可以做 { if(v[i].x==3) v[v[i].y].z=0; else if(v[i].x==1) { if(done[v[i].y]==0) { a[v[i].y]=1; done[v[i].y]=1; } } else if(v[i].x==2) { if(done[v[i].y]==0) { a[v[i].y]=0; done[v[i].y]=1; } } } } for(int i=1;i<=n;i++) { //cout<<a[i]<<" "; if(a[i]==1) { w.push_back(i); //cout<<i<<" "; } } //cout<<endl; printf("%d\n",w.size()); for(int i=0;i<w.size();i++) printf("%d ",w[i]); printf("\n"); } return 0;}
/*急需一个能写模拟的队友,在线等挺急的莫名地RE了,所有能考虑的地方都考虑了*//*先不要进行操作,先将所有的操作跑一边看看哪些1,2操作是有效的,哪些是无效的*/#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>#include <vector>#define N 600000using namespace std;struct node{ int x,y,z; //每一个操作,z表示这个操作是不是有效的 node(){} node(int a,int b,int c) { x=a; y=b; z=c; }};vector<node>v;vector<int>w;int t,n,m;int x,y,z;int a[N];//表示那些人被添加进来了void recall(int x)//x就是要撤销的x号操作{ if(x<1||x>v.size()) return; //cout<<x<<endl; if(v[x].x!=3)//如果要撤销的是1,2号操作的话 { v[x].z^=1;//将这个操作撤销 //如果已经被撤销了的话就不用管了 return ; } else { v[x].z^=1;//将这个操作撤销 recall(v[x].y);//继续递归下去撤销下一个操作 //如果已经被撤销了的话就不用管了 }}void init(){ memset(a,0,sizeof a); v.clear(); v.push_back(node(0,0,0)); w.clear();}int main(){ //freopen("C:\\Users\\acer\\Desktop\\in.txt","r",stdin); scanf("%d",&t); //cout<<t<<endl; while(t--) { init(); scanf("%d%d",&n,&m); //cout<<n<<" "<<m<<endl; for(int i=0;i<m;i++) { scanf("%d%d",&x,&y); //cout<<x<<" "<<y<<endl; if(x==1) { v.push_back(node(x,y,1)); } else if(x==2) { v.push_back(node(x,y,1)); } else if(x==3) { v.push_back(node(x,y,1)); //cout<<"**********"<<endl; recall(y); // cout<<"**********"<<endl; } } for(int i=0;i<v.size();i++) { if(v[i].x!=3)//只有1,2号操作可以 { if(v[i].z)//这个操作有效的 { //cout<<v[i].x<<" "<<v[i].y<<endl; if(v[i].x==1) { a[v[i].y]=1; } else if(v[i].x==2) { a[v[i].y]=0; } } } } for(int i=1;i<=n;i++) { //cout<<a[i]<<" "; if(a[i]==1) { w.push_back(i); //cout<<i<<" "; } } //cout<<endl; printf("%d\n",w.size()); for(int i=0;i<w.size();i++) printf("%d ",w[i]); printf("\n"); } return 0;}
哈尔滨理工大学第六届程序设计团队 I-Team
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。