![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Codeforces
Eddie.!
这个作者很懒,什么都没留下…
展开
-
C. Hack it(dp)
参考地址题意f[x] = 十进制下每一位的和。找l r 让 f[l] + … + f[[r] = x , x是题给的数字。数据范围特别大性质①②具体看代码代码#include <bits/stdc++.h>using namespace std;typedef unsigned long long LL;const int N = 35;LL m[N], f[N][N], sum[N], a;// 要开unsigned longlong 否则int main原创 2021-11-09 11:05:11 · 465 阅读 · 0 评论 -
E. Bored Bakry
E. Bored Bakry题意:给n个数字,求最长连续的子序列,要求子序列中每个数字的相与和大于 异或和。分析:① 长度必须为偶数,才有可能与和 大于 异或和。证明①: 与为1 那么必须全为1, 当有奇数个的时候,全为一的异或也是1, 所以奇数最好的情况是相等。② 如果对序列求前缀异或,当有两个异或值相同的时候,表面这两个数之间数的异或为0(包含最后一个数字)。证明②: 异或是自己的逆运算。③ 当最高位大于的时候, 后面的值都是无所谓的。证明③: 1000 > 0999所以:原创 2021-10-16 15:07:04 · 119 阅读 · 0 评论 -
C. Helga Hufflepuff‘s Cup
题意给一棵树, 并且给m个颜色, 让你染色, 有一种特殊颜色k,特殊颜色最短染x个点, 问有多少种染色情况。 结果取模。分析f[ i ] [ j ] [ k] k 可以取0, 1, 2, 取0表示 当前以i为根的树用了j个特殊颜色,并且当前是特殊颜色的情况。 1表示 当前染色小于k,的所有情况, 2表示当前染色大于k的所有情况。需要新开一个数组,否则当前的情况会对后面的情况产生影响。代码#include<bits/stdc++.h>using namespace std;ty原创 2021-10-13 10:22:35 · 129 阅读 · 0 评论 -
GameGame
题意:有很多数字,你和对手一次拿一个,将拿到的数字与你已经有的数异或,得到新的数字,问 最后你赢还是对手赢,还是平局。题解思考:博弈论, 异或性质 1 ^ 1 = 0; 1 ^ 0 = 1;异或是自己的逆运算,所以当异或两个1 时等于没有异或。问最后的谁的值大。 那么我们可以从最高位的1的个数来入手。① 当最高位1的个数是偶数个,那么这一位是平均, 两人一定会各拿一半的1。② 如果最高位1的个数是奇数我们来分情况看:有零个1, 平局, 同①。比如有 一个1, 剩余有好多零, 那么先手胜原创 2021-03-06 17:24:37 · 232 阅读 · 0 评论 -
C. String Transformation 1
题意思:有字符串AA,BB,每次在AA中选取若干个相同的字母(设为xx),改成另一个字母(设为yy),需要满足x<yx<y,问将A改成B的最少操作。题解:例如第一个样例, 此时A要到B, A也要到C,B要到C。那么我们可以将A都到达B,然后搭乘B到C的车,顺便完成A到C。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e6+6;ll t, n;s原创 2021-03-06 16:19:53 · 208 阅读 · 0 评论 -
D2. Painting the Array II
题意: 尽可能让最终输出得小。思路: t1 与 t2 分别是两个数组得最后一个元素,当a[i] 与 t1 或者t2 相等时,那么一定不会使结果加一, 否则一定使结果加一。当结果必加一时分情况, 当前a[i] 如果在之前出现过, 那么当前这个值,是否可以加到之前出现得a[i] 之后呢1 如果可以: 代表之前出现的a[i] 与现在出现得数之前出现的数,一定是放到t1 或者t2 都是无关紧要得,那样就可以随便放, 让当前数与a[i] 相邻, 那么可以知道,当前t1 使a[i] , t2是a[i-1]原创 2021-02-08 14:28:11 · 413 阅读 · 0 评论 -
D. Cleaning
题意:给一个序列,你有一个操作且只能操作一次,就是交换两个相邻的数字,然后如果序列中可以实现无限次的相邻的数字减一,如果可以最终序列全为0则输出yes 否则no思路 : 由于如果有空的情况就是a1,0,a2。。这种的,a1与a2不相邻,所以一定是no 那么我们只有两种删除的方向,一个从开始到最后,一个从最后到开始。进一步思考 那么如果有后一个数字大于前一个数字,我们从前往后就会出现后一个为0,前一个还不为0的情况,所以一定不可能。同理从后往前删除是一样的情况a1 = suma2-a1 = s原创 2021-01-20 15:38:49 · 416 阅读 · 2 评论 -
C. Ivan the Fool and the Probability Theory
C. Ivan the Fool and the Probability Theory题意: 给n行m列,让构造黑白块,要求每个块周围最多一个和自己颜色相同的块,问最多有多少种构造方法?思考 : 首先如果第一行是这样的话,那么下面的每一行一定都确定了因为有两个相同的颜色出现,但是如果是这样黑白相间的情况的话, 那么第一行确定的话,第二行就会有两种情况,第一种是和第一行一样,第二种是和第一行完全相反。黑白相间的情况有两种,黑白黑白黑 和白黑白黑白 这两种当两种情况任意一种出现的时候,他的种类数就原创 2020-12-30 13:20:49 · 167 阅读 · 0 评论 -
D. Ceil Divisions
D. Ceil Divisions题意: a[i] = i 一共有n个数字, 操作最多操作n+5次,让数组a 变成一个2 和剩下全部是1题解:首先我们如果要最后单独处理n的话一定会大于n+5次的,因为只剩下一个2 与一个n, 所以我们要在处理中间的数字的时候顺便处理n, 那么我们处理几的时候,处理n用的步数最少呢, 自然是根号n+1 。具体为什么要加1 因为可以省去一些判断。。。。然后我们从后遍历,遇到根号n+1, 则用根号n+1 处理了n,然后将根号n+1 变为现在的n 找 根号下根号n+1 ,原创 2020-12-29 13:32:49 · 503 阅读 · 0 评论 -
2020-12-26
A - 铅氘蹄 CodeForces - 1389A题意:给l和r 求ab 并且a和b的最小公倍数也在l 到r 的区间中#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e6+6;ll n, m, t, l, r;ll a[maxn], b[maxn]; int main(){ cin >> t; while(t --) { cin &g原创 2020-12-26 11:30:45 · 136 阅读 · 0 评论 -
B. Dreamoon Likes Permutations
题意 :给一个长为n 的序列,然后要求分为两个长度大于1的序列,然后两个序列必须每个元素出现过一次,并且最大值等于序列的长度思路我自己用的特判,样例2wa到自闭,然后看大佬的, 大佬用set来存重复的数字, 当没有重复的数字的时候,判断两个set的大小和两个set 的最大值是否相等,若相等,代表成立则保存,具体看代码#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e转载 2020-12-25 16:33:54 · 131 阅读 · 0 评论 -
2020-12-24
C. p-binary题意: 给n 和p 构造多个 (2^x + p) 这样的数的和等于n 问最小多少个这样的二进制数题解:所以我们将 枚举t 即可但是枚举的时候有个坑,有可能当前的二进制值可能用多个具体看代码#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e6+6;ll n, p;int main(){ cin >> n >>原创 2020-12-24 14:13:35 · 97 阅读 · 0 评论 -
C. Peaceful Rooks
题目链接 https://codeforces.com/contest/1465/problem/C题意:给定n*n的棋盘, 然后有m个車, 每一次操作只能左右 或者上下走直线,然后如果有两个車在同一行,或者同一列,那么就失败了。问我们成功将所有車放到对角线的最小的步数理解由于初始情况不会出现同一行或者同一列,那么我们可以知道,一行最多有1个車, 那么 理想的情况下,每个车只用一步就可以到达对角线,但是不理想的情况是什么呢?这种情况的话就不可以一步到达, 那么最多就再加一步, 就可以将所有.原创 2020-12-21 16:30:46 · 751 阅读 · 0 评论 -
C. Buns
题意:题意:面包师Lavrenty打算用馅料做几个面包,然后把它们卖掉。Lavrenty有n克面团和m种不同的馅料。馅料种类的下标从1到m,他知道他的第i种馅料剩下ai 克,做一个第i种馅料的面包,恰恰需要bi克的i种馅料和ci克的面团,同时这种面包可以卖di块钱。他也可以做没有馅的面包。每个这样的面包需要c0克面团,可以卖d0块Tugrik。所以Lavrenty可以做任何数量的包子,用不同的馅料或者不用馅料,除非用完了面团和馅料。Lavrenty会扔掉烘培面包后剩下的所有多余材料。求出Lavrenty转载 2020-12-10 11:08:49 · 205 阅读 · 0 评论 -
Codeforces Round #672 (Div. 2) C
动态规划解, 具体步骤看文章代码注释#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e6+6;int t, n, q;ll a[maxn];int sum[maxn];ll dp[maxn][2];int main(){ scanf("%d",&t); while(t --) { scanf("%d%d",&n,&q);原创 2020-10-29 11:18:34 · 146 阅读 · 0 评论 -
Educational Codeforces Round 96 (Rated for Div. 2) - D
思路:遍历一次, 从前到后记录,由于目标是删除一个,然后删除前导0或者前导1, 所以如果我们遇到前导是两个或者两个以上, 我门直接删除即可,否则的话,就去遍历后面的寻找个数大于一个的数字,然后删除其中一个,如果找不到, 则直接删除即可,具体看代码注解:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e6+6;int t;char s[maxn];//输入的字符串in原创 2020-10-17 20:41:10 · 107 阅读 · 0 评论 -
codeforces 1426D(思维)
题意:学长是个1,所以他非常不喜欢0,他的目标是消灭数组中所有的0, 有一个数组a,其中不存在a_i=0,但是丧心病狂的TA觉得这还不能够满足 即使是这个数组的任意子段的和为0也是不能接受的。 他可以往数组中的任意位置插入任意大小的数,请问最少插入几个数后才能成为的理想数组(即不存在子段和为0的情况)解:用set存,由于set有count函数,可以直接统计某个数字出现的次数我们先将0 存入,再将每个数字前缀和存入,如果前缀和出现两次,代表我们必须插入一个大数字,或者0出现了一次,我们得插入一个大数字原创 2020-10-03 15:40:49 · 207 阅读 · 0 评论 -
Codeforces Round #632 (Div. 2)
Codeforces Round #632 (Div. 2)-AA - Little Artem题意:有白色块W,与黑色块B, 当白色块四个方向有黑色块时,才算白色块+1, 同理黑色块相加一也是要四周有白色块。现在给n行m列, 要求白色块数量多余黑色块。分析:刚开始看不懂题 后来知道什么意思,结果陷到了一个破想法里面,我想在最后一行在改变白色黑色块,根据上一行。还要分奇数偶数。太...原创 2020-04-09 15:49:59 · 164 阅读 · 1 评论