都随了几千个了,还不知哪里错了
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e7+5;
int n,h,r[N],u;
char c[25][25];
vector<int>q[25];
map<vector<int>,bool>mp;
vector<vector<int> >pp;
signed main() {
// freopen(".in","r",stdin);
cin>>n>>h;
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
cin>>c[i][j];
if(c[i][j]=='1')q[i].push_back(j);
}
}
vector<int>p;
p.push_back(1);
while(mp[p]==0) {
++u;
pp.push_back(p);
bool gg[25]= {0};
for(int i=0; i<p.size(); i++) {
int d=p[i];
gg[d]=1;
r[u]+=q[d].size();
}
for(int i=1; i<=n; i++) {
if(gg[i]==0) {
r[u]+=2*q[i].size();
}
}
mp[p]=1;
int g[25]= {0};
for(int i=0; i<p.size(); i++) {
int d=p[i];
for(int j=0; j<q[d].size(); j++) {
g[q[d][j]]++;
}
}
p.clear();
for(int i=1; i<=n; i++) {
if(g[i]%2==1) {
p.push_back(i);
}
}
}
int sd=0;
for(int i=0; i<pp.size(); i++) {
if(pp[i]==p) {
sd=i+1;
}
}
if(h<=sd) {
int cs=0;
for(int i=1; i<=h; i++) {
cs+=r[i];
}
int dd=0;
for(int i=2; i<=n; i++) {
dd+=2*q[i].size();
}
cout<<cs-dd<<"\n";
} else {
int cs=0;
for(int i=1; i<=sd-1; i++) {
cs+=r[i];
}
int f=0;
for(int i=sd; i<=u; i++) {
f+=r[i];
}
int y=0;
for(int i=sd; i<=(h-sd+1)%(u-sd+1); i++) {
y+=r[i];
}
int dd=0;
for(int i=2; i<=n; i++) {
dd+=2*q[i].size();
}
cout<<cs+f*((h-sd+1)/(u-sd+1))+y-dd;
}
return 0;
}
/*
20
1000000000
01111111111111111111
10111111111111111111
11011111111111111111
11101111111111111111
11110111111111111111
11111011111111111111
11111101111111111111
11111110111111111111
11111111011111111111
11111111101111111111
11111111110111111111
11111111111011111111
11111111111101111111
11111111111110111111
11111111111111011111
11111111111111101111
11111111111111110111
11111111111111111011
11111111111111111101
11111111111111111110
569999999278
*/