洛谷 简单的模拟2

P1056 排座椅

#include 
using namespace std;
struct h
{
    int id,num;
} x[1200],y[1200];
int cmp(const h &a,const h &b)
{
    return a.num>b.num;
}
int cmp1(const h &c,const h &q)
{
    return c.id<q.id;
}
int main()
{
    int m,n,k,l,d;
    cin>>m>>n>>k>>l>>d;
    int x1,y1,x2,y2;
    for(int i=0; i<d; i++)
    {
        cin>>y1>>x1>>y2>>x2;
        if(x1==x2)
        {
            int t=min(y1,y2);
            x[t].num++;
            x[t].id=t;
        }
        if(y1==y2)
        {
            int t=min(x1,x2);
            y[t].num++;
            y[t].id=t;
        }
    }
    sort(x,x+m,cmp);
    sort(y,y+n,cmp);
    sort(x,x+k,cmp1);//很隐蔽的坑,输出的部分序号从小到大拍起来,错了好几次才发现
    sort(y,y+l,cmp1);
    for(int i=0; i<k; i++)
        cout<<x[i].id<<" ";
    cout<<endl;
    for(int i=0; i<l; i++)
        cout<<y[i].id<<" ";
    return 0;
}

P1328 生活大爆炸版石头剪刀布

#include 
using namespace std;
int n,na,nb;
int a[210],b[210];
int ans=0,bns=0;
int numa=0,numb=0;
int main()
{
    cin>>n>>na>>nb;
    for(int i=0; i<na; i++)
        cin>>a[i];
    for(int i=0; i<nb; i++)
        cin>>b[i];
    for(int i=0; i<n; i++)
    {
        if(a[numa]==0&&b[numb]==1) bns++;//if有点多,纯粹暴力模拟
        if(a[numa]==0&&b[numb]==2) ans++;
        if(a[numa]==0&&b[numb]==3) ans++;
        if(a[numa]==0&&b[numb]==4) bns++;
        if(a[numa]==1&&b[numb]==0) ans++;
        if(a[numa]==1&&b[numb]==2) bns++;
        if(a[numa]==1&&b[numb]==3) ans++;
        if(a[numa]==1&&b[numb]==4) bns++;
        if(a[numa]==2&&b[numb]==0) bns++;
        if(a[numa]==2&&b[numb]==1) ans++;
        if(a[numa]==2&&b[numb]==3) bns++;
        if(a[numa]==2&&b[numb]==4) ans++;
        if(a[numa]==3&&b[numb]==0) bns++;
        if(a[numa]==3&&b[numb]==1) bns++;
        if(a[numa]==3&&b[numb]==2) ans++;
        if(a[numa]==3&&b[numb]==4) ans++;
        if(a[numa]==4&&b[numb]==0) ans++;
        if(a[numa]==4&&b[numb]==1) ans++;
        if(a[numa]==4&&b[numb]==2) bns++;
        if(a[numa]==4&&b[numb]==3) bns++;
        numa++;
        numb++;
        if(numa==na)
            numa=0;
        if(numb==nb)
            numb=0;
    }
    cout<<ans<<" "<<bns;
    return 0;
}

P1563 玩具谜题

#include 
using namespace std;
struct toy
{
    int zy;
    string name;
} x[100100];
int main()
{
    int m,n;
    cin>>n>>m;
    for(int i=0; i<n; i++)
        cin>>x[i].zy>>x[i].name;
    int res=0;
    int a,s;
    for(int i=0; i<m; i++)
    {
        cin>>a>>s;
        if(x[res].zy==0&&a==0)//成环问题都是这样解决,加数的同时加上环的总长度,后取余环的总长
            res=(res+n-s)%n;
        else if(x[res].zy==0&&a==1)
            res=(res+n+s)%n;
        else if(x[res].zy==1&&a==0)
            res=(res+n+s)%n;
        else if(x[res].zy==1&&a==1)
            res=(res+n-s)%n;
    }
    cout<<x[res].name;
    return 0;
}

你可能感兴趣的:(洛谷,乱七八糟,算法)