终于放假了!可是还要学车,唉。。
没有一门挂太开心!(这学期的确没有花心思在学习上。。期末复习到崩溃。。
但是这一次涨了rating,开心> <!
A - Maximum in Table(签到)
<span style="font-size:18px;">#include <algorithm> #include <iostream> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <math.h> using namespace std; #define MAXN 50 #define OT printf #define LL long long #define INF 0x7f7f7f7f #define RUN(x) freopen(#x, "r", stdin); #define REP(i, n) for(i = 0; i < n; i++) #define FOR(i, s, e) for(i = s; i < e; i++) inline int RD(int &x) { x = 0; char ch = getchar(); while(!isdigit(ch)) { if(ch == '-') exit(0); ch = getchar(); if(ch == EOF) return 0; } while(isdigit(ch)) { x *= 10; x += ch - '0'; ch = getchar(); } return 1; } /*..........................................dizzy............................................*/ LL Grid[11][11]; int main() { int i, j, n; FOR(i, 1, 11) Grid[1][i] = 1; RD(n); FOR(i, 1, n + 1) { Grid[i][1] = 1; FOR(j, 2, n + 1) Grid[i][j] = Grid[i][j - 1] + Grid[i - 1][j]; } OT("%I64d\n", Grid[n][n]); return 0; } </span>
B - Painting Pebbles
<span style="font-size:18px;">#include <algorithm> #include <iostream> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <math.h> using namespace std; #define MAXN 50 #define OT printf #define LL long long #define INF 0x7f7f7f7f #define RUN(x) freopen(#x, "r", stdin); #define REP(i, n) for(i = 0; i < n; i++) #define FOR(i, s, e) for(i = s; i < e; i++) inline int RD(int &x) { x = 0; char ch = getchar(); while(!isdigit(ch)) { if(ch == '-') exit(0); ch = getchar(); if(ch == EOF) return 0; } while(isdigit(ch)) { x *= 10; x += ch - '0'; ch = getchar(); } return 1; } inline int RD(int &x0, int &x1) { return RD(x0) + RD(x1); } /*..........................................dizzy............................................*/ int pebble[101]; int color[101][101]; int cmp(int a, int b) { return pebble[a] < pebble[b]; } int main() { int i, j, t; int n, k; RD(n, k); int MIN = 101, MAX = 0; REP(i, n) { RD(pebble[i]); MIN = MIN < pebble[i] ? MIN : pebble[i]; MAX = MAX > pebble[i] ? MAX : pebble[i]; } if(MAX - MIN > k) puts("NO"); else { puts("YES"); REP(i, n) { int v = pebble[i] / k; int u = pebble[i] % k; REP(j, v) REP(t, k) color[i][j * k + t] = t + 1; REP(j, u) color[i][v * k + j] = j + 1; sort(color[i], color[i] + pebble[i]); REP(j, pebble[i]) { if(j) OT(" "); OT("%d", color[i][j]); } OT("\n"); } } return 0; } </span>
C - Sums of Digits (get到了新姿势:怎样在数位之和确定的情况下求得比指定数大的最小的数)
<span style="font-size:18px;">#include <algorithm> #include <iostream> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <math.h> using namespace std; #define MAXN 500 #define OT printf #define INF 0x7f7f7f7f #define RUN(x) freopen(#x, "r", stdin); #define REP(i, n) for(i = 0; i < n; i++) #define FOR(i, s, e) for(i = s; i <= e; i++) #define DWN(i, s, e) for(i = e; i >= s; i--) template <class T> inline int RD(T &x) { x = 0; char ch = getchar(); while(!isdigit(ch)) { if(ch == '-') exit(0); ch = getchar(); if(ch == EOF) return 0; } while(isdigit(ch)) { x *= 10; x += ch - '0'; ch = getchar(); } return 1; } /*..........................................dizzy............................................*/ int a[MAXN], b[MAXN], len; void get(int b) { int i = 0; while(b) { while(a[i] < 9 && b) a[i]++, b--; if(i >= len && !b) len = i + 1; i++; } } void prt() { int i; DWN(i, 0, len - 1) OT("%d", a[i]); puts(""); } int main() { // RUN(C.in); int i, j, k, n; RD(n); memset(a, 0, sizeof(a)); len = 0; REP(i, n) { RD(b[i]); if(!i) { get(b[i]); prt(); continue; } if(b[i] > b[i - 1]) { get(b[i] - b[i - 1]); prt(); continue; } int tmp = b[i] - b[i - 1], k = 0; while(true) { if(k >= len) len = k + 1; if(a[k] < 9 && tmp > 0) { a[k]++, tmp--; get(tmp); break; } tmp += a[k], a[k] = 0; k++; } prt(); } return 0; } </span>