首页 > 代码库 > 哈尔滨理工大学第六届程序设计团队 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