Atcoder Beginner Contest
文章平均质量分 58
atcoder,打算只做A到D题
沫刃起
计算机科学与技术22级
展开
-
AtCoder Beginner Contest 326
【代码】AtCoder Beginner Contest 326。原创 2023-12-16 21:41:33 · 405 阅读 · 0 评论 -
AtCoder Beginner Contest 327
通过打表发现大概16的16次方就已经越界了,然后15没有越界,所以只要枚举1的1次方,2的2次方,...15的15次方即可。原创 2023-12-14 14:31:47 · 428 阅读 · 0 评论 -
AtCoder Beginner Contest 332
看题目的问法,很明显是二分答案。数据量很小,直接暴力模拟。原创 2023-12-11 18:22:49 · 367 阅读 · 0 评论 -
AtCoder Beginner Contest 328
如果是存字符的话,可以用string代替栈,每插入一个字符,就判断最后三个字符是否是ABC,也可以用vector代替栈,好处是不仅可以知道栈顶,即最后一个元素,还可以知道倒数第二个,第三个...然后还是错,想的是判断栈顶是A,然后后面两个字符分别是B和C,但是如果栈里面存的是A和B,然后删了一个ABC之后,下一个刚好是B的话就错了。利用前缀和的思想,快速统计某区间满足题意的p的个数。利用string的find函数和erase函数。糊涂了,这题很明显用栈的。原创 2023-12-10 19:52:10 · 454 阅读 · 0 评论 -
AtCoder Beginner Contest 329
【代码】AtCoder Beginner Contest 329。原创 2023-12-08 12:30:08 · 417 阅读 · 0 评论 -
AtCoder Beginner Contest 330
那么大的数进行分解不好分,但是发现平方数的选取最多到1414213,所以进行暴力枚举,其中一个数确定之后就好分析了,另一个数保证代入式子之后在D的附近即可。运用乘法原理,对于每一个o,它所在行的o的个数减1*它所在列的o的个数减1即为以它为中心的图形的数量。对于每一个o,统计以它为中心的有几个,然后全部加起来。原创 2023-12-07 21:27:44 · 537 阅读 · 0 评论 -
AtCoder Beginner Contest 331
从小到大枚举出现过的数值,它的答案即为sum减去它的数值乘它的个数,同时sum也相应减小。数据比较小,直接考虑暴力枚举。原创 2023-12-05 18:04:29 · 400 阅读 · 0 评论 -
AtCoder Beginner Contest 322
【代码】AtCoder Beginner Contest 322。原创 2023-10-03 13:23:09 · 265 阅读 · 2 评论 -
AtCoder Beginner Contest 321
【代码】AtCoder Beginner Contest 321。原创 2023-09-24 15:23:09 · 217 阅读 · 0 评论 -
AtCoder Beginner Contest 314
后面的操作是有效的,对于转大小写,只要找到最后一次转大小写的操作是哪一次就行了,然后除了该次操作后面操作的位置不用考虑,其它位置都转成大写或者小写。先单独处理t为1时的位置,然后最后没有处理过的位置全部转化成大写或小写。原创 2023-08-28 23:41:31 · 169 阅读 · 0 评论 -
AtCoder Beginner Contest 313
我们可以发现,每次操作都是一个数加1,另一个数减1,那么当所有操作结束后,总和还是不变,为sum,然后我们最后统一要变成一堆x以及一堆x+1,由于x*n。一开始想的是将任意两个数分解成x和x+1,要使得次数最小,那么要让x尽量平均,于是让最大的数和最小的数分解,次大的数和次小的数分解...然后肯定是小的数变成x,大的数变成x+1,这样次数才最少,最后算出的差值之和是操作次数的两倍,因为每次操作的差值都是2(加1和减1)注意,它并不是两两对称配对的,所以不能只算前一半的数。原创 2023-08-28 23:39:14 · 132 阅读 · 0 评论 -
Atcoder Beginner Contest 317
这题其实是01背包的变式,与经典的01背包问题不同,f[i][j]表示在前i个物品里选,价值为j所需要的物品最小重量。一开始想贪心,每次贪席位最多的,但是后面想了想是不可能的,因为可能席位最多的那个,需要转移很多很多很多很多的票。一开始想的是最大生成树,但是了第三个样例后,知道这是不行的,因为不能有重复路径,树是可以走重复路径的。第一个错误在于给答案赋值的时候,一直没有赋值进去,因为e[x],size()不可能等于0。其实完全可以一直赋值的,因为是取max,一直赋值的话是完全没有问题的。原创 2023-08-28 23:37:32 · 92 阅读 · 0 评论 -
AtCoder Beginner Contest 218
我一开始做的思路是暴力求解,先将横坐标存入set1中,用vector将每个横坐标和它的纵坐标联系起来,枚举横坐标,对于其纵坐标,存入set2中,然后枚举后面的横坐标的纵坐标,数有多少个纵坐标和前面的纵坐标相同,记为cnt,则res+=cnt*(cnt-1)/2。然后对于每一次旋转过后,找到s中的图形起点以及t中的图形起点,算出它们的偏移量,然后枚举s,如果是#的话,判断偏移后对应t的位置是否超出边界以及是不是#枚举m条边,看是不是最开始记录下边,如果不是的话,直接输出的最短路的res。原创 2023-07-15 15:45:04 · 179 阅读 · 0 评论 -
Atcoder Beginner Contest 308
会卡精度,double就不能过全部数据,改成long double就AC了。对比之后发现我的代码少了标记已经走过的点。原创 2023-07-03 10:55:38 · 281 阅读 · 0 评论 -
Atcoder Beginner Contest 291
在N张卡片中选任意张卡片进行翻转,保证相邻的卡片数字是不同的。一共有N张卡片,排成一排。每张卡片正反面都有一个数。原创 2023-07-01 18:11:43 · 157 阅读 · 0 评论 -
Atcoder Beginner Contest 307
大致题意是一共有N个字符串,问是否有两个字符串连接起来能组成回文串。数据比较小,直接暴力枚举。原创 2023-06-28 22:24:41 · 261 阅读 · 0 评论 -
Atcoder Beginner Contest 292
首先所有的节点个数要和所有的边数相等,否则不可能每个连通块的节点个数都和边数相等。为解决这个问题,可以在每次换根节点时,将上一次的根节点累计继承到下一次的根节点上。注意,c++字符类型和数字类型运算会自动向数字类型转换,所以要强制类型转换。无向图,一共有N个节点,编号为1到N,一共有M条边,编号为1到M。问是否每个连通块的节点个数都和边数相等。原创 2023-06-25 19:31:56 · 228 阅读 · 0 评论 -
Atcoder Beginner Contest 293
【代码】Atcoder Beginner Contest 293。原创 2023-06-20 23:45:00 · 77 阅读 · 0 评论 -
Atcoder Beginner Contest 306
long long范围在[-2^31,2^31-1],存不下2^63次。原创 2023-06-19 18:58:30 · 252 阅读 · 0 评论 -
Atcoder Beginner Contest 305
一开始先确定矩形的范围,然后就在这个矩形中查找就行了。数据比较小,可以纯模拟,暴力求解。但是写代码的时候出现了问题。原创 2023-06-12 18:04:23 · 714 阅读 · 1 评论 -
Atcoder Beginner Contest 294
大致题意就是对于A的每一个数,输出它们在所有数中(A和B的所有数)是第几小的数,对于B的每一个数,输出它们在所有数中是第几小的数。这样就没有RE了,此时还有点小错误,看来大方向是没问题的,只不过有一些小细节没有处理好,可能有特殊情况没有考虑到。这样输入:输入N1对数字(x,y),表示数字x有y个,依次填入第一行。同理,输入N2对数字(x,y),表示数字x有y个,依次填入第二行。总的来说,一开始大致方向是对的,双指针主要难点在于处理边界问题。再进行改进,依旧是对边界的改进,改完之后又对了一个测试点。原创 2023-06-10 15:30:16 · 641 阅读 · 0 评论 -
Atcoder Beginner Contest 295
大致题意是在某个区间中所有数字的的个数都是偶数,问有几个这样的区间。原创 2023-06-09 21:02:28 · 647 阅读 · 0 评论 -
Atcoder Beginner Contest 296
题意是给定两个正整数N和M,然后在[1,N]之间选取两个数a,b(a可等于b),x等于a和b的乘积,求x的最小值(其中x大于等于M),如果不存在x,则输出-1。先单独判断特殊情况,如果N*N小于M,那么输出-1(因为N*N可能会超long long,所以改为N小于sqrt(M))如果纯按照题意模拟的话,会超时,其实只要标记好有哪些数,然后遍历所有数,如果加上x后的数是有的,那么就Yes,否则No。不妨设a小于等于b,然后从1到n遍历作为a的值,而b的值则取M/a向上取整。原创 2023-06-08 16:54:05 · 121 阅读 · 0 评论 -
Atcoder Beginner Contest 304
Virtual Standings中有一种做法是这样的:对于每一个草莓坐标,利用二分找到它所在的小矩形块,具体操作是对于草莓的横坐标x,在竖刀的所有横坐标中用二分找到第一个大于等于x的(向量)横坐标,同理找到第一个大于等于草莓的纵坐标y的(向量)纵坐标,这样找到的两个坐标就可以代表这个小矩形块,利用map,一一映射,然后map该坐标++,代表该小矩形块上的草莓个数++输入k对点,如果对于所有k对点,没有路相连(比如1->2->3,那么1->3有路相连),那么该无向图称作good。有n个点,m条边的无向图。原创 2023-06-07 17:40:22 · 731 阅读 · 0 评论 -
Atcoder Beginner Contest 297
数据太大了,纯模拟必定超时。原创 2023-06-07 17:02:33 · 504 阅读 · 0 评论 -
Atcoder Beginner Contest 298
数据比较小,可以直接暴力模拟,将c作为中转站,将转换的结果放入c中,再将c的结果放回a中。数字位数太多,数字太大,可以用队列存储,这样可以容易获得队头。3.将含有数字i的箱子中的数字全部按升序输出(去重)由1到n个箱子以及无限数量的空白卡(用来写数字)2.将箱子i中的数字全部按升序输出(不去重)只需要转换4次就能变回原来的矩阵。1.把数字i放到箱子j中。原创 2023-06-04 15:56:21 · 543 阅读 · 0 评论 -
Atcoder Beginner Contest 300
垂直偏移容易实现,不过就是字符串的上下移动,但是水平偏移的话估计得每一行每个字符都得移动,全部移动完之后又得判断字符串是否相等,感觉太麻烦。数据比较小,感觉这题需要将所有情况枚举出来,可以用dfs枚举出所有情况,同时判断是否可行,试了一会发现不太会用dfs,那直接就模拟,暴力枚举吧。然后从中选三个数,一个最小的数用2次,一个最大的数用2次,中间的数用1次。垂直偏移指的是对于所有行,每一行都往上移动一行,最上面一行移到最下面。水平偏移指的是对于所有列,每一列都往左移动一列,最左边一列移到最右边。原创 2023-06-03 13:24:37 · 835 阅读 · 0 评论 -
Atcoder beginner contest 303
一个二维平面,小明一开始在原点(0,0)处,初始健康值为H,一共有M个物品可以获得健康值,它们的位置都已知。感觉就是一个模拟题,但是数据比较大,如果用二维数组的话,会爆空间,想着能用哈希表压缩一下空间,使空间集中。小明将会走N步,当前坐标为(x,y),消耗1健康值来走一步,根据Si来确定走的方向,如果小明的健康值小于K,并且他所在的位置有物品,那么他的健康值变为K。但是没有得到满分,不知道哪里出了问题,可能是哈希冲突吧。如果他的健康值为负值,那么他就走不了了。然后正当我一筹莫展时。原创 2023-06-01 18:20:29 · 651 阅读 · 0 评论 -
Atcoder Beginner Contest 299
我一开始用双指针做,i来找到第一个o的位置,j来找到最后一个o的后一个位置,然后如果s[i-1]为-或者s[j]为-,那么res=max(res,j-i)需要进行一个优化,其实j根本就没必要回溯,只要一直往前走就行了,只有当j<i时,使得j从i开始出发就行了。原创 2023-05-24 17:29:43 · 92 阅读 · 0 评论 -
Atcoder beginner contest 302
通过操作来看,如果是连边操作,那么将这两个点都标记为true,在标记之前,如果它们为false的话,那么就cnt++,表示连了边的点的个数;大致题意就是有N个点,有q次操作,每次操作要么在两个点之间连一条边,要么删掉一个点的所有边(点不删掉,那么该点就变成孤立点了),对于每一次操作,输出有多少个点是孤立的。试了一下之后,发现思路错误,因为如果一开始只有2,3连了边,那么孤立点有1个,删掉2的边之后,孤立点变成了3个,所以删除2的边操作不能只删除一次。那么问题在于删了一个点的边之后,到底还有几个孤立点。原创 2023-05-24 17:22:59 · 927 阅读 · 0 评论 -
Atcoder beginner contest 301
【代码】Atcoder beginner contest 301。原创 2023-05-17 16:38:27 · 526 阅读 · 0 评论 -
Atcoder Beginner Contest 046
该题的关键在于输入的两个数是互质的,也就意味着两个数不可再分解,也就是两个票数的比例是定死的,比如是a:b,那么两票数只能是它们的倍数,即a*2,b*2或a*3,b*3或a*4,b*4...a*k,b*k。该题关键在于每轮过后,选手出布的数量要小于等于石头,这也就意味着第一张肯定得出石头,且要想出布,首先得出石头,即出了几张石头,后面才能出几张布。乘法原理:第一个可以用k种,第二个颜色可以用k种,后面都是可以用k种,乘法原理,全部乘起来。每一次的票数就是a*k和b*k。比较简单,一遍过,全对。原创 2023-04-15 16:27:12 · 94 阅读 · 0 评论 -
Atcoder Beginner Contest 045
那么只要预先处理好每个格子被贡献了多少度,然后枚举每个矩阵(通过枚举格子(以该格子为中心,可以形成完整的九宫格),也就是除去边界的格子),得到每个矩阵包含了几个涂色的格子,然后用桶计数,得到包含1个涂色格子的矩阵有几个,包含2个涂色格子的矩阵有几个...最后输出就行了。比如说a对b的贡献度+1,说明了a在b的四周,同时说明b在a的四周,即a在以b为中心的九宫格里,那么也就是说有几个格子对b有贡献度,就说明以b为中心的矩阵包含了几个涂色的格子。如果第一层数字为1,那么第二层数字就从2开始,2,25。原创 2023-04-15 11:58:08 · 161 阅读 · 2 评论 -
Atcoder Beginner Contest 044
我一开始想的是先从小到大排个序,然后分情况,先从左往右一个数一个数枚举,如果等于ave*1,就res++,如果大于ave*1,就说明1个数的没有了,然后从左到右两个数两个数枚举,如果等于ave*2,就res++,如果大于ave*2,就说明两个数的没有了,以此类推。所以b=(n-s)/a1+1,因为a1a0+a1*b=n。原创 2023-04-12 18:24:24 · 85 阅读 · 0 评论 -
Atcoder Beginner Contest 043
如果没有XX和XYX,那么X与X之间至少存在两个字符,即XABX,要想子串符合,那么就要加一个X,但中间又至少加两个字符,即XABXCDX,故这样就构不成符合的子串了。先进后出,很明显是栈的操作,可以用stl里的栈,如果是0和1,就进栈,如果是B,栈顶就出栈,最后将栈里的字符元素一个一个出栈,加到一个字符串里。应该是找规律,合理猜测一波,如果全部相等,那么输出0,否则,将它们都变成(最小数+最大数+1)/2。实际上,数据比较小,直接暴力枚举即可,不必在这这找规律,胡乱猜。原创 2023-04-10 22:18:08 · 75 阅读 · 0 评论 -
Atcoder Beginner Contest 042
atcoder ABC原创 2023-04-10 10:32:17 · 102 阅读 · 0 评论 -
atcoder ABC 128
atcoder abc 128原创 2023-03-12 10:35:02 · 579 阅读 · 0 评论