退役zz沉迷紫书不能自拔
AC自动机不会了
LCT敲不出了 哦splay也是
真是mdzz 三年的东西只有竞赛是真正还给了老师
让我觉得自己智商下线的几个点:
很多读入遇 \n 结束,及时用getchar搞掉
以及uva202,循环节出现取决于除式中余数的重复位置
以及uva1588,两根条的相对位置大体是三种情况,一开始只考虑两种,sb的不行
以及uva11809,m和e都能搞反……
因为m,e较小,直接预处理后针对询问查找即可
uva1585
#include <cstdio> #include <cstring> const int maxn = 100; int n, ans; char s[maxn]; int main() { scanf("%d", &n); for (int i = 1; i <= n; ++ i) { ans = 0; scanf("%s", s); int len = strlen(s); for (int j = 0, o = 0; j < len; ++ j) if (s[j] == 'O') { ++ o; ans += o; } else o = 0; printf("%d\n", ans); } return 0; } uva1586 #include <cstdio> #include <cstring> #include <cctype> const int maxn = 105; const double C = 12.01; const double H = 1.008; const double O = 16.00; const double N = 14.01; int T, n; char s[maxn]; int calc(int &i) { int res = 0; if (i == n || isalpha(s[i + 1])) return 1; while (isdigit(s[i + 1])) { ++ i; res = res * 10 + s[i] - '0'; //printf("now res = %d\n", res); } //printf("%d atons\n", res); return res; } int main() { scanf("%d", &T); while (T --) { scanf("%s", s + 1); n = strlen(s + 1); //puts(s + 1); //printf("n = %d\n", n); double ans = 0.0; for (int i = 1; i <= n; ++ i) { //printf("s[%d] = %c\n", i, s[i]); switch (s[i]) { case 'C': ans += C * calc(i); //puts("fuck"); break; case 'H': ans += H * calc(i); break; case 'O': ans += O * calc(i); break; case 'N': ans += N * calc(i); break; } } printf("%.3lf\n", ans); } return 0; } uva1225 #include <cstdio> const int maxn = 10010; int T, n, ans[maxn][10]; int main() { ans[1][1] = 1; for (int i = 2; i <= 10000; ++ i) { for (int j = 0; j <= 9; ++ j) ans[i][j] = ans[i - 1][j]; int x = i; while (x) { ++ ans[i][x % 10]; x /= 10; } } scanf("%d", &T); while (T --) { scanf("%d", &n); for (int i = 0; i <= 8; ++ i) printf("%d ", ans[n][i]); printf("%d", ans[n][9]); printf("\n"); } return 0; } uva455 #include <cstdio> #include <cstring> const int maxn = 100; int T, n; char s[maxn]; bool check(int k) { if (n % k) return false; for (int i = 1; i <= k; ++ i) { int j = i + k; while (j <= n) { if (s[j] != s[j - k]) return false; j += k; } } return true; } int main() { //freopen("input.txt", "r", stdin); scanf("%d", &T); bool out = false; while (T --) { bool flag = true; scanf("%s", s + 1); n = strlen(s + 1); for (int k = 1; k <= n / 2; ++ k) if (check(k)) { if (out) printf("\n"); printf("%d\n", k); flag = false; break; } if (flag) { if (out) printf("\n"); printf("%d\n", n); } out = true; } return 0; } uva227 #include <cstdio> #include <cstring> #include <cctype> #include <iostream> #include <algorithm> using namespace std; const int maxn = 10; const int dx[4] = {-1, 1, 0, 0}; const int dy[4] = {0, 0, -1, 1}; int r, c, kase; char a[maxn][maxn], s[1010]; int trans[256]; bool work(int opt) { int tr = r + dx[opt], tc = c + dy[opt]; if (tr < 1 || tr > 5 || tc < 1 || tc > 5) return false; swap(a[r][c], a[tr][tc]); r = tr; c = tc; return true; } int main() { //freopen("input.txt", "r", stdin); trans['A'] = 0, trans['B'] = 1, trans['L'] = 2, trans['R'] = 3; while (gets(a[1] + 1)) { if (a[1][1] == 'Z') break; for (int i = 2; i <= 5; ++ i) gets(a[i] + 1); for (int i = 1; i <= 5; ++ i) for (int j = 1; j <= 5; ++ j) if (!isalpha(a[i][j])) { r = i; c = j; break; } /* puts("********************"); printf("r = %d, c = %d, a[][] = %c\n", r, c, a[r][c]); for (int i = 1; i <= 5; ++ i) printf("%s\n", a[i] + 1); puts("********************"); */ //exit(0); char ch; bool ok = true; while (cin >> ch && ch != '0') { if (! ok) continue; if (! work(trans[ch])) ok = false; } //puts("\nopt end 2"); getchar(); //exit(0); if (kase) puts(""); printf("Puzzle #%d:\n", ++ kase); if (! ok) puts("This puzzle has no final configuration."); else { for (int i = 1; i <= 5; ++ i) { printf("%c", a[i][1]); for (int j = 2; j <= 5; ++ j) printf(" %c", a[i][j]); puts(""); } } //exit(0); } return 0; } uva232 #include <cstdio> #include <map> using namespace std; #define st first #define nd second typedef pair<int, int> pii; const int maxn = 15; int r, c; char a[maxn][maxn]; pii pos[110]; void print1(int x, int y) { for (int i = y; i <= c; ++ i) { if (a[x][i] == '*') break; printf("%c", a[x][i]); } puts(""); } void print2(int x, int y) { for (int i = x; i <= r; ++ i) { if (a[i][y] == '*') break; printf("%c", a[i][y]); } puts(""); } int main() { //freopen("input.txt", "r", stdin); int kase = 0; while (scanf("%d", &r) == 1 && r) { if (kase) puts(""); scanf("%d", &c); getchar(); //printf("case #%d: r = %d, c = %d\n", kase, r, c); for (int i = 0; i <= r; ++ i) a[i][0] = '*'; for (int i = 0; i <= c; ++ i) a[0][i] = '*'; for (int i = 1; i <= r; ++ i) gets(a[i] + 1); /* for (int i = 0; i <= r + 1; ++ i) { for (int j = 0; j <= c + 1; ++ j) printf("%c", a[i][j]); puts(""); } */ int n = 0; for (int i = 1; i <= r; ++ i) for (int j = 1; j <= c; ++ j) { if (a[i][j] == '*') continue; if (a[i - 1][j] == '*' || a[i][j - 1] == '*') pos[++ n] = make_pair(i, j);//, printf("%d and %d make pair.\n", i, j); } printf("puzzle #%d:\n", ++ kase); //Across puts("Across"); for (int i = 1; i <= n; ++ i) { int x = pos[i].st, y = pos[i].nd; if (a[x][y - 1] != '*') continue; printf("%3d.", i); print1(x, y); } //Down puts("Down"); for (int i = 1; i <= n; ++ i) { int x = pos[i].st, y = pos[i].nd; if (a[x - 1][y] != '*') continue; printf("%3d.", i); print2(x, y); } } return 0; } uva1368 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1010; const int maxm = 55; int T, n, m, cnt[256]; char s[maxm][maxn]; int main() { //freopen("input.txt", "r", stdin); scanf("%d", &T); while (T --) { scanf("%d%d\n", &m, &n); //printf("m = %d, n = %d\n", m, n); for (int i = 1; i <= m; ++ i) gets(s[i] + 1); /* puts("********************"); for (int i = 1; i <= m; ++ i) puts(s[i] + 1); puts("********************"); */ int ans = 0; for (int i = 1; i <= n; ++ i) { memset(cnt, 0, sizeof cnt); for (int j = 1; j <= m; ++ j) ++ cnt[s[j][i]]; int a = cnt['A'], c = cnt['C'], g = cnt['G'], t = cnt['T'], tmp = max(max(a, c), max(g, t)); if (a == tmp) printf("A"); else if (c == tmp) printf("C"); else if (g == tmp) printf("G"); else printf("T"); ans += m - tmp; } printf("\n%d\n", ans); } return 0; }uva202 #include <cstdio> #include <cstring> int ans[1010], check[30010]; void work(int a, int b) { bool flag = false; int cnt = 0; memset(check, 0, sizeof check); //frac int gauss = a / b, rest = a - b * gauss, tmp; while (true) { tmp = check[rest]; check[rest] = ++ cnt; ans[cnt] = gauss; //printf("cnt = %d, gauss = %d, rest = %d, check[%d] = %d\n", cnt, gauss, rest, rest, cnt); if (flag) break; rest *= 10; gauss = rest / b; rest = rest - gauss * b; if (check[rest]) flag = true; //check[rest]: the start of the entire repeating cycle } printf("%d/%d = %d.", a, b, ans[1]); for (int i = 2; i <= tmp; ++ i) printf("%d", ans[i]); printf("("); for (int i = tmp + 1; i <= cnt; ++ i) { printf("%d", ans[i]); if (i - tmp == 50) { printf("..."); break; } } printf(")\n"); //length printf(" %d = number of digits in repeating cycle\n\n", cnt - tmp); return; } int main() { //freopen("input.txt", "r", stdin); int a, b; while (scanf("%d%d", &a, &b) == 2) work(a, b); return 0; } uva10340 #include <cstdio> #include <cstring> const int maxn = 100010; char s[maxn], t[maxn]; int main() { //freopen("input.txt", "r", stdin); while (scanf("%s%s", s + 1, t + 1) != EOF) { //printf("s = %s t = %s\n", s + 1, t + 1); //find s in t int n = strlen(s + 1), m = strlen(t + 1); bool flag = true; for (int i = 1, j = 0; i <= n; ++ i) { //i for s, j for t; ++ j; while (j <= m && s[i] != t[j]) ++ j; if (j > m) { flag = false; break; } } printf("%s\n", flag ? "Yes" : "No"); } return 0; } uva1587 #include <cstdio> #include <map> #include <algorithm> using namespace std; #define w first #define h second typedef pair<int, int> pii; pii r[10]; bool cmp(pii A, pii B) { return A.w == B.w ? A.h < B.h : A.w < B.w; } void work(pii &rect) { if (rect.w > rect.h) swap(rect.w, rect.h); } int main() { //freopen("input.txt", "r", stdin); while (scanf("%d%d%d%d%d%d%d%d%d%d%d%d", &r[1].w, &r[1].h, &r[2].w, &r[2].h, &r[3].w, &r[3].h, &r[4].w, &r[4].h, &r[5].w, &r[5].h, &r[6].w, &r[6].h) == 12) { for (int i = 1; i <= 6; ++ i) work(r[i]); sort(r + 1, r + 7, cmp); //for (int i = 1; i <= 6; ++ i) printf("r[%d] = (%d, %d)\n", i, r[i].w, r[i].h); //r[1], r[3], r[5] bool flag = r[1].w == r[3].w && r[1].h == r[5].w && r[3].h == r[5].h; if (! (r[1] == r[2] && r[3] == r[4] && r[5] == r[6])) flag = false; printf("%s\n", flag ? "POSSIBLE" : "IMPOSSIBLE"); } return 0; } uva1588 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 110; int n1, n2; int a[maxn], b[maxn]; char s1[maxn], s2[maxn]; bool check1(int st) { for (int i = 1; i <= n2 && st + i - 1 <= n1; ++ i) if (a[st + i - 1] + b[i] > 3) return false; return true; } bool check2(int st) { for (int i = 1; i <= n1 && st + i - 1 <= n2; ++ i) if (b[st + i - 1] + a[i] > 3) return false; return true; } int calc1(int st) { return max(n1, st + n2 - 1); } int calc2(int st) { return max(n2, st + n1 - 1); } int main() { //freopen("input.txt", "r", stdin); while (scanf("%s%s", s1 + 1, s2 + 1) == 2) { //printf("s1 = %s, s2 = %s\n", s1 + 1, s2 + 1); n1 = strlen(s1 + 1), n2 = strlen(s2 + 1); int ans = 0x3f3f3f3f; for (int i = 1; i <= n1; ++ i) a[i] = s1[i] - '0'; //for (int i = 1; i <= n1; ++ i) printf("%d ", a[i]); puts(""); for (int i = 1; i <= n2; ++ i) b[i] = s2[i] - '0'; //for (int i = 1; i <= n2; ++ i) printf("%d ", b[i]); puts(""); for (int i = 1; i <= n1; ++ i) if (check1(i)) ans = min(ans, calc1(i)); for (int i = 1; i <= n2; ++ i) if (check2(i)) ans = min(ans, calc2(i)); ans = min(ans, n1 + n2); printf("%d\n", ans); } return 0; } uva11809 #include <cstdio> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> using namespace std; double A[15][35]; int B[15][35]; char s[100]; int main() { //freopen("input.txt", "r", stdin); for (int i = 0; i <= 9; ++ i) //M for (int j = 1; j <= 30; ++ j) {//E double m = 1.0 - pow(2.0, - i - 1); int e = (1 << j) - 1; double lg = log10(m) + log10(2.0) * e; B[i][j] = (int)lg; A[i][j] = pow(10, lg - B[i][j]); } while (scanf("%s", s + 1) == 1) { if (!strcmp(s + 1, "0e0")) break; double a; int b; s[18] = ' '; sscanf(s + 1, "%lf %d", &a, &b); bool ok = false; for (int i = 0; i <= 9; ++ i) {//M for (int j = 1; j <= 30; ++ j)//E if (fabs(A[i][j] - a) < 1e-3 && B[i][j] == b) { printf("%d %d\n", i, j); ok = true; break; } if (ok) break; } } return 0; }