#include using namespace std; int n,r,k; int prevk; long long val=0,max_val=0; vector > >cells; vector > >ans; vector > >Best; int attack[256][256],on,titan; long long cell_value[256][256]; long long mediogre; map used; bool used_table[256][256]; int a[256][256]; void read() { freopen("queens.in","r",stdin); freopen("queens.out","w",stdout); cin>>n>>r>>k; prevk=k; for(int i=0;i>a[i][j]; } void reset_fukushima() { for(int i=0;i<256;i++) for(int j=0;j<256;j++)attack[i][j]=0,used_table[i][j]=0; for(int i=0;i=max((i-r),0);o--)value+=a[o][j],cnt[a[o][j]]++; for(int o=i;o<=min((i+r),n-1);o++)value+=a[o][j],cnt[a[o][j]]++; for(int o=j;o>=max((j-r),0);o--)value+=a[i][o],cnt[a[i][o]]++; for(int o=j;o<=min((j+r),n-1);o++)value+=a[i][o],cnt[a[i][o]]++; for(int o=-r;o<=r;o++) { if(o==0 || i-o<0 || j+o<0 || j+o>=n || i-o>=n)continue; value+=a[i-o][j+o]; cnt[a[i-o][j+o]]++; } for(int o=-r;o<=r;o++) { if(o==0 || i+o<0 || j+o<0 || j+o>=n || i+o>=n)continue; value+=a[i+o][j+o]; cnt[a[i+o][j+o]]++; } int mx=0,com; for(int o=0;o<64;o++)if(cnt[j]>mx){mx=cnt[j],com=j;} value*=com; pair > sh; sh.first=value; sh.second.first=i; sh.second.second=j; cells.push_back(sh); cell_value[i][j]=value; } sort(cells.begin(),cells.end()); mediogre=cells[cells.size()/2].first; } void solve() { for(int p=cells.size()-1;p>=0;p--) { if(attack[cells[p].second.first][cells[p].second.second]==0) { used[p]=1; ans.push_back(cells[p]); val+=cells[p].first; int i=cells[p].second.first,j=cells[p].second.second; for(int o=i;o>=max((i-r),0);o--)attack[o][j]++; for(int o=i;o<=min((i+r),n-1);o++)attack[o][j]++; for(int o=j;o>=max((j-r),0);o--)attack[i][o]++; for(int o=j;o<=min((j+r),n-1);o++)attack[i][o]++; for(int o=-r;o<=r;o++) { if(o==0 || i+o<0 || j+o<0 || j+o>=n || i+o>=n)continue; attack[i+o][j+o]++; } for(int o=-r;o<=r;o++) { if(o==0 || i-o<0 || j+o<0 || j+o>=n || i-o>=n)continue; attack[i-o][j+o]++; } } } while(1) { bool fnd=0; int idx=-1; double mx=0.0; for(int i=cells.size()-1;i>=0;i--) { if(attack[cells[i].second.first][cells[i].second.second]<=k && !used[i]) { if(double(double(cells[i].first)/double(attack[cells[i].second.first][cells[i].second.second]))>mx) { fnd=1; idx=i; //k-=attack[cells[i].second.first][cells[i].second.second]; //break; mx=double(double(cells[i].first)/double(attack[cells[i].second.first][cells[i].second.second])); } } } if(!fnd)break; used[idx]=1; ans.push_back(cells[idx]); val+=cells[idx].first; k-=attack[cells[idx].second.first][cells[idx].second.second]; int i=cells[idx].second.first,j=cells[idx].second.second; for(int o=i;o>=max((i-r),0);o--)attack[o][j]++; for(int o=i;o<=min((i+r),n-1);o++)attack[o][j]++; for(int o=j;o>=max((j-r),0);o--)attack[i][o]++; for(int o=j;o<=min((j+r),n-1);o++)attack[i][o]++; for(int o=-r;o<=r;o++) { if(o==0 || i+o<0 || j+o<0 || j+o>=n || i+o>=n)continue; attack[i+o][j+o]++; } for(int o=-r;o<=r;o++) { if(o==0 || i-o<0 || j+o<0 || j+o>=n || i-o>=n)continue; attack[i-o][j+o]++; } } max_val=val; for(int i=0;i=max((i-r),0);o--)attack[o][j]++; for(int o=i;o<=min((i+r),n-1);o++)attack[o][j]++; for(int o=j;o>=max((j-r),0);o--)attack[i][o]++; for(int o=j;o<=min((j+r),n-1);o++)attack[i][o]++; for(int o=-r;o<=r;o++) { if(o==0 || i+o<0 || j+o<0 || j+o>=n || i+o>=n)continue; attack[i+o][j+o]++; } for(int o=-r;o<=r;o++) { if(o==0 || i-o<0 || j+o<0 || j+o>=n || i-o>=n)continue; attack[i-o][j+o]++; } attack[i][j]++; used_table[i][j]=1; pair > sheit; sheit.first=cell_value[i][j]; sheit.second.first=i; sheit.second.second=j; ans.push_back(sheit); } } } while(1) { bool fnd=0; int idx=-1; double mx=0.0; for(int i=cells.size()-1;i>=0;i--) { if(attack[cells[i].second.first][cells[i].second.second]<=k && !used[i] && !used_table[cells[i].second.first][cells[i].second.second]) { if(double(double(cells[i].first)/double(attack[cells[i].second.first][cells[i].second.second]))>mx) { fnd=1; idx=i; //k-=attack[cells[i].second.first][cells[i].second.second]; //break; mx=double(double(cells[i].first)/double(attack[cells[i].second.first][cells[i].second.second])); } } } if(!fnd)break; used[idx]=1; ans.push_back(cells[idx]); val+=cells[idx].first; k-=attack[cells[idx].second.first][cells[idx].second.second]; int i=cells[idx].second.first,j=cells[idx].second.second; for(int o=i;o>=max((i-r),0);o--)attack[o][j]++; for(int o=i;o<=min((i+r),n-1);o++)attack[o][j]++; for(int o=j;o>=max((j-r),0);o--)attack[i][o]++; for(int o=j;o<=min((j+r),n-1);o++)attack[i][o]++; for(int o=-r;o<=r;o++) { if(o==0 || i+o<0 || j+o<0 || j+o>=n || i+o>=n)continue; attack[i+o][j+o]++; } for(int o=-r;o<=r;o++) { if(o==0 || i-o<0 || j+o<0 || j+o>=n || i-o>=n)continue; attack[i-o][j+o]++; } } if(val>max_val) { max_val=val; Best.clear(); for(int i=0;i=n)return; if(!cont)reset_fukushima(); for(int j=0;j=max((i-r),0);o--)attack[o][j]++; for(int o=i;o<=min((i+r),n-1);o++)attack[o][j]++; for(int o=j;o>=max((j-r),0);o--)attack[i][o]++; for(int o=j;o<=min((j+r),n-1);o++)attack[i][o]++; for(int o=-r;o<=r;o++) { if(o==0 || i+o<0 || j+o<0 || j+o>=n || i+o>=n)continue; attack[i+o][j+o]++; } for(int o=-r;o<=r;o++) { if(o==0 || i-o<0 || j+o<0 || j+o>=n || i-o>=n)continue; attack[i-o][j+o]++; } val+=cell_value[i][j]; pair > sheit; sheit.first=cell_value[i][j]; sheit.second.first=i; sheit.second.second=j; ans.push_back(sheit); } } if(val>max_val) { max_val=val; Best.clear(); for(int i=0;i=n)return; if(!cont)reset_fukushima(); for(int i=0;i=max((i-r),0);o--)attack[o][j]++; for(int o=i;o<=min((i+r),n-1);o++)attack[o][j]++; for(int o=j;o>=max((j-r),0);o--)attack[i][o]++; for(int o=j;o<=min((j+r),n-1);o++)attack[i][o]++; for(int o=-r;o<=r;o++) { if(o==0 || i+o<0 || j+o<0 || j+o>=n || i+o>=n)continue; attack[i+o][j+o]++; } for(int o=-r;o<=r;o++) { if(o==0 || i-o<0 || j+o<0 || j+o>=n || i-o>=n)continue; attack[i-o][j+o]++; } val+=cell_value[i][j]; pair > sheit; sheit.first=cell_value[i][j]; sheit.second.first=i; sheit.second.second=j; ans.push_back(sheit); } } if(val>max_val) { max_val=val; Best.clear(); for(int i=0;i=max((i-r),0);o--)attack[o][j]++; for(int o=i;o<=min((i+r),n-1);o++)attack[o][j]++; for(int o=j;o>=max((j-r),0);o--)attack[i][o]++; for(int o=j;o<=min((j+r),n-1);o++)attack[i][o]++; for(int o=-r;o<=r;o++) { if(o==0 || i+o<0 || j+o<0 || j+o>=n || i+o>=n)continue; attack[i+o][j+o]++; } for(int o=-r;o<=r;o++) { if(o==0 || i-o<0 || j+o<0 || j+o>=n || i-o>=n)continue; attack[i-o][j+o]++; } attack[i][j]++; used_table[i][j]=1; pair > sheit; sheit.first=cell_value[i][j]; sheit.second.first=i; sheit.second.second=j; ans.push_back(sheit); } } } while(1) { bool fnd=0; int idx=-1; double mx=0.0; for(int i=cells.size()-1;i>=0;i--) { if(attack[cells[i].second.first][cells[i].second.second]<=k && !used[i] && !used_table[cells[i].second.first][cells[i].second.second]) { if(double(double(cells[i].first)/double(attack[cells[i].second.first][cells[i].second.second]))>mx) { fnd=1; idx=i; //k-=attack[cells[i].second.first][cells[i].second.second]; //break; mx=double(double(cells[i].first)/double(attack[cells[i].second.first][cells[i].second.second])); } } } if(!fnd)break; used[idx]=1; ans.push_back(cells[idx]); val+=cells[idx].first; k-=attack[cells[idx].second.first][cells[idx].second.second]; int i=cells[idx].second.first,j=cells[idx].second.second; for(int o=i;o>=max((i-r),0);o--)attack[o][j]++; for(int o=i;o<=min((i+r),n-1);o++)attack[o][j]++; for(int o=j;o>=max((j-r),0);o--)attack[i][o]++; for(int o=j;o<=min((j+r),n-1);o++)attack[i][o]++; for(int o=-r;o<=r;o++) { if(o==0 || i+o<0 || j+o<0 || j+o>=n || i+o>=n)continue; attack[i+o][j+o]++; } for(int o=-r;o<=r;o++) { if(o==0 || i-o<0 || j+o<0 || j+o>=n || i-o>=n)continue; attack[i-o][j+o]++; } } if(val>max_val) { max_val=val; Best.clear(); for(int i=0;i