![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
思想+思维
文章平均质量分 73
ccDLlyy
不忘初心,方得始终
展开
-
CodeForces 729D Sea Battle(思维题)
题目链接:点击打开链接题意:n个格子,这里面包含a条船,每条船占b个格子,船之间不能重复占用格子,而且不知道船的具体位置。之前射击了k次,每次射中一个格子,但都没有打中船。 给出长度为n的字符串,0表示未知位置,1表示被射击过的格子,问要保证至少射中一条船的话,最少需要再射击几次,并输出这些位置编号(多种位置方案的情况下输出一种即可)?思路:思维题,就是要想出一种最少射击方案,无论船位原创 2017-10-24 14:40:41 · 441 阅读 · 0 评论 -
CodeForces 707B Bakery(思维+贪心)
题目链接:点击打开链接题意:n个城市,其中k个城市开了面粉店,某人想在剩余的n - k个城市中找一个距离面粉店(任意面粉店)最近的城市开面包店,问最短路径为多少?思路:思维题,面包店一定与面粉店直接相连,所以直接处理每条路径即可,每次贪心的选取一条最短路径,判断相连的两个城市是否只有一个开了面粉店。具体实现,我把边的信息存在优先队列了;或者直接存储每条边的信息,线性扫一遍。// Cod原创 2017-11-02 18:32:06 · 453 阅读 · 0 评论 -
CodeForces 729B Spotlights(思维题+前缀和)
题目链接:点击打开链接题意:给出一个矩阵,对于数值为0的位置,统计其上下左右有几个方向存在1。计算矩阵中所有0的对应值之和。思路:遍历每个位置,利用前缀和判断该位置四个方向存不存在1。复杂度O(n^2)。运行/限制:155ms/1000ms#include #include #include using namespace std;int a[1005][1005],sum原创 2017-11-18 18:19:39 · 481 阅读 · 0 评论 -
CodeForces 798D Mike and distribution(二维贪心 + 思维)
题目链接:点击打开链接题意:思路:// CodeForces 798D Mike and distribution 运行/限制:62ms/2000ms#include #include #include #include #include using namespace std;int a[100005], b[100005], id[100005];bool cmp(原创 2017-11-20 22:49:50 · 408 阅读 · 0 评论 -
CodeForces 375B Maximum Submatrix 2(思维)
题目链接:点击打开链接题意:最大子阵和的变形,给出一个01矩阵,行与行之间可以互换位置,问能够得到最大的全1矩阵的面积。思路:预处理出每一行中每个位置能向左延伸最长的连续1的个数,用二维数组sum存储相应信息,sum[j][num]表示当前列能向左延伸最长的连续1的个数为num的位置个数。对于每一列j,枚举num取从j到1时的情况即可。// CodeForces 375B Maximu原创 2017-11-30 21:38:37 · 503 阅读 · 0 评论 -
CodeForces 672D Robin Hood(二分 + 思维)
题目链接:点击打开链接题意:有n个人,每个人都有一定数量的硬币, 每天硬币最多的人会把自己的一个硬币赠给硬币最少的人,问k天之后硬币最多的人和硬币最少的人的硬币数量之差为多少?思路:k最大为10^9,暴力模拟的话,肯定会超时。此题的正解为二分加思维,二分出最多硬币数和最少硬币数,两者相减得到结果。二分之前先确定最多硬币数的下界和最少硬币数的上界,如果总硬币数sum能整除人数n,最多硬币数的原创 2017-12-09 21:00:32 · 485 阅读 · 0 评论 -
CodeForces 876B Divisiblity of Differences(思维 + 数学)
题目:点击打开链接题意:从n个数中找到k个数,满足任意两者的差能够除尽m。思路:设两个数a、b,若(a - b)% m = 0,则a可写成k1*m + c,b可写成k2*m + c,所以根据对m取余的结果把n个数分类即可。// Code Forces 876B Divisiblity of Differences 运行/限制:61ms/1000ms#include #include原创 2017-12-23 19:18:07 · 414 阅读 · 0 评论 -
CodeForces 669D Little Artem and Dance(思维)
题目链接:点击打开链接题意:有n对男女生跳舞,都是从1到n编号,1号男生和1号女生配对、2号男生和2号女生配对......n号男生和n号女生配对。配对的男女生按照编号从小到大顺时针围成一圈。 有两种操作,均是只移动男生: 1.将所有男生都移动x位(x > 0时顺时针移动;x 2.将所有位置两两相邻的男生换位,举个例子,1、2位置的男生交换,3、4位置的男生交换,......,n -原创 2017-11-27 20:00:47 · 428 阅读 · 0 评论 -
CodeForces 873B Balanced Substring(前缀和+思维)
题目链接:点击打开链接题意:给出的字符串由字符'0'和字符'1'组成,当一段区间[l,r]内的'0'和'1'的个数相同,就称为平衡子串,求最长的平衡子串。思路:若利用前缀和记录0和1的个数(个数和,不是对应值的和),再去两层枚举,复杂度为O(n^2),会超时,所以要想出O(n)的算法,还是利用前缀和(值的和),'0'对应的值为-1,'1'对应的值为1,那么当一段前缀的和与另一段子前缀的和相原创 2017-10-31 19:03:22 · 505 阅读 · 0 评论 -
CodeForces 808A Lucky Year(思维)
题目链接:点击打开链接思路:无敌水思维题。// CodeForces 808A Lucky Year 运行/限制:31ms/1000ms#include #include #include #include #include using namespace std;int main(){ int num; while (scanf("%d", &num) != EOF)原创 2017-10-31 14:41:52 · 612 阅读 · 0 评论 -
CodeForces 820D Mister B and PR Shifts(思维题)
题意:给定一个长度为n的排列,每次向右循环移位,求的最小值,并求出是在第几次移位得到的。思路:开始O(N^2)模拟了一下,果然超时。参考了一下网上代码,知道了一个O(N)的思路。用cnt数组记录当前num[i]所在位置 到 下标为num[i]的位置 需要向右循环移位几次,两个变量add、sub表示下一次移位会使sum值+1/-1的个数,每次更新均在上一排列的基础上进行。先注意题意, 1原创 2017-11-07 19:34:48 · 639 阅读 · 0 评论 -
HDU 3613 Best Reward(KMP+思维||manacher算法)
题目链接:点击打开链接题意:26个小写英文字母都有一个价值,给你一个字符串,将该字符串切成左右两半,对于每一半,如果是回文串,就获得该子串的字母价值之和,否则该子串的价值为0。求出将字符串切成两半后能够获得的最大价值。思路一:KMP+思维。思路二:manacher算法(马拉车算法)具体思路明天写......// HDU 3613 Best Reward 运行/限制:93ms/1原创 2017-10-29 19:15:45 · 381 阅读 · 0 评论 -
Wannafly挑战赛1 Treepath(树形DP,思维)
题目链接:点击打开链接思路:除了树形DP,自己没想到其他思路,直接就写的DP......开的数组形式为dp[n][3],对于当前父节点,dp[x][0]、dp[x][1]表示已经遍历过的子树中,从该父节点出发到子树节点的路径长度为奇、偶的路径条数;dp[x][2]表示以该父节点为树根的树,满足条件的情况总数。dp[x][2]可以不开,更节省空间,直接用一个变量存储最后的结果即可。具体状态转原创 2017-10-14 09:40:13 · 1183 阅读 · 0 评论 -
CodeForces 500C New Year Book Reading(贪心+思维)
题目链接:点击打开链接题意:一个人要读n本书,书的重量为wi,要读m天,每天读1本,他每次把位于要看的书上面的书搬开,拿出要看的书,再把上面的书放回去,看完以后把书放到最上面,问根据他的阅读顺序怎样初始化书的排列能使他搬书的总重量最小,求出这个最小重量。思路:对于要顺序阅读的两本书a、b,我们模拟一下可以知道,当把a放上面,搬动的总重量为w[a],当把b放上面,搬动的总重量为w[a]原创 2017-10-31 11:00:16 · 470 阅读 · 0 评论 -
CodeForces 604C Alternative Thinking(思维题)
题目链接:点击打开链接题意:给出01字符串。可以在这个字符串中选择一个起点和一个终点使得这个连续区间内所有的位取反。求经过处理后最多会得到多少次01变换(可以不连续)。思路:思维题。模拟可以发现,增加01变换的方式有大致三种,一是在连续相同的字符串(这种子串记为s)内部找子串取反,这种能够增加01变换的s长度要大于等于3,如10001->10101;二是在s与其相邻非s取相应的部分取反,如原创 2018-01-27 20:39:21 · 363 阅读 · 0 评论