victor的思维专练
收集各种思维的题目
少侠,慢点走
与其在失败后后悔,不如在失败前成功
展开
-
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 · 157 阅读 · 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 · 108 阅读 · 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 · 227 阅读 · 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 · 195 阅读 · 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 · 289 阅读 · 0 评论 -
B. Reach Median(思维)
题意:给n个数字,对每个数字多次可以加1或者减1,求最少操作几次可以使得n个数字中位数是s,题目保证n为奇数。思路:将n个数字从小到大排序,如果当前中位数是s,则输出0如果当前的中位数小于s,则需要将当前位置和之后的位置小于s的数字全部变成s如果当前的中位数大于s,则需要将当前位置和之前的位置大于s的数字全部变成s#include<cstdio>#include<cs...原创 2019-05-27 06:38:47 · 219 阅读 · 0 评论 -
A. Benches(思维)
题意:题目大意:公园里有n个座位,一开始每个座位都有多少人(人数给出),公园里将进来m人,问这些人往座位上坐,那么座位上人数最多的那个能有多少人,最多人数最小化能有多少人?思路:最大的肯定好求,最小的要分两类讨论;我的做法是,把所有的人数都加起来,然后除以凳子数,相当于把人数平均分到每个凳子上,如果%n有剩下的就+1,就是所求;然后就是就会有一种情况,来m之前就有一个座位上比m平分后大,那么...原创 2019-05-27 06:34:12 · 264 阅读 · 0 评论 -
C. Equalize(思维)
题意:两个长度为n只含有0和1的字符串a,b,求最少花费多少可以将a字符串变成b字符串有两种操作:1.将当前位置的字符取反(即0变成1,1变成0),花费12.将位置i和位置j的字符交换,花费为abs(i-j).思路:我们可以发现,位置i不相同,且位置j也不相同(j>i),如果交换后都可以对应位置与b相同,那么这两个位置有两种选择自身取反,花费2,交换位置花费j-i;所以当i,j相...原创 2019-05-27 06:28:41 · 162 阅读 · 0 评论 -
B. Shashlik Cooking(思维)
题意:给你一个n代表有n个初始状态为正面的羊肉串,k代表你每次可以随机选择一个数值i,并把第 i-k 到第 i+k 个羊肉串翻过来。问你最少需要多少次可以把所有羊肉串全部翻过来。解题报告:经过观察发现,当k==0时,那就需要翻n次了,当n<=(2k)+1时,肯定翻中间那个翻一次就可以啦。其他的就是观察n%(2k+1)与k的关系来确定从哪里开始翻。大于k就表示开始总中间就可以,因为到最后必然...原创 2019-05-27 06:21:38 · 338 阅读 · 0 评论 -
codeforces #519B. Lost Array(数学思维)
【描述】Bajtek有一个数组x[0],x[1],…,x[k-1]但被搞丢了,但他知道另一个n+1长的数组a,有a[0]=0,对i=1,2,…,n。由此可以找到数组x[0],x[1],…,x[k-1]的一些可能情况,即满足这个关系的数组x[0],x[1],…,x[k-1]。问一共有多少种可能的数组x[0],x[1],…,x[k-1]的长度k,输出可能的数量以及所有可能的长度k。数据范围:1&l...原创 2019-05-27 06:06:13 · 214 阅读 · 0 评论 -
1082B - Vova and Trophies(思维好题)
给你一个包含GS的字符串,只允许交换一次任意不同位置的字符,问最长的连续G串是多少分析很显然贪心找相邻的中间间隔一个S的两个连续G串#include<bits/stdc++.h>using namespace std;int main(){ int n; string s; //freopen("in.txt","r",stdin); while(ci...原创 2019-05-27 05:56:36 · 206 阅读 · 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 · 358 阅读 · 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 · 263 阅读 · 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 · 277 阅读 · 0 评论 -
A. Oh Those Palindromes(思维结论题)
题意:给一个字符串,让你重新把字符串重新排,使他从左到右把他顺便分成子串,让他可以成回文的子串最多;思路:当然是按升序排最多回文结论题。考虑个连在一起,此时有 个回文子串。再在其中插入一个其它的字符,答案一定会变小。因为此时把原串拆成了两部分。那么sort一遍就好了#include<bits/stdc++.h>using namespace std;typedef ...原创 2019-05-25 00:27:05 · 220 阅读 · 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 · 299 阅读 · 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 · 299 阅读 · 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 · 161 阅读 · 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 · 137 阅读 · 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 · 162 阅读 · 0 评论 -
Codeforces Round 56-C. Mishka and the Last Exam(思维+贪心)
题解:题目大意是说b[i]=a[i]+a[n-i]的值,并且要保证是递增的,我们可以想,让左边的尽可能小,并且比右边的小,我们就可以去他左边的和右边较小的最大值即可,需要注意的是数据范围是 long long int型的代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;int main(){...原创 2019-05-23 00:15:08 · 96 阅读 · 0 评论 -
Codeforces Round #529 (Div. 3) D. Circular Dance(思维)
/*题意: 有 n 个孩子编号为 1~n ,绕着圣诞树 dance; 编号为 i 的孩子可以记住ai1,ai2两个小孩,ai1,ai2是 i 在顺时针方向的相邻的两个小孩,但ai1,ai2不一定是按顺时针方向排列的; 给出每个孩子相邻两个孩子的信息,让你还原这个序列。题解: 可以以任一孩子作为第一个孩子,假设以编号 1 为第一个,编号1有两个相邻的孩子信息 a,b...原创 2019-05-22 22:53:35 · 153 阅读 · 0 评论 -
C The Party and Sweets(思维 + 贪心)
题目链接题意:n个男孩,m个女孩,第i个男孩送出的最小糖果为b[i],送给m个女孩,第i个女孩收到的最小的糖果为g[i],且b[i],g[i],全部要取到,问送出的最少糖果题解:明显可以贪心做。先对b[i] 和g[i]进行排序,首先n个男孩肯定要送出b[i],可以求出此时最小的一个值∑b[i] * m 。同时所有的g[i]要取到,那么便遍历一遍g[i]-b[n-1],解释:首先要取最小,先满...原创 2019-05-14 16:29:00 · 500 阅读 · 0 评论