Submission #1985111


Source Code Expand

/*
(a&b)|(c&d)|(e&f)
(a|c|e)&(a|c|f)&(a|d|e)&(a|d|f)&(b|c|e)&(b|c|f)&(b|d|e)&(b|d|f)
*/
#include<stdio.h>
#include<algorithm>
using namespace std;
char str[3][10000];
char fi[10000];
char se[10000];
char la[10000];
int sz=0;
int t[26];
int solve(int a){
    if(a==sz)return 1;
    if((fi[a]&32)&&(t[fi[a]-'a']==1))return solve(a+1);
    if(!(fi[a]&32)&&(t[fi[a]-'A']==0))return solve(a+1);
    if((se[a]&32)&&(t[se[a]-'a']==1))return solve(a+1);
    if(!(se[a]&32)&&(t[se[a]-'A']==0))return solve(a+1);
    if((la[a]&32)&&(t[la[a]-'a']==1))return solve(a+1);
    if(!(la[a]&32)&&(t[la[a]-'A']==0))return solve(a+1);
    if((fi[a]^32)==se[a])return solve(a+1);
    if((la[a]^32)==se[a])return solve(a+1);
    if((fi[a]^32)==la[a])return solve(a+1);
    bool ff=false;
    bool sf=false;
    bool lf=false;
    if(!~t[(fi[a]|32)-'a']){
        if(fi[a]>='a')t[fi[a]-'a']=1;
        else t[fi[a]-'A']=0;
        if(solve(a+1))return 1;
        if(fi[a]>='a')t[fi[a]-'a']=0;
        else t[fi[a]-'A']=1;
        ff=true;
    }
    if(!~t[(se[a]|32)-'a']){
        if(se[a]>='a')t[se[a]-'a']=1;
        else t[se[a]-'A']=0;
        if(solve(a+1))return 1;
        if(se[a]>='a')t[se[a]-'a']=0;
        else t[se[a]-'A']=1;
        sf=true;
    }
    if(!~t[(la[a]|32)-'a']){
        if(la[a]>='a')t[la[a]-'a']=1;
        else t[la[a]-'A']=0;
        if(solve(a+1))return 1;
        if(la[a]>='a')t[la[a]-'a']=0;
        else t[la[a]-'A']=1;
        lf=true;
    }
    if(ff)t[(fi[a]|32)-'a']=-1;
    if(sf)t[(se[a]|32)-'a']=-1;
    if(lf)t[(la[a]|32)-'a']=-1;
     
    return 0;
}
int main(){
    int a;
    while(scanf("%d",&a),a){
        for(int i=0;i<3;i++)scanf("%s",str[i]);
        sz=a*8;
        for(int i=0;i<a;i++){
            for(int j=0;j<8;j++){
                if(j&1){
                    fi[i*8+j]=str[0][i*3+1];
                }else fi[i*8+j]=str[0][i*3+2];
                if(j&2){
                    se[i*8+j]=str[1][i*3+1];
                }else se[i*8+j]=str[1][i*3+2];
                if(j&4){
                    la[i*8+j]=str[2][i*3+1];
                }else la[i*8+j]=str[2][i*3+2];
            }
        }
        for(int i=0;i<26;i++)t[i]=-1;
        int res=solve(0);
        if(res==0){
            printf("-1\n");
        }else{
            int ans=0;
            for(int i=0;i<26;i++)if(t[i]==1)ans++;
            printf("%d",ans);
            for(int i=0;i<26;i++)if(t[i]==1)printf(" %c",'A'+i);
            printf("\n");
        }
    }
}

Submission Info

Submission Time
Task J - Magical Switches
User tozangezan
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2558 Byte
Status AC
Exec Time 2985 ms
Memory 256 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:60:5: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
     while(scanf("%d",&a),a){
     ^
./Main.cpp:61:47: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
         for(int i=0;i<3;i++)scanf("%s",str[i]);
                                               ^

Judge Result

Set Name all
Score / Max Score 100 / 100
Status
AC × 1
Set Name Test Cases
all Merged
Case Name Status Exec Time Memory
Merged AC 2985 ms 256 KB