| 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 |
