UOJ Logo Hantx的博客

博客

从此,我对考试过敏

2018-06-03 12:15:02 By Hantx

633B丝路

2018-06-01 20:59:56 By Hantx

可以发现,在数零时,只需要数出现几个五

首先: 5,10,15,20,25

分别是:1,2 ,3 ,4 ,6

然后继续……

发现,在1、6、31、156、781……时,会出现5的幂(>=1)

规律:×5+1

打个表,枚举0~4个当前可行值,剪掉之后继续枚举下一个……直到弄不完

不说了,贴代码,不懂自己看……

#include <cstdio>

int main()
{
    int n, k = 5, i, x[100] = {}, gs = 0, y[100];
    scanf("%d", &n);
    for (i = 1; i <= 100000; i = i * 5 + 1, k *= 5) {
        if (i > n) break;
        x[gs] = i;
        y[gs++] = k;
    }
    int ans = 0, remain = n, j;
    for (i = gs - 1; i >= 0; i--) {
        for (j = 0; j <= 4; j++)
            if (x[i] * j <= remain && x[i] * (j + 1) > remain) break;
        if (j > 4) break;
        ans += y[i] * j;
        remain -= x[i] * j;
    }
    if (remain != 0)
        printf("0\n");
    else printf("5\n%d %d %d %d %d\n", ans, ans + 1, ans + 2, ans + 3, ans + 4);
    return 0;
}

653B思路

2018-05-31 19:13:32 By Hantx

不像上次废话了

因为你知道N最大为6,只有36种的转换方法,所以可以BFS

因为你需要最后删减完结果为a,所以从a倒推

找出所有运算结果为a的运算符,记录个数,乘在计数器里。 然后你会发现,题目让你只能改前两个字符。 所以你再看第一个字符,找出所有的运算结果是这个字符的,先存入当前长度的累加器里(累加器是方便后面乘法),最后等到所有是这个长度算完了再乘。

就能求出结果了!!!

781A思路

2018-05-31 19:02:05 By Hantx

首先看数据量:20W,$N^2$得炸 所以选$N log N$或者直接O(N)

SO…… 喵了个咪呀,我居然不知道有没有可以使用的$N log N$!

所以直接上O(n)

不废话

讲思路:

题面意思就是:给你一棵树,让你求出最小的每个节点和所有相邻的颜色都不同的情况下,最少能有多少种颜色,并给出每个点的颜色

其实求个数很简单……

找出所有点相邻的所有点个数,找出最大值,输出本值加一。

但是总之

给出每个点没想好……

Hantx Avatar