#include<iostream> using namespace std; unsigned long long pow(int n, int k) { unsigned long long sn=1, sk=1, s=1, nk=n-k, p; for(int i=1; i<=n; i++) sn*=i; for(int j=1; j<=k; j++) sk*=j; for(int l=1; l<=nk; l++) s*=l; p=sn/(sk*s); return p; } unsigned long long bin(int a) { unsigned long long w=1, b=0; while(a!=0) { b+=a%2*w; a/=2; w*=10; } return b; } int main() { int n, m; cin>>n>>m; int t[n], rj[m], rd[m], iw[n]={0}, a, lz, c, k, d=0, b; //iw - ilosc kombinacji spelniajacych warunek po rozkazach, lz-liczba roznic miedzy gotowoscia for(int ki=1; ki<=n; ki++) { d+=pow(n, ki); } for(int e=0; e<m; e++) //uzupelnienie tablicy z rozkazami { cin>>rj[e]>>rd[e]; } for(int i=1; i<=d; i++) //ulozenie gotowych { lz=0; k=0; a=bin(i); for(int j=n-1; j>=0; j--) //wczytanie ulozenia do tablicy { if(a==0) t[j]=0; else { t[j]=a%10; a/=10; } } for(int l=0; l<m; l++) //wykonanie rozkazow { b=rj[l]; c=rd[l]; if(t[b-1]==1 && t[c-1]==0) { t[b-1]--; t[c-1]++; } } for(int x=1; x<n; x++) //sprawdzenie ciagu { if(t[x-1]==0 && t[x]==1) lz++; } for(int x=0; x<n; x++) { if(t[x]==1) k++; } if((t[0]==0 && lz==1) || lz==0 || k==1) iw[k-1]++; } for(int z=0; z<n; z++) cout<<iw[z]%2<<" "; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | #include<iostream> using namespace std; unsigned long long pow(int n, int k) { unsigned long long sn=1, sk=1, s=1, nk=n-k, p; for(int i=1; i<=n; i++) sn*=i; for(int j=1; j<=k; j++) sk*=j; for(int l=1; l<=nk; l++) s*=l; p=sn/(sk*s); return p; } unsigned long long bin(int a) { unsigned long long w=1, b=0; while(a!=0) { b+=a%2*w; a/=2; w*=10; } return b; } int main() { int n, m; cin>>n>>m; int t[n], rj[m], rd[m], iw[n]={0}, a, lz, c, k, d=0, b; //iw - ilosc kombinacji spelniajacych warunek po rozkazach, lz-liczba roznic miedzy gotowoscia for(int ki=1; ki<=n; ki++) { d+=pow(n, ki); } for(int e=0; e<m; e++) //uzupelnienie tablicy z rozkazami { cin>>rj[e]>>rd[e]; } for(int i=1; i<=d; i++) //ulozenie gotowych { lz=0; k=0; a=bin(i); for(int j=n-1; j>=0; j--) //wczytanie ulozenia do tablicy { if(a==0) t[j]=0; else { t[j]=a%10; a/=10; } } for(int l=0; l<m; l++) //wykonanie rozkazow { b=rj[l]; c=rd[l]; if(t[b-1]==1 && t[c-1]==0) { t[b-1]--; t[c-1]++; } } for(int x=1; x<n; x++) //sprawdzenie ciagu { if(t[x-1]==0 && t[x]==1) lz++; } for(int x=0; x<n; x++) { if(t[x]==1) k++; } if((t[0]==0 && lz==1) || lz==0 || k==1) iw[k-1]++; } for(int z=0; z<n; z++) cout<<iw[z]%2<<" "; return 0; } |