康复训练1

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值