记录编号 38828 评测结果 AAAAA
题目名称 [IOI 1998] 灯光 最终得分 100
用户昵称 GravatarCzb。 是否通过 通过
代码语言 C++ 运行时间 0.001 s
提交时间 2012-06-15 09:06:21 内存使用 0.29 MiB
显示代码纯文本
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
struct orz
{
    char c[101];
}a[20];
 
int n,m,p,q,t,x[101],y[101];
 
bool flag;
 
inline void change(char &c)
{
    if(c=='0')c='1';
    else c='0';
}
 
int cmp(const void *a,const void *b)
{
    char *c1,*c2;
    c1=(*(orz *)a).c;
    c2=(*(orz *)b).c;
    return strcmp(c1,c2);
}
 
int main()
{
    freopen("partya.in","r",stdin);
    freopen("partya.out","w",stdout);
    int i,j,k,l,s;
    scanf("%d%d",&n,&m);
    for(i=1,scanf("%d",&x[i]);x[i]!=-1;i++,scanf("%d",&x[i]));p=i-1;
    for(i=1,scanf("%d",&y[i]);y[i]!=-1;i++,scanf("%d",&y[i]));q=i-1;t=0;
    for(i=0;i<=1;i++)
    {
        for(j=0;j<=1;j++)
        {
            for(k=0;k<=1;k++)
            {
                for(l=0;l<=1;l++)
                {
                    if(i+j+k+l>m)continue;
                    if((i+j+k+l)%2!=m%2)continue;
                    t++;memset(a[t].c,'1',n);
                    if(i)
                    {
                        for(s=0;s<n;s++)
                        {
                            change(a[t].c[s]);
                        }
                    }
                    if(j)
                    {
                        for(s=0;s<n;s++)
                        {
                            if(s%2==0)
                            {
                                change(a[t].c[s]);
                            }
                        }
                    }
                    if(k)
                    {
                        for(s=0;s<n;s++)
                        {
                            if(s%2==1)
                            {
                                change(a[t].c[s]);
                            }
                        }
                    }
                    if(l)
                    {
                        for(s=0;s<n;s++)
                        {
                            if(s%3==0)
                            {
                                change(a[t].c[s]);
                            }
                        }
                    }
                }
            }
        }
    }
    qsort(a+1,t,sizeof(orz),cmp);
    for(i=1;i<=t;i++)
    {
        if(strcmp(a[i].c,a[i-1].c)==0)continue;
        flag=true;
        for(j=1;j<=p;j++)
        {
            if(a[i].c[x[j]-1]=='0')flag=false;
        }
        for(j=1;j<=q;j++)
        {
            if(a[i].c[y[j]-1]=='1')flag=false;
        }
        if(flag)printf("%s\n",a[i].c);
    }
    return 0;
}