
codeforces
少侠,慢点走
与其在失败后后悔,不如在失败前成功
展开
-
Codeforces Round #449 (Div. 2)
A - Scarborough Fair题意好理解.View Code//A. Scarborough Fair 字符更换#include<cstring>#include<cstdio>#include<algorithm>#include<cmath>#include<iostream>using namespace...原创 2019-05-30 02:14:36 · 159 阅读 · 0 评论 -
B. Kvass and the Fair Nut(二分)
题意是有n桶水,有一个容量为s升的桶,然后输入每桶水的容量,刚开始每桶水都是满的,现在要从n桶水中抽水把s升的桶倒满,问倒满后n桶水所剩的水最少是多少。题解 : 二分答案,枚举是否满足条件。#include <bits/stdc++.h>using namespace std;#define ll long long#define N 1010int n;ll s, v...原创 2019-05-23 21:58:34 · 187 阅读 · 0 评论 -
D. Vasya and Arrays(贪心)
题意给你两个数组长度分别为n,m;有这么一种操作,用某个数组的某个子区间元素之和代替这个子区间,这样使得数组长度减少,两个数组都可以进行问你最后两个数组一摸一样的时候,最大数组长度是多少?如果无法使两个数组一摸一样输出-1分析先判断开始数组总和是否相等,不相等是不可能最后两个数组一摸一样的从头和尾两个位置判断是否相等,相等继续如果不相等统计两个数组区间的长度,在比较大小,进行到最后ps...原创 2019-05-30 21:27:01 · 415 阅读 · 0 评论 -
1091D - New Year and the Permutation Concatenation(打表找规律/数学)思维
Soluton one:解题思路:打表可发现:3——————94——————565——————3956——————3084(因为连起来的排列组合的sum一定是n*(n-1)/2,所以)3——————9=3!+3=3!+1*34——————56=4!+32=4!+4*85——————395=5!+275=5!+5*556——————3084=6!+2364=6!+6*394n...原创 2019-05-23 21:02:34 · 234 阅读 · 0 评论 -
1083A - The Fair Nut and the Best Path(树形DP)
题意:每个节点都有自己的价值,从一个节点走到另一个节点会消耗固定值,但也会得到这个节点的价值,问怎样走才能得到最大的价值。思路:利用树形结构进行dp,初始化每个点的价值为自身价值,对于每个节点都判断更新它的值或者不更新,从底向上进行dfs递归,更新出最优ans,从一个节点到另一个节点的收益为(目标节点价值-路上消耗的价值)#include<bits/stdc++.h>usin...原创 2019-05-23 18:12:30 · 311 阅读 · 0 评论 -
1088C - Ehab and a 2-operation task(构造+思维)
题意:给定一个长度为 n 的数组a[ ],并且有两种操作:①将前 i 个数全都加上 x;②将前 i 个数全都 mod x要求用不超过 n+1 次操作,使得数组 a[ ] 严格单调递增。题解:预备知识补充:假设 a > b,在什么条件下可以使式子 a%(a-b) == b 成立 ?只有当 a > 2*b 时才成立。证明如下:用反证法,假设 a < 2*b,那么 ...原创 2019-05-23 17:33:57 · 248 阅读 · 0 评论 -
894C - Marco and GCD Sequence(构造gcd)
894C - Marco and GCD Sequence(构造gcd)原创 2019-05-30 17:29:51 · 463 阅读 · 0 评论 -
893C - Rumor(并查集)
有个散布谣言的人,要把一个谣言传给所有人,有的人是朋友,只要告诉其中一人,他的朋友就会知道,求最小花费。例如样例一,先告诉1(然后1会告诉4,4再告诉5),这样就只用再告诉2和3就行了,所以最小花费是2+5+3=10。#include<bits/stdc++.h>using namespace std;const int MAXN = 1.5e6+5;const int M...原创 2019-05-30 17:04:47 · 293 阅读 · 0 评论 -
Codeforces 892 B. Wrath (递推)(思维)
题意每个人都有一个长度为 li 的武器,相邻的两个人之间距离为 1 ,同一时间所有人使用武器攻击左边的人,问最后存活下来的人数。显然,最右侧的人一定是可以存活下来的。我们维护一个 cntcnt 代表右侧延伸到当前位置的武器长度,若 cnt>0说明当前位置在别人的攻击范围内,否则 ans+1 。更新 cnt为 max(cnt−1,ai)看对于 ii 来说是否可以攻击到更远的位置。时...原创 2019-05-30 13:33:03 · 298 阅读 · 0 评论 -
D. Maximum Distance(图论)最小生成树从(前向星写法待补)
题意:给一张图,定义一条路径的长度为这条路径上的边权最大的边的边权。定义两点间距离为这两点间路径的最小长度。给出k个特殊节点,求对于每个特殊节点,距离它最远的点到它的距离。思路:可以知道,这个距离一定出现在最小生成树上。所以先跑一遍kruskal,然后取第一个特殊节点dfs求出每个特殊节点到它的距离d[i],所有节点的最远距离都是 max (d[i])。题解:我们可以发现答案一定是...原创 2019-05-30 11:35:29 · 334 阅读 · 0 评论 -
C. Prefixes and Suffixes(思维)字符串模拟
题意给你某个字符串的长度n,再给你2*n-2个前缀或者后缀让你判断那些是前缀那些是后缀关键是1到n-1的都有两个分析只需分析长度为n-1的那两个谁是前缀,谁是后缀#include<bits/stdc++.h>using namespace std;string s[210];bool vis[110];int main(){ int n; //ios...原创 2019-05-23 13:15:19 · 492 阅读 · 0 评论 -
Good Bye 2018 C. New Year and the Sphere Transmission(思维)(数学)
题目出现环,数学问题可先考虑因子输入一个数n,k的范围是1-n,然后看第一个样例的图,就是遍历这个长度为n的环,升序输出k从1到n的所遍历的点的和的所有值。这道题就是找规律,可以发现当k等于1的时候是所有值的和,当k等于2的时候是1,3,5,7…的差值为2的等差数列的和,所以这道题就换成了求差值为1-n的等差数列的和,这里只需要求n的因子就好了,不然会有重复计算。做法就是先将n的所有因子存起...原创 2019-05-23 11:28:31 · 173 阅读 · 0 评论 -
Good Bye 2018 B. New Year and the Treasure Geolocation(思维)stl的使用pair , make_pair
题意是要去找宝藏,给出了n个坐标,又给了n个方向向量,现在要让坐标和向量两两配对,使得配对后的n个点都指向同一个点(xi+ai,yi+bi),输出这个点(有多个满足条件的点,输出一个就好)。我的思路是n*n去把每个点都求出来,然后找出现过n次的坐标,方法不唯一,别人也有求和比较最值的方法。#include <iostream>#include <algorithm>...原创 2019-05-23 11:00:41 · 181 阅读 · 0 评论 -
CodeForces - 1084C The Fair Nut and String(有趣的题目)多解
题目大意:给你一个由小写字母组成的字符串 s ,让你找一种序列:1、对于任意一个 i ,使得 s[ p[ i ] ] == ‘a’2、对于任意一个 i ,存在 p[ i ] < j < p[i + 1],且s[ p[ i ] ] == ‘b’求这种序列有多少个,答案 mod 1e9解法一: 数学 + 思维思路:把字符串换成这样aabaaabaabaa(有多个b就把它缩为一个...原创 2019-05-23 22:30:28 · 275 阅读 · 0 评论 -
Educational Codeforces Round 50 (Rated for Div. 2) B. Diagonal Walking v.2(思维)
题意:给你一个q代表q次询问,然后给出三个数n,m, k。(n,m)代表终点,k代表最多移动的步数。让你求出到达终点的过程中,走对角线的最大步数。思路:当m > k时输出-1(设m是较大的数),当m-n是奇数时有一步不能走对角线所以k–,当走对角线可以直接到达终点,如果剩余的步数是奇数则有两步不能走对角线所以k - 2。(画图观察规律)#include<bits/stdc++.h&...原创 2019-05-30 23:11:12 · 136 阅读 · 0 评论 -
Codeforces Beta Round #69 (Div. 2 Only)
A - Panoramix’s Predictionb是否是大于a的第一个质数#include <iostream>#include <cstdio>using namespace std;bool judge(int x){ bool flag=true; for(int i=2;i*i<=x;i++) if(x%i==0...原创 2019-05-31 00:26:09 · 182 阅读 · 0 评论 -
(E2) Stars Drawing (Hard Edition)(dp,前缀和,覆盖)(搜索也可以)
题目大意,给你一个n×m大小的字符矩阵,仅由‘.’和‘’组成,提问这个图可否划分为一些由‘’组成的十字形状,这些十字之间可以有重叠,如果可以完全覆盖输出每个十字中心坐标与边长度,不可以输出-1。 这是一道很有意思的题,在这场比赛中上一道题是这一道题的简化版本,数据范围仅有100,所以我采用了O(n^3)的做法,即枚举每个 * ,然后向四周扩展,显然,在这道题中1000的数据范围中这种做法会...原创 2019-05-30 00:20:25 · 359 阅读 · 0 评论 -
CodeForces - 1082C Multi-Subject Competition (前缀和 + 思维)
题意:给定n名选手,每名选手都有唯一选择的科目si和对应的能力水平。选择时每个科目对应数量要么一致,要么不选题解:对于某一类的先排序,优先选择大的,sum[i] 表示每类选择i个,符合条件的 和 ,当然当某一类贡献为负时,就不选求sum[i] (0<=i<=m) 最大值即可#include<bits/stdc++.h>using namespace std;typ...原创 2019-05-29 22:52:28 · 270 阅读 · 0 评论 -
C. Colorful Bricks (组合数学/dp)
给你n个方格排成一行,有m种颜色,然后要把这n个方格分成k+1段,每段涂不同的颜色,问有多少种方法。排列组合问题,首先要在n-1个位置里面选出k个位置当作段与段的分割点,然后每段涂的时候有m*(m-1)^k种,二者相乘即使答案。要注意的是计算组合数的时候也要取mod,因为组合数的增加也是很快的。还有要上快速幂计算所以C(n-1,k)m(m-1)^k。注意取模。#include<cs...原创 2019-05-29 20:13:29 · 340 阅读 · 0 评论 -
CF 502 B-The Bits(找规律)
题意:两个二进制数字a,b,然后进行or运算,然后进行交换数字a,如果数字交换以后,得到的结果不相同,求数字交换以后的位置。思路:我们可以知道与运算有四种情况分别为: a=0,a=0,a=1,a=1 b=0,b=1,b=0,b=1 1 0 0 1两种情况:① 对于b二进制如果是1,a 的值对or运算以后的结果没有影响,所以...原创 2019-05-29 15:18:18 · 230 阅读 · 0 评论 -
1016B - Segment Occurrences(前缀和/substr预处理)
给两个字符串s,t,之后给出s的一个区间,问这个子串中存在多少个子串与t相同前缀和#include<bits/stdc++.h>using namespace std;const int MAXN = 1.5e7+5;const int MAXM = 1.5e7+5;int hay[MAXN],shay[MAXM];int main(){ int n , m ...原创 2019-05-29 14:03:17 · 186 阅读 · 0 评论 -
CodeForces - 1079B Personalized Cup 好题
题意:给一串字符串,让你分成x行w列(w<=20),保证x行最小,不够,用*补,输出x w 和字符串。分析:我们首先确定行数,字符长度len,x=len/x(要向上取整),判断取*的个数,(y+len)%x==0,y=x-len%x,w=len/x,然后就是模拟分析了。然后就是分配*号,取模后 * 号的个数必然小于行数,可自行证明#include<cstdio>#in...原创 2019-05-29 13:29:43 · 363 阅读 · 0 评论 -
1034A - Enlarge GCD(div1)数论,线性筛的运用
题意:给出n个数字,求最少删除几个可以使剩下的数字的GCD大于n个数字的GCD。思路:求出最多的公共因子,去掉没有这个因子的数,剩下的数的GCD大于原来的GCD。题解:随便说说吧,要使GCD变大,那么尽可能使数中的互质数变少,那么问题解答变显而易见了,只要找到最多的公共因子,那么其他数没有就去掉,那么便是最大。线性筛的运用#include<bits/stdc++.h>usin...原创 2019-05-29 02:18:12 · 192 阅读 · 0 评论 -
1037A - Packets(二进制)
题意:给出一个数n,问最少多少个数可以组成从1到n的所有数。题解:显而易见,把问题转化成二进制问题就可以极大的解决这个问题,倍增思想,那么显然需要最多的数就是2^n-1, 问题变转换成求大于x且2^n-1需要最多的那个n即可#include<cstdio>#include<cmath>#include<iostream>using namespace ...原创 2019-05-28 18:02:17 · 264 阅读 · 0 评论 -
CodeForces 1088B Ehab and subtraction优先队列
题目大意就是给你一个数组,重复k次操作:找到数组中的最小非零元素,打印它,然后从数组的所有非零元素中减去它。如果所有元素都是0,则只打印0。#include<iostream>#include<queue>#include<cstdio>using namespace std;priority_queue <int,vector<int&g...原创 2019-05-24 11:26:52 · 162 阅读 · 0 评论 -
B - Div Times Mod-函数最值(数学)
B - Div Times Mod题意:给出n,k 求 一个 使等式成立的最小正整数x思路 : 令(x%k) = a 则 原式变为 (x-a)/k * a = n 这里 a∈ (1,k)并且为n的因子解出x来得到 x= nk / a + a 求最小值即可。即 在a的定义域内找一个最靠近 sqrt (nk)就是最小值。#include<bits/stdc++.h>...转载 2019-05-23 23:54:59 · 304 阅读 · 0 评论 -
Codeforces Beta Round #42 (Div. 2)-C. Lucky Tickets(水,思维)
题意:找两张可以组成3的倍数的牌的方法数题解:全部对3取模,然后%3==0的两两配对,min(1,2)配对。#include<bits/stdc++.h>using namespace std;const int MAXN = 1.5e6+5;const int MAXM = 1.5e6+5;typedef long long ll;std::vector<int&...原创 2019-05-31 00:48:43 · 198 阅读 · 0 评论 -
B. Ternary Logic(三进制)
time limit per test 2 secondsmemory limit per test 256 megabytesinput standard inputoutput standard outputLittle Petya very much likes computers. Recently he has received a new “Ternatron IV” as a...原创 2019-05-31 00:35:18 · 538 阅读 · 0 评论 -
Educational Codeforces Round 56 (Rated for Div. 2) D. Beautiful Graph(二分图判定+计数)
题意给一个图,图上的点可以被染成权值为1,2,3令边权=两个点的点权和,求令边权为奇数的所有方案数%998244353题解首先二分图判定一下,分奇偶层;奇层染奇数,偶层染偶数;或奇层染偶数,偶层染奇数。对于每个连通分量,其方案数为(modpow(2,奇层点数,MOD)+modpow(2,偶层点数,MOD))%MOD这个modpow是快速幂。然后整个图的就是所有连通分量的乘积%MO...原创 2019-05-23 10:12:33 · 190 阅读 · 0 评论 -
1068B - LCM(数学)
这道题的意思就是让你求从a到很大一个数的lcm([a,b])/a有多少个不一样的值,然后你的用数论的知识lcm([a,b])/a=b/gcd(a,b);也就是让你求b的因子个数。#include<stdio.h>#include<string.h>#include<queue>#include<math.h>#include<alg...原创 2019-05-23 00:22:15 · 937 阅读 · 0 评论 -
Masha and two friends(容斥+矩阵面积并)(矩形切割)
题意:题目很长,但是其实题意非常简单,首先是给定一个n*m的方格,然后黑白相间,其中左下角是白色。然后有两个人爱涂色,然后A先涂色把他所选中的地方涂成白色,然后B把他选中的地方涂成黑色。然后问最后的情况白色格子有多少,黑色格子有多少?题解:前提工作:设置一个函数,只要知道左下角的位置是黑色还是白色,然后知道这个选中的方格的大小,然后就可以算出里面的黑格和白格算出来。然后进行容斥:定义...原创 2019-05-26 11:55:09 · 357 阅读 · 0 评论 -
1081B - Farewell Party(思维/细节)
题意概括:有 N 个人,每个人都佩戴一顶帽子(帽子种类有 1、2、3 … N );接下来 N 个数表示所有人里面 与 第 i 个人佩戴了不同帽子的总数。解题思路:ai 代表与自己佩戴了不同帽子的个数,那么反过来意思就是说有 N - ai个人佩戴了与自己相同帽子。如果能满足 数量为 ai 的 个数 Si == N - ai, 则说明刚好有 N-ai 个人佩戴相同帽子。如果 Si >...原创 2019-05-25 16:30:16 · 389 阅读 · 0 评论 -
1051A - Vasya And Password(模拟/构造)
题目大意:给出n个字符串,字符串要满足有大写字母,小写字母,数字才能构成密码,要求以最小改动把字符串变为密码字符串vector写法#include<bits/stdc++.h>using namespace std;typedef long long ll;#define pb push_backconst int maxn = 1e6 + 7;int main(){...原创 2019-05-25 15:43:06 · 301 阅读 · 0 评论 -
1065B - Vasya and Isolated Vertices(图论/思维)(公式)
Description求一个N个点M条边的无向图,点度为 0 的点最多和最少的数量。N≤105,M≤N×(N−1)2Solution关于最少的数量,注意到一条边会增加两个点度,所以最多能带来 2M 个点度,最少的零点度点数就是 max(N−2M,0)。关于最多的数量,要知道 N 个点的完全图边数是 N×(N−1)2 。然后就可以二分上界是什么了。可以打表递推,也可以直接利用完全图的性质...原创 2019-05-25 15:04:08 · 355 阅读 · 0 评论 -
A. Oh Those Palindromes(思维结论题)
题意:给一个字符串,让你重新把字符串重新排,使他从左到右把他顺便分成子串,让他可以成回文的子串最多;思路:当然是按升序排最多回文结论题。考虑个连在一起,此时有 个回文子串。再在其中插入一个其它的字符,答案一定会变小。因为此时把原串拆成了两部分。那么sort一遍就好了#include<bits/stdc++.h>using namespace std;typedef ...原创 2019-05-25 00:27:05 · 257 阅读 · 0 评论 -
1085C - Connect Three(思维/贪心)
题目给了三个点的坐标,问三个格子可以互相到达最少需要多少格子。首先先将3个点的坐标排序。然后模拟,从A走到B,从C走到B,把经过的点放到set里边。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 3e6 + 7;//char str[maxn][maxn];...原创 2019-05-25 00:12:35 · 335 阅读 · 0 评论 -
D. Minimum Diameter Tree(思维)树的直径
树的直径题目链接:https://codeforces.com/contest/1087/problem/D题意:给你n个点,n-1条边,构成一颗无向树,树的总权值为s,现在让你构造一颗直径最小的树,一颗树的直径是最大的两点路径权值之和。最后输出直径。题解:因为某些边的权值可以为0,那么我们只要将度数为1的边赋值,其它不赋值,这样的话,这棵树的直径就是两条度数为1的边的权值和(因为这两之间的...原创 2019-05-24 19:05:41 · 347 阅读 · 0 评论 -
CF1066B Heaters(贪心/dp)
因为我们要尽可能少,所以我们要用贪心的思想我们从最左边开始扫,扫到一个没有被加热的点,我们就以这个点为起点向右扫,扫到能加热他的离他最远的一个加热器打开(贪心的正确性在于这个加热器离他最远且能将它加热,如果选更近的则不更优,选更远的就加热不了他了)然后将该加热器能加热的范围内的点打标记,继续扫下去即可最坏时间复杂度O(N^2)C++代码一#include <bits/stdc++...原创 2019-05-24 15:33:57 · 285 阅读 · 0 评论 -
1064B - Equations of Mathematical Magic(数学)
首先:不要直接输出pow()的值,会有bug题目大意就是解一个方程:a−(a⊕x)−x=0 (a已知)解题思路a−(a⊕x)−x=0 <> a−(a^x)−x=0 <> x^a = x-a如果运算符 ‘^’与 ‘-’起到相同的效果的话就是一个解分析四种比较;1^1=0 1-1=01^0=1 1-0=10^0=0 0-0=0,0^1=1 0-1=-1当...原创 2019-05-24 13:40:00 · 230 阅读 · 0 评论 -
D. Mishka and Interesting sum(树状数组 前缀异或和)
【题意】输入一个序列,有m次询问,询问任意区间段的出现次数为偶数的数字的异或之和。【分析】易知,某段区间的内数全部异或起来,得到的出现奇数次的数字异或和,那我们把每个出现过的数字都少(或多)异或一次,就得到了出现偶数次的数字异或和。例如区间[1,R],预处理前缀异或和 s[i]表示前i个数字的符合题意的异或和,所以,当数字是第一次出现时,让他不参与异或,就达到目的了。这样S[i]就是[1,...原创 2019-05-24 12:18:40 · 346 阅读 · 0 评论