Pagini recente » Cod sursa (job #281590) | Cod sursa (job #1126045) | Cod sursa (job #1137747) | Cod sursa (job #376249) | Cod sursa (job #2452851)
#include <bits/stdc++.h>
///N=100000
///preprocesare 22*(2^22)
using namespace std;
///
typedef long long ll;
ll n, i, j, k, cnt, out;
ll sol[4194305], lst[23], val[23], last[23];
///
void preproc(ll config);
void solve();
///
int main()
{
freopen("coins.in", "r", stdin);
freopen("coins.out", "w", stdout);
sol[0]=true;
for(i=1; i<(1<<22); ++i) preproc(i);
solve();
fclose(stdin);
fclose(stdout);
return 0;
}
void preproc(ll config){
ll conf=config, i, l, cnt=0;
l=0;
for(i=22; i>=1; --i) {
val[i]=conf&1;
conf>>=1;
if(val[i]) last[i]=l;
else l=i;
}
bool good=false;
for(i=22; i>=1; --i){
if(val[i] && last[i]){
ll c=config;
c^=1<<(22-i);
++cnt;
c^=(1<<(22-last[i]));
if(sol[c]==-1) {
good=true;
break;
}
}
}
if(!cnt) sol[config]=1;
else if(good) sol[config]=1;
else sol[config]=-1;
}
void solve(){
scanf("%lld", &n);
for(i=1; i<=n; ++i){
cnt=0;
for(j=22; j>=1; --j) {scanf("%lld", &lst[j]); if(lst[j]) ++cnt;}
ll config=0;
for(j=1; j<=22; ++j) config=2*config+lst[j];
if(sol[config]==1) out+=cnt;
}
printf("%lld", out);
}