Task: | The Darkness |
Sender: | Game of Nolife |
Submission time: | 2016-11-12 15:54:43 +0200 |
Language: | C++ |
Status: | READY |
Result: | ACCEPTED |
test | verdict | time | |
---|---|---|---|
#1 | ACCEPTED | 0.06 s | details |
#2 | ACCEPTED | 0.05 s | details |
#3 | ACCEPTED | 0.06 s | details |
#4 | ACCEPTED | 0.06 s | details |
#5 | ACCEPTED | 0.05 s | details |
#6 | ACCEPTED | 0.06 s | details |
#7 | ACCEPTED | 0.05 s | details |
#8 | ACCEPTED | 0.07 s | details |
#9 | ACCEPTED | 0.05 s | details |
#10 | ACCEPTED | 0.05 s | details |
#11 | ACCEPTED | 0.06 s | details |
#12 | ACCEPTED | 0.06 s | details |
#13 | ACCEPTED | 0.07 s | details |
#14 | ACCEPTED | 0.06 s | details |
#15 | ACCEPTED | 0.07 s | details |
#16 | ACCEPTED | 0.05 s | details |
#17 | ACCEPTED | 0.05 s | details |
#18 | ACCEPTED | 0.06 s | details |
#19 | ACCEPTED | 0.07 s | details |
#20 | ACCEPTED | 0.06 s | details |
Code
#include <bits/stdc++.h> #define F first #define S second #define X real() #define Y imag() using namespace std; typedef long long ll; typedef long double ld; struct MaxFlow{ vector<vector<int> > f; vector<vector<int> > g; vector<int> used; int cc; int flow(int x, int t, int fl, int miv){ if (x==t) return fl; used[x]=cc; for (int nx:g[x]){ if (used[nx]!=cc&&f[x][nx]>=miv){ int r=flow(nx, t, min(fl, f[x][nx]), miv); if (r>0){ f[x][nx]-=r;f[nx][x]+=r; return r; } } } return 0; } int getMaxFlow(int source, int sink){ cc=1; int r=0; while (int t=flow(source, sink, 1e8, 1)){ r+=t; cc++; } return r; } void addEdge(int a, int b, int c){ // cout<<a<<" "<<b<<" "<<c<<endl; if (f[a][b]==0&&f[b][a]==0){ g[a].push_back(b); g[b].push_back(a); } f[a][b]+=c; } MaxFlow(int n) : f(n+1), g(n+1), used(n+1) { for (int i=1;i<=n;i++){ f[i]=vector<int>(n+1); } } }; ld lil[33][33]; int is[33][33]; int sq(int x){ return x*x; } int cc(int x, int y){ return x+32*y+1; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); ld b; cin>>b; ld h; cin>>h; int r,c; cin>>r>>c; for (int i=0;i<r;i++){ string s; cin>>s; for (int ii=0;ii<c;ii++){ int ls=s[ii]-'0'; for (int j=0;j<r;j++){ for (int jj=0;jj<c;jj++){ lil[j][jj]+=(ld)ls/(ld)(h*h+sq(i-j)+sq(ii-jj)); } } } } for (int i=0;i<r;i++){ for (int ii=0;ii<c;ii++){ if (lil[i][ii]<b){ is[i][ii]=1; } } } MaxFlow mf(2022); int source=2015; int sink=2016; for (int i=1;i<r-1;i++){ for (int ii=1;ii<c-1;ii++){ if (is[i][ii]) mf.addEdge(source, cc(i, ii), 1e8); for (int j=-1;j<=1;j++){ for (int jj=-1;jj<=1;jj++){ if ((j==0)^(jj==0)){ if (is[i][ii]==0&&is[i+j][ii+jj]==0) mf.addEdge(cc(i, ii), cc(i+j, ii+jj), 43); else mf.addEdge(cc(i, ii), cc(i+j, ii+jj), 11); } } } } } for (int i=0;i<r;i++){ for (int ii=0;ii<c;ii++){ if (i==0||i==r-1||ii==0||ii==c-1){ mf.addEdge(cc(i, ii), sink, 1e8); } } } cout<<mf.getMaxFlow(source, sink)<<endl; }
Test details
Test 1
Verdict: ACCEPTED
input |
---|
3 1 6 20 11111111111111111111 10000000000000000001 ... |
correct output |
---|
572 |
user output |
---|
572 |
Test 2
Verdict: ACCEPTED
input |
---|
5 3 20 20 99430944890999790539 90000000000000000009 ... |
correct output |
---|
440 |
user output |
---|
440 |
Test 3
Verdict: ACCEPTED
input |
---|
4 3 20 20 90942800243797808849 00000000200500000000 ... |
correct output |
---|
462 |
user output |
---|
462 |
Test 4
Verdict: ACCEPTED
input |
---|
4 2 20 20 90900978358342545029 90000000000000000000 ... |
correct output |
---|
396 |
user output |
---|
396 |
Test 5
Verdict: ACCEPTED
input |
---|
3 1 20 20 90403000200004347959 40030003000000000009 ... |
correct output |
---|
264 |
user output |
---|
264 |
Test 6
Verdict: ACCEPTED
input |
---|
6 1 20 20 94920997046000304949 95000000030000000000 ... |
correct output |
---|
682 |
user output |
---|
682 |
Test 7
Verdict: ACCEPTED
input |
---|
6 1 30 30 999850442695050450337460409749 000000000000000000000000000007 ... |
correct output |
---|
1384 |
user output |
---|
1384 |
Test 8
Verdict: ACCEPTED
input |
---|
6 1 27 30 902200595550033304232400574059 500045000020005000000000000003 ... |
correct output |
---|
1474 |
user output |
---|
1474 |
Test 9
Verdict: ACCEPTED
input |
---|
3 1 30 28 9242423007030963904204027009 0000000000000000000000000002 ... |
correct output |
---|
440 |
user output |
---|
440 |
Test 10
Verdict: ACCEPTED
input |
---|
3 1 10 20 11111111111111111111 10000000000000000001 ... |
correct output |
---|
638 |
user output |
---|
638 |
Test 11
Verdict: ACCEPTED
input |
---|
8 1 30 30 322222222222222222222222222223 200011110000111100001111000012 ... |
correct output |
---|
2024 |
user output |
---|
2024 |
Test 12
Verdict: ACCEPTED
input |
---|
8 1 30 30 322222222222222222222222222223 200001111100000111110000011112 ... |
correct output |
---|
2200 |
user output |
---|
2200 |
Test 13
Verdict: ACCEPTED
input |
---|
9 1 30 30 422222222222222222222222222223 200001111100000111110000011112 ... |
correct output |
---|
1936 |
user output |
---|
1936 |
Test 14
Verdict: ACCEPTED
input |
---|
3 1 20 20 11111111111111111111 10000000000000000001 ... |
correct output |
---|
1044 |
user output |
---|
1044 |
Test 15
Verdict: ACCEPTED
input |
---|
3 1 20 20 33333333333333333333 30000000000000000003 ... |
correct output |
---|
612 |
user output |
---|
612 |
Test 16
Verdict: ACCEPTED
input |
---|
3 1 20 20 33333333333333333333 30000000000000000003 ... |
correct output |
---|
580 |
user output |
---|
580 |
Test 17
Verdict: ACCEPTED
input |
---|
3 1 20 20 33333333333333333333 30000000000000000003 ... |
correct output |
---|
572 |
user output |
---|
572 |
Test 18
Verdict: ACCEPTED
input |
---|
3 1 20 20 33333333333333333333 30000000000000000003 ... |
correct output |
---|
660 |
user output |
---|
660 |
Test 19
Verdict: ACCEPTED
input |
---|
3 1 20 20 32323232323232323232 30000000000000000003 ... |
correct output |
---|
616 |
user output |
---|
616 |
Test 20
Verdict: ACCEPTED
input |
---|
3 3 20 20 90329000908300530089 60000000000003000005 ... |
correct output |
---|
330 |
user output |
---|
330 |