codeforces日记
文章平均质量分 59
我的故事用酒换
这个作者很懒,什么都没留下…
展开
-
F. Zero Remainder Sum(四维dp)
题意:给一个矩阵n*m,矩阵每一行选择不超过m/2个数,使得选择的所有数相加可以整除k,求出选择的数和的最大值。题解:dp[i][j][l][r]表示:第i行第j列取了l个数模为r对于第i行的第j个数有两种选择:1.不选择该数:dp[i][j][l][r]=max(dp[i][j][l][r],dp[i][j-1][l][r])2.选择该数:dp[i][j][l][(r+a[i][j])%k]=max(dp[i][j][l][(r+a[i][j])%k],dp[i][j-1][l-1][r.原创 2021-11-08 20:00:29 · 152 阅读 · 0 评论 -
Codeforces Round #744 (Div. 3)
2021.9.29E2题意:往一个双端队列deque头或者尾按顺序插入一段序列,要求输出插入后的序列逆序数对最少,输出最少的逆序数对数量。题解:这题很容易就可以想到树状数组+离散化,但是不知道要怎么插入可以达到最后逆序数对最少。这题需想到局部最优便是全局最优,a[i]插到前面还是后面只需判断前面插入的所有数比它大的多还是小的多,大的多插到前面逆序数对便是较少,反之插到后面,而且前一次的插入前后不会影响后一次插入判断(因为如果这次插到前面,那前一次插到前面还是后面都是在此次插入数的后面),所以只需原创 2021-09-29 15:44:48 · 79 阅读 · 0 评论 -
Codeforces Round #680 (Div. 2, based on Moscow Team Olympiad)
A题意:给两个长度为n的序列a,b,可以对b进行重新排列,判断是否满足a,b所有对应位置和小于x。题解:将a从小到大排序,b从大到小排序,判断是否有位置和大于x,这样可以保证最大的和取最小。#include <bits/stdc++.h>using namespace std;const int N=1e5+5;int n,k,a[N],b[N];bool cmp(int a,int b){ return a>b;}void solve(){ cin>原创 2021-09-23 22:55:35 · 97 阅读 · 0 评论 -
Codeforces Round #726 (Div. 2)
2021.6.18A题意:输入长度为n的序列,每次操作可以往序列里面加非负整数,问需要执行多少次操作使得操作完的序列和等于序列长度。题解:当初始序列和<序列长度时只需操作一次,加一个整数使得条件成立,若为和>=序列长度,说明和太大了,每次只需往序列插0就可以了,易得这样的得出的答案就是序列和-序列长度,即为插入0的个数。#include <iostream>#include <algorithm>#define ll long longusing原创 2021-07-29 01:08:36 · 146 阅读 · 0 评论 -
Codeforces Round #731 (Div. 3)(E~G)
2021.7.10E题意:长度为n的房间,有m个空调,第i个空调在ai位置,温度为ti,第i个房间的温度为min1≤j≤k(tj+|aj−i|)求所有房间的温度。题解:因为aj∈[1,n],所以必有一个位置aj-i=0,这样就可以温度t的最小值,每次在最小值向左或者向右温度的值都是+1,所以直接向左找记录的最小值,再从右遍历找最小值,最后输出的答案就是两个方向记录的最小值即为该房间的温度最小值。#include <iostream>#include <algori.原创 2021-07-14 13:16:34 · 86 阅读 · 0 评论 -
Codeforces Round #725 (Div. 3)
E题意:两个操作1.直接赋值 a :=b2.相加后赋值 a = b+c其中每个属性都为字符串,输出最后一条语句写入的字符串原创 2021-06-13 12:54:42 · 113 阅读 · 0 评论 -
Codeforces Round #724 (Div. 2)
2021.6.6E题意:输入n*m的网格,其中只包含'0'或'#',为字符'0'代表这个单元格必须为0,为''原创 2021-06-08 00:31:49 · 230 阅读 · 2 评论 -
Codeforces Round #723 (Div. 2)
2021.5.28A题意:输入一个2*n的序列a,要求对a进行重新组合形成序列b,使得每个元素bu'deng'yu题解:原创 2021-05-31 20:30:53 · 89 阅读 · 0 评论 -
Deltix Round, Spring 2021 (Div. 1 + Div. 2)
A题意:输入一个长度为n的01字符串,每次操作可以将字符串中有且只有一个邻居为1的0变为1,问m次操作变化后的字符串。题解:每次操作遍历字符串,如果只有一个l原创 2021-05-31 20:32:55 · 162 阅读 · 0 评论 -
Codeforces Round #722 (Div. 2)
2021.5.24B题意:给一个长度为n的序列,计算该序列的最长“奇怪”子序列长度为多少?其中奇怪序列的定义为序列里的任何一对数的差值大于等于序列的最大值。题解:计算一下序列里负数个数ans0,0的个数ans1,正数的个数ans2,当ans1>=2,那么答案为ans0+ans1,否则可以判断是否拿正数,易知正数最多拿1个,如果正数的最小值大于负数和0之间差值的最大值,那么就可以取那个最小的正数,否则不能取正数,还需判断一下ans0=0|ans1=0|ans2=0的情况即可得出答案。#原创 2021-05-27 14:23:57 · 49 阅读 · 0 评论 -
Codeforces Round #721 (Div. 2)
2021.5.20A题意:给一个整数n,求出最大的k,其中n&(n-1)&...&k=0题解:只需要让n每次递减的数每个二进制位都有存在0,可想k就是n的最高位为1其他位都为0的数m-1,这样可以保证每位二进制位都有0#include <iostream>#include <algorithm>#define ll long longusing namespace std;int main(){ ios_base::sync原创 2021-05-23 19:20:51 · 88 阅读 · 0 评论 -
Codeforces Round #719 (Div. 3)
2021.5.6B题意:输入一个数n,判断1-n有几个数每位数分解出来(个位,十位)都相等。题意:十进制有1-9,每次加上一样的位数值(1->11->111->1111),要求小于等于n就可以。#include <iostream>#include <algorithm>#define ll long longusing namespace std;int main(){ std::ios::sync_with_stdio(fal原创 2021-05-06 23:27:34 · 99 阅读 · 0 评论 -
Codeforces Global Round 14
2021.5.2A题意:输入n个不同的数,要求输出前i个数和不等于x。题解:要是所有数的和为x,那就不管怎么搭配都不满足条件,否则因为每个数都是不同的,所有只要碰到和等于x就只需先输出下一个数,再输出这个数,这样和就不会等于x,因为前面判断所有数的和不等于x,所以碰到和等于x就一定不会是最后一个数,后面还有数。#include <iostream>#include <algorithm>#define ll long longusing namespace s原创 2021-05-03 19:46:57 · 104 阅读 · 0 评论 -
Educational Codeforces Round 108 (Rated for Div. 2)
2021.4.29A题意:有r个红豆角,b个蓝豆角,将这些豆角分组,要求每组两种豆角至少各有一个,并且每组豆角数量相差不超过d,判断分组是否可以成立。题解:先取出k1=max(r,b)和k2=min(r,b),这样最多可以分成k2组,每组放一个,这样比它大的豆角最多可以取(d+1)*k2个,只需判断k1是否小于等于最大值就可以了。#include <iostream>#include <algorithm>#define ll long longusing n原创 2021-05-01 14:30:02 · 78 阅读 · 0 评论 -
Contest 2050 and Codeforces Round #718 (Div. 1 + Div. 2)
2021.4.23A题意:给一个数n,判断n能否被2050*10^k中取的数相加得到。题解:每个相加的数都是2050的倍数,所以直接判断n能否被2050整除得到,可以的话直接加上商的位数和。#include <cstdio>#include <iostream>#include <algorithm>#define ll long longusing namespace std;int main(){ ll t,n; sca原创 2021-04-24 15:39:44 · 132 阅读 · 0 评论 -
Codeforces Round #717 (Div. 2)
2021.4.21A题意:给两个数n和k,然后输入含有n个数的序列,每次对序列进行操作:取两个数,其中一个加1,另一个减1,并且保证序列中的每个数都是非负数。对该序列最多进行k次操作,使得该序列形成一个最小的字典序。(题目看成取的两个数需要大小不同,一直wa,结果这场就炸了,????)题解:每次操作对第一个非0的数-1,最后一个数+1,进行k次操作,如果序列除了最后一个数其他都是0,那就可以直接退出操作,已经达到最大的字典序了。#include <iostream>#incl原创 2021-04-22 20:44:52 · 225 阅读 · 0 评论 -
Codeforces Round #716 (Div. 2)
2021.4.19A题意:给你n个数的序列,问你是否存在子序列的乘积不是一个平方数题解:判断n个数的序列是否都是完全平方数#include <cstdio>#include <iostream>#include <algorithm>#include <cmath>using namespace std;int main(){ int n,x,t; cin>>t; while(t--){原创 2021-04-20 20:13:11 · 60 阅读 · 0 评论