AtCoder
文章平均质量分 85
佐鼬Jun
这个作者很懒,什么都没留下…
展开
-
AtCoder Beginner Contest 196(D、E)
链接: link.D - Hanjo题意:给定一个N×MN×MN×M的矩阵,现在有AAA个1×21×21×2的小方块(可以横着用,也可以竖着用),BBB个1×11×11×1的小方块,现在问用这些方块填满矩阵,有多少种放法?思路直接状态压缩+dfs,把整个矩阵看成一维的[0,n×m−1][0,n×m-1][0,n×m−1]放1×11×11×1一直横着放就行,当要放1×21×21×2的小方块时,考虑竖着放和横着放的两种形式,当放完时答案+1+1+1,用二进制bitbitbit记录那些位置被占据了,当当原创 2022-01-19 19:27:29 · 556 阅读 · 0 评论 -
AtCoder Beginner Contest 232(E,F补题)
E - Rook Path题意:给定大小为H×WH×WH×W的矩阵,你现在有一个车(在矩阵可以朝着一个方向走任意距离),现在起点为(x1,y1)(x_1,y_1)(x1,y1),终点(x2,y2)(x_2,y_2)(x2,y2),你现在只可以恰好移动kkk次,问从起点移动到终点的方案数为多少?思路:对于横和纵分别定义一个dpdpdp方程,把一个二维的移动看成两个一维的移动,分别定义为X(i,0/1),Y(i,0/1)X(i,0/1),Y(i,0/1)X(i,0/1),Y(i,0/1)以X(原创 2021-12-21 19:14:54 · 785 阅读 · 1 评论 -
AtCoder Beginner Contest 231(E、F补题)
E - Minimal payments题意:给NNN种面值的钱币,现在需要支付XXX元,现在定义AAA为支付的钞票数,BBB为找钱找回来的钞票数,问A+BA+BA+B最小是多少?思路:直接记忆化搜索,金额较大,所以开mapmapmap定义f(n,x)f(n,x)f(n,x)为前nnn种钞票支付xxx元的情况下,最小的A+BA+BA+B那么此时为了让A+BA+BA+B最小,一定是尽可能用大钞票,所以f(n,x)=f(n−1,x%a[n])+x/a[n]f(n,x)=f(n-1,x \%a[n]原创 2021-12-16 08:30:00 · 608 阅读 · 0 评论 -
AtCoder Beginner Contest 230(E、F)
E - Fraction Floor Sum题意:求∑i=1n[ni]\sum \limits_{i=1} ^{n}[\frac{n}{i}]i=1∑n[in]思路:整除分块板子题#include <bits/stdc++.h>using namespace std;#define ll long longll F(ll n) { ll res = 0; for (ll l = 1, r; l <= n; l = r + 1) { r =原创 2021-12-06 19:37:30 · 511 阅读 · 0 评论 -
AtCoder Regular Contest 084
Snuke Festiv题意:给定长度为NNN的三个数组 A,B,C,现在让你分别从A,B,C中各选一个数,要保证A中选的数严格小于从B中选的数,从B中选的数要严格小于从C中选的数,即Ai<Bj<CkA_i<B_j<C_kAi<Bj<Ck,问有多少种选法?思路:先枚举每个BjB_jBj,算出每个BjB_jBj能搭配多少个CkC_kCk,这个用二分找即可,然后把这些数记录下来,求一边后缀和sumjsum_jsumj,然后再枚举每个AiA_iAi算出有原创 2021-12-02 11:06:46 · 252 阅读 · 0 评论 -
AtCoder Beginner Contest 229
D - Longest X#include <bits/stdc++.h>using namespace std;const int N = 2e5 + 10;#define ll long longchar s[N];ll sum[N];int len;int k;struct node { int id; int dis;} pos[N];bool check(int x) { for (int i = 1; i + x - 1 <= le原创 2021-11-30 16:32:35 · 1241 阅读 · 0 评论 -
AtCoder Beginner Contest 228(E、F补题)
E - Integer Sequence Fair题意: P=998244353P=998244353P=998244353输入三个数,M,N,KM,N,KM,N,K 就是需要求MkNmodM^{k^N} modMkNmod PPP思路: 由于数据范围很大 所以需要先处理KNK^NKN,再处理MkNM^{k^N}MkN根据费马小定理 如果gcd(a,p)=1gcd(a,p)=1gcd(a,p)=1那么ap−1≡1a^{p-1}≡1ap−1≡1(modpmod pmodp)在这个题中,由于PPP是素原创 2021-11-21 14:58:14 · 551 阅读 · 1 评论 -
AtCoder Beginner Contest 227
C - ABC conjecture题意:给定一个NNN,现在问有多少个三元组(A,B,C)(A,B,C)(A,B,C),A≤B≤CA≤B≤CA≤B≤C ,ABC≤NABC≤NABC≤N思路:直接暴力枚举,时间复杂度O(N23)O(N^{\frac{2}{3}})O(N32),枚举A和B然后算出有多少个C#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int s[N];#define ll原创 2021-11-16 09:23:59 · 1234 阅读 · 0 评论 -
AtCoder Beginner Contest 226(E、F补题)
E - Just one链接: link.题意:NNN个点MMM条无向边,现在给每个边定一个方向,总计2M2^M2M种方案,但现在规定每个点的出度为111,且仅为111(有且仅有一条出边),现在问有多少种方案?思路:要想将无向图定向,是每个点的出度为111,那就需要每个点都有一条出边,此时就可以按照点数和边数的关系来分类讨论。1.对于一个连通图来说 如果点数>>>边数,要么是不连通图(与定义矛盾),要么就是一颗树,无法实现每个点都有出边,因为点数的边数不对应,一定会有一条边没原创 2021-11-10 19:26:12 · 372 阅读 · 0 评论 -
ACL Contest 1(补题)
A - Reachable Towns题目链接: link.题意:在二维坐标轴给定NNN个点,每个点都可以向x和x和x和原创 2021-11-01 20:31:21 · 190 阅读 · 3 评论 -
AtCoder Beginner Contest 225(补题)
D - Play Train链接: link.题意:给NNN个或者分离的火车头,现在有QQQ次操作,每次操作有333种类型,1.x1.x1.x yyy代表把xxx车的尾部和yyy车的头部连接起来2.x2.x2.x yyy代表把xxx车的尾部和yyy车的头部分离开3.x3.x3.x代表 输出与xxx车连接的所有车,输出个数并从头到尾输出各个车的编号思路:用非路径压缩版并查集就可以解决这个问题,直接按照输入的操作,分别实现并查集的合并、分离,并按照顺序输出并查集元素。#include <b原创 2021-11-01 19:59:40 · 421 阅读 · 2 评论 -
AtCoder Beginner Contest 142(补题)
E - Get Everything链接: link.题意:有NNN把需要解锁的宝箱,编号为1−N1-N1−N,现在有MMM把钥匙,每把钥匙价值aia_iai元,每把钥匙可以解锁bib_ibi个宝箱,可以解锁的宝箱种类分别为ci1,ci2....cibic_{i1},c_{i2}....c_{ibi}ci1,ci2....cibi。问你花最少多少钱可以把所有钥匙都解锁思路:宝箱的数量较小,可以用2进制状态压缩来表示每个宝箱持有的状态。例如1号宝箱就是0000000100000001000原创 2021-10-22 20:53:40 · 306 阅读 · 0 评论 -
AtCoder Regular Contest 128(补题)
D - Neq Neq链接: link.题意:给一个长度为NNN的序列,Ai,A2.....AnA_i,A_2.....A_nAi,A2.....An,现在可以删除一些数,删除的原则是,三个相邻的数,Ax,Ay,AzA_x,A_y,A_zAx,Ay,Az,可以删除AyA_yAy,问能形成多少种序列,序列不同,只要里面有一个数的下标不同,就算序列不同。思路:f(i)f(i)f(i)代表以第iii个数为结尾的序列方案数那么此时想要求出f(i)f(i)f(i),序列无论是何种情况,都可以原创 2021-10-20 20:15:46 · 195 阅读 · 0 评论 -
AtCoder Beginner Contest 223(补题)
F - Parenthesis Checking链接: link.题意:给定一个括号字符串,现在有两种操作操作1:给定l,r,交换l,r的字符操作2: 给定l,r,查询这个区间的括号是否合法思路:( 定义为+1,) 定义为-1,对于原串,维护一个前缀和对于查询操作 [l,r] 区间合法的话,这个区间的和必须是0,代表整体匹配,区间的前缀和中的每个值都必须>=0>=0>=0,代表内部每个括号的匹配了。简化下来就是,区间内前缀和的最小值必须>=0,区间和必须=0#in原创 2021-10-18 19:50:38 · 327 阅读 · 0 评论 -
AtCoder Beginner Contest 222(补题)
E - Red and Blue Tree#include <bits/stdc++.h>using namespace std;#define ll long longconst int N = 1e5 + 10;const ll mod = 998244353;typedef pair<int, int> PII;vector<vector<PII> > e;vector<int> sum;ll f[N];int n, m,原创 2021-10-11 18:22:44 · 316 阅读 · 2 评论 -
AtCoder Regular Contest 126(补题)
A - Make 10题目链接: link.题意:给A个长度为2的木棍,B个长度为3的木棍,C个长度为4的木棍,通过拼接木棍,最多能拼成多少个长度为10的木棍思路:由于长度为3的木棍要与其他木棍拼接成10的木棍(3322,334),长度3木棍必须是偶数,所以就把长度为3的木棍的数量就当成...原创 2021-09-22 18:56:00 · 416 阅读 · 2 评论 -
AtCoder Beginner Contest 191
C - Digital Graffiti题目链接: link.题意:在一个矩阵中 ‘.’‘.’‘.’代表空,#代表图案,现在矩阵中用#绘制了几个多边形,多边形之间没有相交,矩阵为n⋅mn·mn⋅m的,现在矩阵的中多边形有多少个直边,直边说明没有断开,也没有突起和凹下。思路:我的思路是对于图形的上面下面左边右边都判断一下,即几个上面,几个下面,几个左面,几个右面。对于正面来说,就是没有断开,比较暴力的做法,但是很好理解#include <bits/stdc++.h>using nam原创 2021-09-17 16:10:40 · 117 阅读 · 0 评论 -
AtCoder Beginner Contest 193(补题)
D - Poker题意:一共有9∗K9*K9∗K张卡片,每个卡片编号从1——9,每个编号的卡片有K,张,现在高桥前四张卡片已经知道,第5张卡片位置,青木也是如此,对于每个人的分数计算公式在下面,cic_ici是此人拥有编号为iii的数量,现在问高桥获胜的概率。思路:直接暴力枚举高桥第五张牌的所有情况,青木也是如此,记剩下卡牌数位cntcntcnt,那总情况数就是cnt∗(cnt−1)cnt*(cnt-1)cnt∗(cnt−1),也就是计算概率时的分母。分子就是高桥赢的情况数,从1——9所有原创 2021-09-15 00:30:06 · 187 阅读 · 0 评论 -
AtCoder Beginner Contest 218(补题)
C - Shapes题意:给定两个图,SSS和TTT,’#'代表图案,‘.’‘.’‘.’代表空,整幅图是N✖NN✖NN✖N的大小,现在问你,能否旋转90°和平移的操作(操作数不限),来把S图中的图案,变成T中的图案思路:找到S图和T图中,图案的最左端、右端、上端、下端的坐标,上下左右坐标之外的地方说明都是空地,不用管,此时,此时,把新图(坐标是最左端右端上端下端之中的图),通过旋转,会有4种情况,旋转0,90,180,270,把旋转出来的图,存下来,看T图中是否有上述4种情况之一的图,可以小优原创 2021-09-13 20:00:12 · 326 阅读 · 0 评论 -
AtCoder Beginner Contest 215(补题)
C - One More aab aba baa题目链接: link.题意:给一个字符串,让你输出由该字符串的字母组成的所有全排列中的第k个全排列是什么?思路:#include <bits/stdc++.h>using namespace std;string s;int k;int a[8];int main() { cin >> s >> k; sort(s.begin(), s.end()); int len = s.si原创 2021-08-23 09:43:16 · 236 阅读 · 1 评论 -
AtCoder Beginner Contest 171(补题)
C - One Quadrillion and One Dalmatians题意:现在1到261到261到26的数字为a到za到za到z,272727到702702702数字为 aa, ab, ac, …, zy, zz,475255,475256为aaaaa, aaaab,现在给你数字nnn,让你输出对应的字符串思路:26个字母,所以转换为26进制,每次取余前,要减去1,把[1,26][1,26][1,26]映射到[0,25][0,25][0,25],然后输出即可#include <b原创 2021-08-20 16:42:20 · 154 阅读 · 0 评论 -
AtCoder Beginner Contest 167(补题)
C - Skill Up题意:高桥对于MMM种算法的基础是0,现在有N本书,每本书对这M种算法都有加成,第iii本书,售价CiC_iCi元,对于算法的提升是Ai,1A_{i,1}Ai,1Ai,2A_{i,2}Ai,2Ai,3A_{i,3}Ai,3…Ai,MA_{i,M}Ai,M,现在要求使高桥对于M种算法的基础超过X,问最少花多少钱。思路:N和M的数据范围只有12,可以直接暴力dfs搜索,注意加一点剪枝,就可以,这里我写的搜索参数dfs(int uuu, int costcostc原创 2021-08-19 20:02:34 · 188 阅读 · 0 评论 -
AtCoder Beginner Contest 214(补题)
C - Distribution题意: 每个人都会在ttt这个时间得到一个宝石,每个人都会处理宝石sss时间,所以第iii个人会在tit_iti时间得到宝石,并在ti+siti+siti+si时间给第i+1i+1i+1个人,第nnn个人会给第111个人,现在问每个人第一次得到宝石的时间是什么时候。思路: 先找第一个得到宝石的人,从这个人开始往后循环找,从第1个得到宝石的人开始,后面的所有人的第一颗宝石要么使 是前一个人给他的,要么使在tit_iti这个时间得到的,直接在两者之间取最小值。#i原创 2021-08-16 10:14:21 · 285 阅读 · 0 评论 -
AtCoder Regular Contest 117(练习)
A - God Sequence题意: 让你构造一个数组,由A个正整数,B个负数组成的长度为A+B的数组,数组内部的元素不能重复,不能为0,让你构造思路: 直接构造一个等差数列1,2,3,4…,另一个短的最后一个元素就是长的数组后面那些元素的和。#include <bits/stdc++.h>using namespace std;const int N = 1111;int main() { int a, b; cin >> a >>原创 2021-08-14 09:33:02 · 263 阅读 · 1 评论 -
Connectivity(并查集)
D - Connectivity-abc049题意: 有n个点,k条公路,lll条铁路,公路和铁路都是连接两个点的边,没有重边,只要A和B点能通过公路相通,就说明A和B使公路连接,铁路连接和这个一样,现在问,对于每个点来说,有多少个点是通过铁路和公路与这个点相连通(自己算连接自己)(题意读了半天没读懂,样例都没研究出来 )思路: 其实题目简化问题就是通过公路与当前点相连的点与通过铁路与当前点相连的点的交集。开两种并查集,来记录哪些点是通过公路和铁路与当前点相连,然后开个Map来存交集个数,M原创 2021-08-12 20:41:26 · 148 阅读 · 1 评论 -
AtCoder Regular Contest 124(练习)
A - LR Constraints题意: N张卡片,每个卡片上的数字不超过K,且有K种限制,若cic_ici是‘L’,则kikiki这个位置必须是数字kik_iki,且从左往右数这个位置必须是第一次出现kik_iki这个数字的位置,若cic_ici是‘R’,则kikiki这个位置必须是数字kik_iki,且从左往右数这个位置必须是第一出现kik_iki这个数字的位置,现在问你在这些限制下,有多少种卡牌摆放方案思路: 没有限制的情况下,每个位置都可以放k种卡片,有了限制后,对于指定位置原创 2021-08-11 19:36:29 · 309 阅读 · 0 评论 -
AtCoder Beginner Contest 213(补题)
C - Reorder Cards题意: 给定一个n*m的矩阵,里面的一部分点被标记了,现在要把所有一行中没有标记点的行全部删除,所有一列中没有标记的列全部删除,问你再删除后的矩阵,那些标记点的坐标位置。思路: 考的就是离散化,也可以利用排序来做。将输入的标记的点放进vector中,在去重用二分输出即可。#include <bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int a[N], b[N];vecto原创 2021-08-09 10:37:09 · 418 阅读 · 4 评论 -
AtCoder Beginner Contest 212(补题)
C - Min Difference题意: 长度为n的A数组和长度为m的B数组,求出∣Ai−Bj∣|Ai-Bj|∣Ai−Bj∣的最小值,i∈[1,n]i∈[1,n]i∈[1,n],j∈[1,m]j∈[1,m]j∈[1,m]思路: 如果两数组中有一样的元素,那差值最小值一定为0,这一点利用哈希表map来找就行(也可以一块用下面的方法来找),对B数组进行排序,对于每个Ai利用二分在B数组中第一个大于等于Ai的值,然后用Ai的值,减去找到在B数组找的值周边的值就行(前中后),注意判边界就行。#inclu原创 2021-08-02 09:13:51 · 228 阅读 · 1 评论 -
AtCoder Beginner Contest 211(补题)
C - chokudai题意: 问字符串s有多少个子序列,是字符串t “chokudai”.思路: 动态规划问题,设置dpf[i,j]dpf[i,j]dpf[i,j]为取前长度为i的字符串s,与字符串t前长度为j匹配的数量。那么此时,状态转移方程(官方题解,不想再手打了 )由于字符串t下标是从0开始的,所以下面的代码,方程转移会有小变化。笔记:这个解法,适用于所有寻找字符串s中找有多少个子序列t(在不超时的情况下)#include <bits/stdc++.h>using na原创 2021-07-26 08:57:18 · 377 阅读 · 6 评论 -
AtCoder Beginner Contest 210(C补题)
C - Colorful Candies题意: nnn个蛋糕,第iii个蛋糕的颜色是cic_ici,问在拿k个连续个蛋糕(cic_ici ci+1c_{i+1}ci+1…ci+k−1c_{i+k-1}ci+k−1)的情况下,能够最多拿多少种不同颜色的蛋糕?思路: 从前往后扫一遍,并利用mapmapmap存下每个蛋糕的数量,并利用了map对于重复元素的去重(求元素数量时,不算重复的,已经去重),对于扫过的区间长度大于>=>=>=k时,对于区间最左边(因移动区间而被冲掉的元素)的原创 2021-07-19 22:22:37 · 255 阅读 · 3 评论 -
AtCoder Beginner Contest 197(练习)
C - ORXOR题意: 给n个数,把n个数分成任意组,对每个组的数进行OR运算(或运算),对每个组的结果进行XOR运算(异或运算),最后输出最小的异或值。思路: 数据范围很小,可以状态压缩来枚举所有分组的情况,分组就代表着再哪个地方放上一个隔板,隔板之间的组XOR,隔板之内的数OR运算。总共有2n放隔板的方案(因为包含可以不放),利用二进制,哪一位有1,那个地方就放隔板。最后取最小值。关键: 把230种情况,利用二进制来枚举注意: 一开始存答案的值取2147483647,不能取0x3f3f3f3原创 2021-06-22 17:06:59 · 297 阅读 · 0 评论 -
AtCoder Beginner Contest 206(Sponsored by Panasonic)(补题)
D - KAIBUNsyo题意: 给n个数,有一种操作,就是令数组中所有等于xxx的数全部转变为yyy,问最少操作几次,才能形成回文数组。思路:原创 2021-06-21 12:46:16 · 505 阅读 · 1 评论 -
AtCoder Regular Contest 122(补题)
A - Many Formulae题意: 给定一个长度为n的数组,在两个数之间加‘+’或‘-’,但是不能连续加两个‘-’号,在上述规则下,求出n个数在所有‘+’‘-’号组合的和,并取余109+7思路: 建立两个二维数组dp[N][2]dp[N][2]dp[N][2],用dp[i][+]和dp[i][−]dp[i][+]和dp[i][-]dp[i][+]和dp[i][−]分别表示当前这个数的符号为‘+’和‘-’的答案way[i][+]和way[i][−]way[i][+]和way[i][-]way[原创 2021-06-15 18:53:21 · 265 阅读 · 2 评论 -
AtCoder Beginner Contest 205(补题)
D - Kth Excluded题意: 给n个数,q次询问,每次询问第k大的数(数轴上去掉这n个数后,第k大的数)思路: 对于这n个数,处理出来,当前这个数前面有多少个数没有被去掉(有多少数在数轴上),然后询问第k个数的时候,就找这个数在那个范围内,找到位置后,就从当前位置往右数k位,就是要找的数。例如: 样例 3 5 6 7 每个数都存前面有几个数没有被去掉,即 2 3 3 3要找第三位的时候,明显a[2]=3,符合题意前面有三个数,那这个数就是减去前面存在的数的数量,从3这位数再往后数1个,也原创 2021-06-15 18:52:51 · 389 阅读 · 2 评论 -
AtCoder Beginner Contest 204(补题)
C - Tour题意: 给个有向图,问你有多少对点,可以作为起点和终点,作为起点和终点,意味着可以从起点到终点。思路: 直接从每个点 dfs一遍,看能到达的点有多少个,直接加起来即可。#include<bits/stdc++.h>using namespace std;const int N=2010;int e[N],h[N],ne[N],idx;int n,m;bool st[N];void add(int a,int b) { e[idx]=b,ne[idx]=原创 2021-06-07 21:13:58 · 460 阅读 · 0 评论 -
AtCoder Beginner Contest 203(Sponsored by Panasonic)(补题)
A - Chinchirorin#include <bits/stdc++.h>using namespace std;int a, b, c;int main() { scanf("%d%d%d", &a, &b, &c); if (a == b) printf("%d\n", c); else if (a == c) printf("%d", b); else if (b == c)原创 2021-05-31 17:33:33 · 358 阅读 · 0 评论 -
AISing Programming Contest 2021(AtCoder Beginner Contest 202)(补题)
D - aab aba baa题意: 就是给你A个‘a’和B个‘b’,由a和b组成的所有字符串按字典序排列,输出第k个字符串。思路:和全排列有关,对于所有的排列情况,就是C(a+b,a).假设n=A+B.假设第一个字母你确定为‘a’那么你看剩下A-1个‘a’和B个‘b’的组合情况。如果小于K,说明你选‘a’是不合法的。不合法的原因是,C(n-1,a-1)这个数比k还小,说明现在以a开头的字符串在字典序的顺序中已经在第k个之前了,只能选‘b’了。来使字符串在字典序中的顺序靠后。如果大于等于K, 说原创 2021-05-23 23:48:20 · 356 阅读 · 0 评论