
AtCoder训练
atcoder
TURNINING
太蒻了
展开
-
Japanese Student Championship 2021 D - Nowhere P(递推 + 快速幂)
传送门这题很明显存在一个递推关系,思考了一下果然如此。设dp[i][j]为前i项的和膜p为j的方案数,显然dp[i+1][j] = dp[i][k] + 1(k + j != p), 那么问题来了,i和j的取值都为1e9,这个数组显然开不出来,开出来了也会超时。我们观察可以发现,其实对每个j只有唯一一个k能使k + j == p,也就是说dp[i+1][j] = sum(dp[i][k]) , k + j != p,1 <= j <= p - 1, 可以算出k刚好取到1到p-1,相当于少加原创 2021-04-18 21:58:21 · 6147 阅读 · 2 评论 -
AtCoder Beginner Contest 197(Sponsored by Panasonic)C - ORXOR
传送门这题的关键是如何分组。想象一下在一个数组中每两个数组间存在一个间隙,我们可以枚举每个间隙中是否存在一个“隔板”,当存在时就代表重新开始一个区间。可采用二进制枚举。一共有n-1个间隙,共2^(n-1)种情况。#include<bits/stdc++.h>using namespace std; typedef long long LL; typedef pair<int, int> P; const int maxn = 2e6 + 10;原创 2021-04-22 20:20:21 · 235 阅读 · 0 评论 -
KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)D - Happy Birthday! 2
传送门我们可以看出,B©序列的所有情况一共有2^n - 1种(就是每个数取或者不取),直接枚举肯定是不行。再继续观察题目给出的条件,求和后要对200取模,也就是说取模后的结果有200种情况。我们所有序列的情况一共2^n - 1种,取极限情况,当前200种情况所得的结果都不相同时,第201种情况必定出现重复,因此只要情况总数超过200时必定有解。我们可以取n = 8(2 ^ 8-1 > 201)然后找到两种相同的情况即可。当n < 8 时,我们也可以采用同样的方法枚举。不知道为什么开200的原创 2021-05-09 10:13:34 · 742 阅读 · 3 评论 -
Mynavi Programming Contest 2021(AtCoder Beginner Contest 201)E - Xor Distances
传送门题意:给你一棵树,问所有路径(不重复)上边权的异或和。思路:我很想说它是一题套路题,当我确实没有把它转换出来。。。。这里直接给出官方题解上的思路从而转换为我们熟悉的按位算贡献问题。依次枚举每一位,最多是2^60 - 1 枚举到第60位就行(其实这个无所谓,比最大值大就行),因为是选择两个dis(x,i),故只有出现 1 0 的情况才能对结果做出贡献。#include<bits/stdc++.h>using namespace std;typedef long long L原创 2021-05-18 20:26:04 · 549 阅读 · 4 评论 -
AISing Programming Contest 2021(AtCoder Beginner Contest 202)D - aab aba baa
传送门这是个什么神仙题题意:一个字符串由A个‘a’,B个‘b’,要求字典序第K大的数。思路:我们可以根据K的值来确定第i位是放‘a’还是放‘b’。设C(i,j)为放i个‘a’,j个‘b’的方案数。当K <= C(i-1, j)时,我们可以确定这里是放‘a’的,因为所有以a开头的都小于b开头的。当K > C(i-1, j)时,这里放b。当我们确定第i位放a时我们要找的就是C(i-1,j)中的第K大放b时我们要找的就是C(i,j-1)中的第k - C(i-1,j)大。因为数据小C(i原创 2021-06-09 20:36:25 · 233 阅读 · 1 评论 -
AtCoder Beginner Contest 196 D Hanjo (dfs + 状压)
传送门今天第一次学到给二维数组编号然后用二进制标记状态…别人这dfs用的是真6啊二进制状压:设这个数组的大小为n * m 那么 a[i][j] 对应的编号可以表示为(i-1) * m + j, 对应到二进制如果编号为i,如果bit & 1 << i为1表示该位置已经被使用过了。同理要想标记第i个位置:bit | 1 << i;对应到这题因为数据很小我们可以直接遍历每一种情况,注意长方体有两种摆法。#include<bits/stdc++.h>using原创 2021-04-20 22:41:08 · 269 阅读 · 0 评论