Code Submission Evaluation System Login

Datatähti 2016 alku

Start:2015-09-28 00:00:00
End:2015-10-12 00:00:00
 

Tasks | Scoreboard | Statistics


CSES - Datatähti 2016 alku - Results
History
2015-09-30 10:41:42100
Task:Tontti
Sender:Hansuzu
Submission time:2015-09-30 10:41:42
Language:C++
Status:READY
Score:100

Feedback

groupverdictscore
#1ACCEPTED14
#2ACCEPTED33
#3ACCEPTED53

Test results

testverdicttime (s)group
#1ACCEPTED0.06 / 1.001details
#2ACCEPTED0.05 / 1.001details
#3ACCEPTED0.04 / 1.001details
#4ACCEPTED0.05 / 1.001details
#5ACCEPTED0.06 / 1.001details
#6ACCEPTED0.07 / 1.002details
#7ACCEPTED0.07 / 1.002details
#8ACCEPTED0.06 / 1.002details
#9ACCEPTED0.06 / 1.002details
#10ACCEPTED0.08 / 1.002details
#11ACCEPTED0.49 / 1.003details
#12ACCEPTED0.51 / 1.003details
#13ACCEPTED0.43 / 1.003details
#14ACCEPTED0.42 / 1.003details
#15ACCEPTED0.43 / 1.003details

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
......*...
.......*..
*..*....*.
*....*....
...
view   save

correct output
94

view   save

user output
94

view   save

Test 2

Group: 1

Verdict: ACCEPTED

input
10 10 5
**********
**********
**********
**********
...
view   save

correct output
0

view   save

user output
0

view   save

Test 3

Group: 1

Verdict: ACCEPTED

input
10 10 10
**...*...*
*..*.**.*.
...**.*..*
*...**.*..
...
view   save

correct output
4

view   save

user output
4

view   save

Test 4

Group: 1

Verdict: ACCEPTED

input
10 10 5
****......
*.*.**..**
....*.*..*
...*.***..
...
view   save

correct output
16

view   save

user output
16

view   save

Test 5

Group: 1

Verdict: ACCEPTED

input
10 10 2
**.***..*.
...*.*....
.***.*...*
***.***..*
...
view   save

correct output
30

view   save

user output
30

view   save

Test 6

Group: 2

Verdict: ACCEPTED

input
500 500 1
.................................
view   save

correct output
9552040

view   save

user output
9552040

view   save

Test 7

Group: 2

Verdict: ACCEPTED

input
500 500 5
.................................
view   save

correct output
1536063

view   save

user output
1536063

view   save

Test 8

Group: 2

Verdict: ACCEPTED

input
500 500 25000
**...*...**..*.*..*.**.*..*.*....
view   save

correct output
288

view   save

user output
288

view   save

Test 9

Group: 2

Verdict: ACCEPTED

input
500 500 12500
**.**.*..*...*.**...*.***........
view   save

correct output
786

view   save

user output
786

view   save

Test 10

Group: 2

Verdict: ACCEPTED

input
500 500 5000
.*.*.**..*.*.**.**..*..**...*....
view   save

correct output
1763

view   save

user output
1763

view   save

Test 11

Group: 3

Verdict: ACCEPTED

input
2000 2000 1
.................................
view   save

correct output
489611392

view   save

user output
489611392

view   save

Test 12

Group: 3

Verdict: ACCEPTED

input
2000 2000 5
.................................
view   save

correct output
120725884

view   save

user output
120725884

view   save

Test 13

Group: 3

Verdict: ACCEPTED

input
2000 2000 400000
..*..**.**.**.*.***...**.*..**...
view   save

correct output
1849

view   save

user output
1849

view   save

Test 14

Group: 3

Verdict: ACCEPTED

input
2000 2000 200000
***.*....*.*..*....**..*..*.*....
view   save

correct output
2665

view   save

user output
2665

view   save

Test 15

Group: 3

Verdict: ACCEPTED

input
2000 2000 80000
**.**...*.***.**....**.*....*....
view   save

correct output
5587

view   save

user output
5587

view   save