【组队训练】2013天津区域赛

三题,按现场排名应该是80名,铜牌靠后。

几次训练发现自己的心理素质实在是太!差!了!一开始,老规矩,我k题,zrA题,ysB题。

A题大模拟,比较费时,zr先看了过了几个人的H,31mins,1A

B题过的人越来越多,我看了N久终于看懂K题……不会做……我去问ys怎么样,他说了下题意,我觉得很水的暴力,让他直接写,他一直在和我讲说复杂度不够。我有点不耐烦,直接上机写。写的过程中出了点小问题,不过还是水题,一个小时左右1A

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <iostream>
using namespace std;
typedef long long ll;

const int N = 1000005;
const int INF = 0x5f5f5f5f;
const int MOD = 1000000007;

ll cal(int x, int m) {
    ll ans = 0;
    int f = m;
    while (x) {
        int z = x%m;
        ans += z*z;
        x /= m;
    }
    return ans;
}

void output(ll x, int m) {
    char ans[100]; int idx = 0;
    while (x) {
        int z = x%m;
        if (z < 10) ans[idx++] = z + '0';
        else ans[idx++] = z - 10 + 'A';
        x /= m;
    }
    for (int i = idx-1; i >= 0; --i) printf("%c", ans[i]); printf("\n");
}

void solve(int n, int m) {
    ll ans = 0;
    int lit = sqrt(n);
    for (int i = 1; i <= lit; ++i) {
        if (n % i == 0) {
            ans += cal(i, m);
            if (i != n/i) ans += cal(n/i, m);
        }
    }
    output(ans, m);
}

int main() {
    //freopen("in.txt", "r", stdin);
    int n, m;
    while (~scanf("%d%d", &n, &m)) {
        solve(n, m);
    }
    return 0;
}
View Code

然后看C题,我直接想到dp方程dp[i][j][k]表示前i个数已经排好,i+1是j,i+2是k的最小步数。但是转移方程没想好。和队友说了一下开始写,快写好的时候队友看了一眼,说由各情况没有考虑到,我一想确实是,心情瞬间就很烦躁,队友和我说思路的时候我不是很想理他,心情很烦,因为觉得全写错了(实际上只是差了一点),直接和队友说你有思路你写把,我不管了/我去想E,结果没想出来,后来队友说C他写错了,我已经想明白了,写了一发之后出了点bug,最后两个字母的旋转没考虑,上了个厕所突然明白,n+2之后解决,一共用了一个小时左右,1A

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <vector>
#include <iostream>
using namespace std;
typedef long long ll;

const int N = 1005;
const int INF = 0x5f5f5f5f;
const int MOD = 1000000007;

char a[N], s[N];
int dp[N][30][30];

int move(int p, int x) {
    return (p+x+10)%10;
}

void mi(int &x, int y) {
    if (x == -1 || x > y) x = y;
}

int step(int x, int y) {
    if (x>y) swap(x, y);
    return min(y-x, x+10-y);
}

int main()
{
    //freopen("in.txt", "r", stdin);
    while (~scanf("%s%s", a+1, s+1)) {
        int n = strlen(a+1);
        for (int i = 1; i <= n; ++i) {
            a[i]-='0'; s[i]-='0';
        }
        n+=2;
        memset(dp, -1, sizeof dp);
        dp[0][a[1]][a[2]] = 0;
        for (int i = 0; i <= n-2; ++i) {
            for (int j = 0; j <= 9; ++j) {
                for (int k = 0; k <= 9; ++k) {
                    if (dp[i][j][k] < 0) continue;
                    for (int p = -4; p <= 5; ++p) {
                        for (int q = -4; q <= 5; ++q) {
                            int x = move(j, p+q);   //i+1
                            int y = move(k, p+q);   //i+2
                            int z = move(a[i+3], q);//i+3
                            int sp = step(x, s[i+1]);
                            mi(dp[i+1][y][z], dp[i][j][k] + sp + abs(p) + abs(q));
                        }
                    }
                }
            }
        }

        int ans = INF;
        for (int i = 0; i <= 9; ++i) {
            for (int j = 0; j <= 9; ++j) {
                if (dp[n-2][i][j] >= 0)
                ans = min(ans, dp[n-2][i][j]);
            }
        }

        printf("%d\n", ans);
    }
    return 0;
}
View Code

这时就剩半个小时了,他们两个在讨论A,其实我也看了,不过也没相处什么清晰的写法,就挂机了。zr尝试着写,结果还是除了问题,没能在比赛结束前写完。

 

我觉得我如果C题队友提醒我错了的时候,冷静下来好好想想,而不是硬拉着队友写,自己逃避,会减少很多浪费时间。只能说队友脾气都很好,没有生气,如果都像我这么情绪化……估计会打起来。。。。

以后一定要学会克制自己的负面情绪。。。克制。。克制。。

 

----

计划补题:E图论 F后缀自动机 Ksplay+线段树 //马丹 怎么都是我的

 

任重而道远阿~~~

posted @ 2016-08-29 18:48  我不吃饼干呀  阅读(242)  评论(0编辑  收藏  举报