CSES - UKIEPC 2016 - Results
Submission details
Task:The Darkness
Sender:Game of Nolife
Submission time:2016-11-12 15:54:43 +0200
Language:C++
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.06 sdetails
#2ACCEPTED0.05 sdetails
#3ACCEPTED0.06 sdetails
#4ACCEPTED0.06 sdetails
#5ACCEPTED0.05 sdetails
#6ACCEPTED0.06 sdetails
#7ACCEPTED0.05 sdetails
#8ACCEPTED0.07 sdetails
#9ACCEPTED0.05 sdetails
#10ACCEPTED0.05 sdetails
#11ACCEPTED0.06 sdetails
#12ACCEPTED0.06 sdetails
#13ACCEPTED0.07 sdetails
#14ACCEPTED0.06 sdetails
#15ACCEPTED0.07 sdetails
#16ACCEPTED0.05 sdetails
#17ACCEPTED0.05 sdetails
#18ACCEPTED0.06 sdetails
#19ACCEPTED0.07 sdetails
#20ACCEPTED0.06 sdetails

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