CSES - Datatähti 2016 alku - Results
Submission details
Task:Tontti
Sender:Hansuzu
Submission time:2015-09-30 10:41:42
Language:C++
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED14
#2ACCEPTED33
#3ACCEPTED53
Test results
testverdicttimegroup
#1ACCEPTED0.06 s1details
#2ACCEPTED0.05 s1details
#3ACCEPTED0.04 s1details
#4ACCEPTED0.05 s1details
#5ACCEPTED0.06 s1details
#6ACCEPTED0.07 s2details
#7ACCEPTED0.07 s2details
#8ACCEPTED0.06 s2details
#9ACCEPTED0.06 s2details
#10ACCEPTED0.08 s2details
#11ACCEPTED0.49 s3details
#12ACCEPTED0.51 s3details
#13ACCEPTED0.43 s3details
#14ACCEPTED0.42 s3details
#15ACCEPTED0.43 s3details

Code

#include <iostream>
using namespace std;

int n, m, x;

string f[2020];
int fi[2020][2020];

int sv[2020][2020];
int sh[2020][2020];
int sb[2020][2020];


int ilen(int a){
  int r=1; a/=10;
  while (a){ ++r; a/=10;}
  return r;
}


int main(){
  ios_base::sync_with_stdio(0); cin.tie(0);

  cin >> n >> m >> x;
  
  for (int i=0; i<n; ++i)cin >> f[i];
  
  for (int i=1; i<=n; ++i) for (int j=1; j<=m; ++j) fi[i][j]=(f[i-1][j-1]=='*')?1:0;
  
  
  for (int i=1; i<=n; ++i)
    for (int j=1; j<=m; ++j) sv[i][j]=sv[i][j-1]+fi[i][j];
    
  for (int j=1; j<=m; ++j)
    for (int i=1; i<=n; ++i) sh[i][j]=sh[i-1][j]+fi[i][j];
  
  for (int i=1; i<=n; ++i)
    for (int j=1; j<=m; ++j)
      sb[i][j]=sb[i-1][j-1]+sv[i][j-1]+sh[i-1][j]+fi[i][j];
  

  
  unsigned int ans=0;
  for (int i=1; i<=n; ++i){
    for (int j=1; j<=m; ++j){
      int a0=0; int b0=min(n-i, m-j);
      while (a0<b0){
        int md=(a0+b0)/2;
        if (sb[i-1][j-1]+sb[i+md][j+md]-sb[i-1][j+md]-sb[i+md][j-1]<x)
          a0=md+1;
        else
          b0=md;
      }
      if (sb[i-1][j-1]+sb[i+a0][j+a0]-sb[i-1][j+a0]-sb[i+a0][j-1]<x) ++a0;
      
      int a1=0; int b1=min(n-i, m-j);
      while (a1<b1){
        int md=(a1+b1+1)/2;
        if (sb[i-1][j-1]+sb[i+md][j+md]-sb[i-1][j+md]-sb[i+md][j-1]>x)
          b1=md-1;
        else
          a1=md;
      }
      if (sb[i-1][j-1]+sb[i+a1][j+a1]-sb[i-1][j+a1]-sb[i+a1][j-1]>x) --a1;
      ans+=a1+1-a0;
    }
  }
  cout << ans << "\n";
}

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
10 10 1
......*...
.......*..
*..*....*.
*....*....
...

correct output
94

user output
94

Test 2

Group: 1

Verdict: ACCEPTED

input
10 10 5
**********
**********
**********
**********
...

correct output
0

user output
0

Test 3

Group: 1

Verdict: ACCEPTED

input
10 10 10
**...*...*
*..*.**.*.
...**.*..*
*...**.*..
...

correct output
4

user output
4

Test 4

Group: 1

Verdict: ACCEPTED

input
10 10 5
****......
*.*.**..**
....*.*..*
...*.***..
...

correct output
16

user output
16

Test 5

Group: 1

Verdict: ACCEPTED

input
10 10 2
**.***..*.
...*.*....
.***.*...*
***.***..*
...

correct output
30

user output
30

Test 6

Group: 2

Verdict: ACCEPTED

input
500 500 1
.................................

correct output
9552040

user output
9552040

Test 7

Group: 2

Verdict: ACCEPTED

input
500 500 5
.................................

correct output
1536063

user output
1536063

Test 8

Group: 2

Verdict: ACCEPTED

input
500 500 25000
**...*...**..*.*..*.**.*..*.*....

correct output
288

user output
288

Test 9

Group: 2

Verdict: ACCEPTED

input
500 500 12500
**.**.*..*...*.**...*.***........

correct output
786

user output
786

Test 10

Group: 2

Verdict: ACCEPTED

input
500 500 5000
.*.*.**..*.*.**.**..*..**...*....

correct output
1763

user output
1763

Test 11

Group: 3

Verdict: ACCEPTED

input
2000 2000 1
.................................

correct output
489611392

user output
489611392

Test 12

Group: 3

Verdict: ACCEPTED

input
2000 2000 5
.................................

correct output
120725884

user output
120725884

Test 13

Group: 3

Verdict: ACCEPTED

input
2000 2000 400000
..*..**.**.**.*.***...**.*..**...

correct output
1849

user output
1849

Test 14

Group: 3

Verdict: ACCEPTED

input
2000 2000 200000
***.*....*.*..*....**..*..*.*....

correct output
2665

user output
2665

Test 15

Group: 3

Verdict: ACCEPTED

input
2000 2000 80000
**.**...*.***.**....**.*....*....

correct output
5587

user output
5587