比赛-NOIP2015 普及组复赛 (Nov, 2016)
先贴上代码,迟一些会附上文字讲解。
1 #include <cstdio> 2 int k, ans; 3 4 int main() 5 { 6 freopen("coin.in", "r", stdin); 7 freopen("coin.out", "w", stdout); 8 9 int day = 0, i = 0; 10 scanf("%d", &k); 11 do { 12 if ((day += ++i) > k) { 13 ans -= (day - k - i) * i; 14 break; 15 } 16 ans += i * i; 17 } while (true); 18 19 printf("%d ", ans); 20 21 fclose(stdin); 22 fclose(stdout); 23 24 return 0; 25 }
1 #include <cstdio> 2 3 const int MAX_N = 105, MAX_M = 105; 4 5 int n, m; 6 int nxt[8][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}, 7 {-1, 1}, {-1, -1}, {1, 1}, {1, -1}}; 8 bool G[MAX_N][MAX_M]; 9 10 void input() 11 { 12 int i, j; 13 char tt; 14 scanf("%d%d", &n, &m); 15 for (i = 1; i <= n; ++i) 16 for (j = 1; j <= m; ++j) { 17 while ((tt = getchar()) == ' ' || tt == ' '); 18 G[i][j] = tt == '*'; 19 } 20 return ; 21 } 22 23 void solve() 24 { 25 int i, j, k, ans; 26 for (i = 1; i <= n; ++i) { 27 for (j = 1; j <= m; ++j) { 28 if (G[i][j]) { 29 putchar('*'); 30 continue; 31 } 32 ans = 0; 33 for (k = 0; k < 8; ++k) 34 ans += G[i + nxt[k][0]][j + nxt[k][1]]; 35 printf("%d", ans); 36 } 37 putchar(' '); 38 } 39 return ; 40 } 41 42 int main() 43 { 44 freopen("mine.in", "r", stdin); 45 freopen("mine.out", "w", stdout); 46 47 input(); 48 solve(); 49 50 fclose(stdin); 51 fclose(stdout); 52 return 0; 53 }