退役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;
}