| Task: | Tontti |
| Sender: | jokkebk |
| Submission time: | 2015-09-28 14:20:53 +0300 |
| Language: | C++ |
| Status: | READY |
| Result: | 100 |
| subtask | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 14 |
| #2 | ACCEPTED | 33 |
| #3 | ACCEPTED | 53 |
| test | verdict | time | subtask | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.06 s | 1 | details |
| #2 | ACCEPTED | 0.05 s | 1 | details |
| #3 | ACCEPTED | 0.04 s | 1 | details |
| #4 | ACCEPTED | 0.06 s | 1 | details |
| #5 | ACCEPTED | 0.05 s | 1 | details |
| #6 | ACCEPTED | 0.07 s | 2 | details |
| #7 | ACCEPTED | 0.07 s | 2 | details |
| #8 | ACCEPTED | 0.09 s | 2 | details |
| #9 | ACCEPTED | 0.07 s | 2 | details |
| #10 | ACCEPTED | 0.08 s | 2 | details |
| #11 | ACCEPTED | 0.56 s | 3 | details |
| #12 | ACCEPTED | 0.60 s | 3 | details |
| #13 | ACCEPTED | 0.55 s | 3 | details |
| #14 | ACCEPTED | 0.54 s | 3 | details |
| #15 | ACCEPTED | 0.53 s | 3 | details |
Compiler report
input/code.cpp: In function 'int main()':
input/code.cpp:41:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
S(n); S(m); S(x);
^
input/code.cpp:41:15: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
S(n); S(m); S(x);
^
input/code.cpp:41:21: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
S(n); S(m); S(x);
^Code
#include <iostream>
#include <vector>
using namespace std;
#define REP(n) for(__typeof(n) _i=0; _i<(n); ++_i)
#define FOR(i,a,b) for(__typeof(b) i=a; i<b; ++i)
#define FORE(i,a,b) for(__typeof(b) i=a; i<=b; ++i)
#define S(x) scanf("%d", &(x))
typedef long long LL;
#define MAX(a,b) ((a)<(b) ? (b) : (a))
int s[2001][2001];
char f[2000][2000];
// How many trees in k*k square where bottom right is (i,j)
int trees(int i, int j, int k, int na) {
int x=i-k, y=j-k;
if(x<0 || y<0) return na;
return s[i][j] - s[i][y] - s[x][j] + s[x][y];
}
int bin(int i, int j, int x) {
int l=0, h=2047;
for(int s=1024; s; s>>=1) {
if(trees(i,j,l+s, x+1) < x)
l += s;
if(trees(i,j,h-s, x+1) > x)
h -= s;
}
//cout << l << " and " << h << endl;
return l==h ? 0 : h-l-1;
}
int main() {
int n, m, x;
S(n); S(m); S(x);
FOR(i,0,n) cin >> f[i];
FORE(i,0,n) {
FORE(j,0,m) {
if(!i || !j) {
s[i][j] = 0;
} else {
s[i][j] = (f[i-1][j-1] == '*' ? 1 : 0) +
s[i-1][j] + s[i][j-1] - s[i-1][j-1];
}
}
}
int I = 0;
FORE(i,1,n) {
FORE(j,1,m) {
//cout << i << ", " << j << " = " << bin(i,j,x) << endl;
I += bin(i,j,x);
}
}
cout << I << endl;
return 0;
}
Test details
Test 1
Subtask: 1
Verdict: ACCEPTED
| input |
|---|
| 10 10 1 ......*... .......*.. *..*....*. *....*.... ... |
| correct output |
|---|
| 94 |
| user output |
|---|
| 94 |
Test 2
Subtask: 1
Verdict: ACCEPTED
| input |
|---|
| 10 10 5 ********** ********** ********** ********** ... |
| correct output |
|---|
| 0 |
| user output |
|---|
| 0 |
Test 3
Subtask: 1
Verdict: ACCEPTED
| input |
|---|
| 10 10 10 **...*...* *..*.**.*. ...**.*..* *...**.*.. ... |
| correct output |
|---|
| 4 |
| user output |
|---|
| 4 |
Test 4
Subtask: 1
Verdict: ACCEPTED
| input |
|---|
| 10 10 5 ****...... *.*.**..** ....*.*..* ...*.***.. ... |
| correct output |
|---|
| 16 |
| user output |
|---|
| 16 |
Test 5
Subtask: 1
Verdict: ACCEPTED
| input |
|---|
| 10 10 2 **.***..*. ...*.*.... .***.*...* ***.***..* ... |
| correct output |
|---|
| 30 |
| user output |
|---|
| 30 |
Test 6
Subtask: 2
Verdict: ACCEPTED
| input |
|---|
| 500 500 1 ................................. |
| correct output |
|---|
| 9552040 |
| user output |
|---|
| 9552040 |
Test 7
Subtask: 2
Verdict: ACCEPTED
| input |
|---|
| 500 500 5 ................................. |
| correct output |
|---|
| 1536063 |
| user output |
|---|
| 1536063 |
Test 8
Subtask: 2
Verdict: ACCEPTED
| input |
|---|
| 500 500 25000 **...*...**..*.*..*.**.*..*.*.... |
| correct output |
|---|
| 288 |
| user output |
|---|
| 288 |
Test 9
Subtask: 2
Verdict: ACCEPTED
| input |
|---|
| 500 500 12500 **.**.*..*...*.**...*.***........ |
| correct output |
|---|
| 786 |
| user output |
|---|
| 786 |
Test 10
Subtask: 2
Verdict: ACCEPTED
| input |
|---|
| 500 500 5000 .*.*.**..*.*.**.**..*..**...*.... |
| correct output |
|---|
| 1763 |
| user output |
|---|
| 1763 |
Test 11
Subtask: 3
Verdict: ACCEPTED
| input |
|---|
| 2000 2000 1 ................................. |
| correct output |
|---|
| 489611392 |
| user output |
|---|
| 489611392 |
Test 12
Subtask: 3
Verdict: ACCEPTED
| input |
|---|
| 2000 2000 5 ................................. |
| correct output |
|---|
| 120725884 |
| user output |
|---|
| 120725884 |
Test 13
Subtask: 3
Verdict: ACCEPTED
| input |
|---|
| 2000 2000 400000 ..*..**.**.**.*.***...**.*..**... |
| correct output |
|---|
| 1849 |
| user output |
|---|
| 1849 |
Test 14
Subtask: 3
Verdict: ACCEPTED
| input |
|---|
| 2000 2000 200000 ***.*....*.*..*....**..*..*.*.... |
| correct output |
|---|
| 2665 |
| user output |
|---|
| 2665 |
Test 15
Subtask: 3
Verdict: ACCEPTED
| input |
|---|
| 2000 2000 80000 **.**...*.***.**....**.*....*.... |
| correct output |
|---|
| 5587 |
| user output |
|---|
| 5587 |
