
思维
Conchpeng
贵在坚持。如有错误欢迎指正。
展开
-
Codeforces Round #426 (Div. 2) The Useless Toy
题意:东南西北四个方向,每次转到上一个或者下一个位置。现在告诉你 转的次数 和 起点 终点 问你是经过顺时针得到的还是逆时针得到的。 思路:hash一下,然后算出起点顺时针和逆时针转n次的终点,判断一下关系就OVER了#include<bits/stdc++.h>using namespace std;int judge(char ch) // hash{ if(ch=='^'原创 2017-07-31 11:25:39 · 280 阅读 · 0 评论 -
Codeforces Round #426 (Div. 2) B - The Festive Evening
题意:告诉你一个字符串,每一个字母都要有一个人守卫,如果字母没有了,那么守卫可以去保护下一个字母,问,当前守卫数量能不能保证,所有的字母都被保护。思路:记录下到每一个字母所需要的最大守卫数量。 如果当前字母出现过了,并且cnt不为0,那么cnt–。 如果当前字母没出现过,那么ans++; 如果出现过的字母, cnt==0了,ans–;#include<bits/stdc++.h>using nam原创 2017-07-31 11:31:08 · 268 阅读 · 0 评论 -
Codeforces Round #426 (Div. 2) C - The Meaningless Game
题意: 两个人初始积分都为1,接下来n轮(n不确定),每一轮有一个人*k^2 一个人*k,现在告诉你两个人积分的最后结果,问是不是存在这个情况。思路: 假如成立a*b一定是某个数字的三次方,并且a*a%b==b*b%a==0必须成立。暴力枚举要牢记这题是多组测试,所以复杂度是T*1e6 . 这就比较蛋疼。 所以还是开根号,开根号的时候要注意浮点数开根号会不准,所以要四舍五入#include<bits原创 2017-07-31 14:09:28 · 290 阅读 · 0 评论 -
The 3n + 1 problem HDU-1023【值得学习】
题意:x%2==1 x=x*3+1 , x%2==0 x=x/2; 对于确定的x,有确定的循环次数,问共几次。 例如2 . 2 1 cnt=2。思路: 暴力,因为1e6也才循环了153次,所以复杂度必定不高。注意细节: 对于这种有关l,r输入的题,下意识的就要去判断l,r的关系,这和最短路中用邻接矩阵去保存数据的时候,也要这样做。以免万一,有时候就会出这种地方的bug,所以还是原创 2017-08-08 10:35:15 · 233 阅读 · 0 评论 -
Codeforces Round #427 (Div. 2) B - The number on the board
题意:告诉你一个最长 长度为100000 的数字, 一个K,要求你改变(改变每一位数字的大小),使得 ∑每一位 的值可以>=k。 思路: 暴力。。 似乎我的太暴力了,直接优先队列维护。差点就超时了… #include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e6;char s[maxn原创 2017-08-01 14:19:34 · 252 阅读 · 0 评论 -
Codeforces Round #427 (Div. 2) A - Key races
题意: 2 个人比赛,第一个人从t1+1开始,第二个人从t2+1开始,共n次操作,每一次操作分别需要v1,v2秒,结束后两个人还要分别加上t1,t2思路: 第一个人: 2*t1+n*v1 第二个人 2*t2+n*v2 #include<bits/stdc++.h>using namespace std;typedef long long ll;int main(void){ i原创 2017-08-01 14:21:49 · 237 阅读 · 0 评论 -
487-3279 POJ-1022【前导0~思维漏洞】
题意:已知每个大写字母对应的数字,现在输入n个字符串,问所有字符串(只有大写字母,-,和数字)标准化后出现次数>=2的字符串。思路:map映射。最好不要用string类,输入数据太多咯1e6。错误分析: 1.string 读取问题,时间太久TLE; 2.没有考虑前导0的情况,太坑爹了。#include <stdio.h>#include <iostream>#include <algorit原创 2017-08-08 17:32:57 · 293 阅读 · 0 评论 -
Watching a movie CodeForces - 499A
题意 : 一部电影,起始时间是1, 现在想看n个区间内的内容,有两种操作,第一种快进t 秒, 第二种,1s 1s看。思路: 快进到不能快进为止。 贪心思想,注意下看完某个区间后的时间t=r+1#include <bits/stdc++.h>using namespace std;typedef long long ll;struct node{ int l,r;} movie[60原创 2017-08-02 18:35:54 · 425 阅读 · 0 评论 -
B - Lecture CodeForces - 499B
题意: 已知m对意义相同的字符串,输入一些字符串, 输出该字符串同义词和本身 长度最短的那个。思路: map映射。数据、复杂度分析:( 1 ≤ n ≤ 3000 1 ≤ m ≤ 3000 ) O(nlogn) ,n次查询,每次查询log级别#include <bits/stdc++.h>using namespace std;typedef long long ll;m原创 2017-08-02 18:39:25 · 379 阅读 · 0 评论 -
C - Crazy Town CodeForces - 499C
题意:笛卡尔坐标系上有n条直线,已知a,b的坐标,问从a,b需要经过几块(块之间经过的前提是相邻的)。保证点不在交点,交线上。思路: 判断a,b之间有几条直线,就要走几步。需要注意的有判断的时候不能两个数据乘一下,否则会爆ll(1e24) 。数据、复杂度分析: ALL [-1e6,1e6] 。 每个点对应的函数值最大可以是1e12+1e6(不能乘的原因)#include <bits/stdc++.原创 2017-08-02 18:43:15 · 380 阅读 · 0 评论 -
Vika and Squares 【思维+技巧+debug???】
题意:已知n个数字,可以以某个数字为起点,按从左到右(到最右边后轮回到最左)各自-1(但要保证大于0)。问最多能减多少个1思路:找出最小的min,ans=min*n。 再确定最长的不含0的序列长度Len那么有 ans+=Len; 技巧在开2倍数组去保存。错误分析:不明所以数据分析:n<=2e5复杂度分析:不明所以为何2份代码感觉都是4e10的复杂度。为什么一个TLE一个AC。#include <bi原创 2017-08-09 18:16:04 · 368 阅读 · 0 评论 -
796B - Find The Bone 【题意没看清浪费时间】
题意:有n个杯子分布在x正方向上,第i个杯子的坐标为(i,0)。 已知有m个点,当杯子中的骨头正好在这些点的时候就结束。共执行 k次 操作,每次操作讲i,j两个杯子内的内容互换~~~~问最后骨头会在哪个坐标下落(起初在杯子1中,即(1,0))。思路:模拟啊模拟复杂度分析:O(n) 级别错误思路: 一直以为是从第一个杯子开始移动,然后再移动。还是题意没读懂,然后一直wa,一直找不出错点。实在没办法去c原创 2017-08-10 10:42:55 · 390 阅读 · 0 评论 -
Codeforces Round #303 (Div. 2) B - Equidistant String【strlen放在for的危害】-惨痛教训
题意:已知2个字符串s,t。要求输出一个字符串p,其距离和s,t均相等。距离定义: 若s[1]=1,p[1]=0 距离+=abs(1-0)。思路:确定s,t中,不同字符的个数,如果是偶数才可以进行,再对半分错误点: strlen不要放在for循环里啊。 死循环tmd!#include <bits/stdc++.h>using namespace std;typedef long long ll;原创 2017-08-09 11:20:54 · 257 阅读 · 0 评论 -
B - Valera and Contest CodeForces - 369B
题意:一个序列,已知 每个值的范围是[l,r],前k个最大的和是sk,所有的和是s(all) , 要求输出一组满足要求的数据思路:对于前k个和sk,均摊,然后多出来的部分给前面,同理,对后n-k个均摊,多出来的部分也给 后面 的 前面。数据分析:1 ≤ n, k, l, r ≤ 1000; l ≤ r; k ≤ n; 1 ≤ sk ≤ sall ≤ 106复杂度分析: 很低吧#include <b原创 2017-08-03 11:30:15 · 259 阅读 · 0 评论 -
Ohana Cleans Up cf-554B【思维】
题意:已知n*n的矩形由1,0构成,每一次操作可以使得某一列的值全部反转(0变成1,1变成0)。问,最多能够使多少 行 全都是1.思路:就是找一模一样的字符串有几个,因为一模一样的字符串操作后,肯定可以达到预想的 每行 都是1的情况;数据分析:1 ≤ n ≤ 100复杂度分析: O(n^2)#include <bits/stdc++.h>using namespace std;typedef l原创 2017-08-10 13:55:36 · 306 阅读 · 0 评论 -
Codeforces Round #410 (Div. 2)-B. Mike and strings【STL+略贪心】
题意:已知n个字符串,问经过多少次操作可以使得所有字符串相等。 每次操作: 对于当前字符串,把s[0]放到s的最后一个思路:首先明确一点,次数最少,我们必须得以某一个字符串s为原型,其他去尽可能靠近s(合理)。以每一个字符串s为基础,对于其他字符串,因为头会到尾部,那么我们把字符串t*2(首尾相连)。 用string find函数在字符串*2中去寻找s,如果没找到那么会返回string::np原创 2017-08-10 14:39:45 · 265 阅读 · 0 评论 -
Codeforces Round #411 D. Minimum number of steps【逆向思维+模拟】
题意:对于字符串s,其由’a’和’b’组成,对于”ab”的子串,我们可以把”ab”变成”bba” , 问最少的次数使得该操作不能继续。思路:先模拟一下,对于abbab的操作,如果我先处理前面的ab,那么要执行5次,先处理后面的ab要处理4次,那么我们应该要事先处理后面的ab,再去处理前面的ab。 对于当前的a,所要执行的次数就是后面的b的数量。执行完该次后,b的数量*2。数据分析: len∈[1,1原创 2017-08-10 15:00:01 · 313 阅读 · 0 评论 -
C - Valera and Elections CodeForces - 369C【DFS+思维】
题意:一棵树有n个节点,n-1条边,现在有些边是坏了,当你修理某个点的时候,从这个点出发到1节点的所有边都会修好,问至少需要修理几次。思路:DFS#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn=1e5+50;struct aa{ int node,v;};vector原创 2017-08-03 20:01:03 · 305 阅读 · 0 评论 -
Codeforces 534B Covered Path【有点奇怪的思维+贪心】
题意:已知一辆车在t1时刻的速度v1,在t2时刻的速度v2,t2-t1==t。每秒车速改变范围在[-d,d]内。问,在t时间内,车子最多经过了多少的距离s?思路:一开始我就想,这tm明显是道物理的v-t图像求面积最值的题,然后分类讨论v1,v2的大小关系去决定面积计算方式。结果发现v最大值好像没法确定。 毫无思路,看了题解,感觉有点奇怪。 题解的意思是:我去求每一秒的最大值,然后累加就是最大的路原创 2017-08-11 09:34:31 · 403 阅读 · 0 评论 -
Codeforces Round #382 (Div. 2) B. Urbanization【数据注意+贪心证明】
题意:已知n个数,分别取n1,n2个数字,使得sum1/n1+sum2/n2的值最大。 思路:贪心,如果n1小,那么n1先取最大的,否则n2先取。证明过程如下数据分析:1 ≤ n, n1, n2 ≤ 100 000, n1 + n2 ≤ n,1 ≤ ai ≤ 100 000复杂度分析:O(n)代码:#include <bits/stdc++.h>using namespace std;type原创 2017-08-10 23:39:42 · 433 阅读 · 0 评论 -
Codeforces Round #371 (Div. 2) A. Meeting of Old Friends【思维,求区间交集】
题意:给定2个时间区间[L1,R1],[L2,R2],求交集,如果给定的k在交集中,那么交集时间-1。思路:首先对两个区间的长度进行判断,判断之后,再以L1,R1这个区间不动, [L2,R2]这个区间去动,长度判断之后分类讨论就很容易了.. 主要是代码量有点大。 容易打晕。还有爆int。数据分析:1 ≤ l1, r1, l2, r2, k ≤ 1e18, l1 ≤ r1, l2 ≤ r2 注意1原创 2017-08-11 10:16:20 · 300 阅读 · 0 评论 -
352A - Jeff and Digits【题意理解不全面,粗心】
题意:给一些5和0,要求输出最大的 并且 能被 90整除的数字。思路:首先,要被90整除,这个数中5的个数必须是9的倍数,其次,还要有0才能被90整除。 5和0的数量确定了之后,输出就好了。错误原因:题目要求没看清楚啊~~ 不可能的输出-1,傻了就输出了0。#include <bits/stdc++.h>using namespace std;typedef long long ll;const原创 2017-08-11 11:29:17 · 258 阅读 · 0 评论 -
Educational Codeforces Round 26 B - Flag of Berland【思维】
题意:判断一个矩阵 , 是否满足以下条件: 1.仅有R、G、B三种字符 2.三种字符各自连一片,分别和矩形的边平行思路:对n和m是不是3的倍数展开讨论,如果n是3的倍数,那么分成[1,n/3] [n/3+1,2*n/3] [2*n/3+1,n]三个区间进行讨论。m同理。复杂度分析: 图也就100*100 只要不写成死循环就没问题#include <bits/stdc++.h>usin原创 2017-08-04 10:42:09 · 242 阅读 · 0 评论 -
Educational Codeforces Round 26 C - Two Seals【略带贪心+思维】好题
题意:已知一个矩形的长和宽分别是 a,b。 现在有n个矩形,让你从中挑出2个矩形,使得这两个矩形可以放进 初始给的矩形中 求最大面积思路: 暴力枚举所有组合C(2,n),对每一组矩形,判断是否可以放。判断的过程是: 先放一个矩形在左下角,然后再各个地方尝试加另外一个矩形。数据分析:1 ≤ n, a, b ≤ 100复杂度:O(n^2)#include <bits/stdc++.h>using n原创 2017-08-04 10:46:03 · 357 阅读 · 0 评论 -
Codeforces Round #371 (Div. 2) B-Filya and Homework【思维】
题意:给定n个元素的序列,问是否能对其中任意个数字进行+x或者-x使得序列所有值相等?思路:用mp来计数最方便。size==2说明只有2种数字必定可以。 size >3必定不行。 size ==3 判断max+min==2*mid错误思路:其实不能说是错误把。题目说的是对一些元素,实行+-。我理解的是,必须要有元素进行+和-。 然而题目的意思不是这个。 太坑爹了。数据分析:1 ≤ n ≤ 100 0原创 2017-08-11 14:02:08 · 247 阅读 · 0 评论 -
CodeForces 496 D. Tennis Game【思维】
题意:已知n次回合比赛结果,任意一方有 t 回合胜利就结束一盘比赛,s盘定胜负。数据分析:1 ≤ n ≤ 105思路:对于一个确定的t,至多有1个s。那么对应一个t,我们可以去寻找s。复杂度是O(n^2) 。 TLE的操作,那么要进行优化。如何优化? 预处理我们事先预处理出,每个人赢第k回合,所进行的回合数 以及 每个人到第k盘,所赢的回合数。 有点小绕对应于原创 2017-08-18 16:11:56 · 343 阅读 · 0 评论 -
Codeforces Round #223 (Div. 2) B. Sereja and Stairs【模拟】
题意:已知n个数,要求构成一个数列,使得构成数列中一个数最大 ,往两边依次严格递减 , 问这个数列最长多长并且输出该数列。思路:最大的放中间,第二大的往两边放,以此类推。 实现过程:用map来计数,计数完成后复制给struct。这样的好处是可以节约很多不必要的空间消耗。然后开一个数组来模拟第一句话的思路。用left,right标记左边和右边的下标。#include <bits/stdc++.h>u原创 2017-08-12 09:41:53 · 286 阅读 · 0 评论 -
Codeforces 483B Friends and Presents【二分+数论】涨姿势~~~
题意:对于区间[1,v] 求最小的v,使得该区间可以分成2堆,第一堆不是x的倍数并且个数大于cnt1 , 第二堆不是y的倍数且个数大于cnt2 。知识预备:1.对于1~v的区间,不是x的倍数的个数有v-v/x个(数论)。 2.晓得二分的写法,不能写成死循环。思路:曾经想到了二分,没敢往下写。因为这明显有单调性,对于确定的v,我们可以确定这个v 是不是满足要求原创 2017-08-13 15:03:24 · 352 阅读 · 0 评论 -
Codeforces Round #330 (Div. 2)C. Warrior and Archer【博弈+逆向思维】
题意:已知n个数字,每次两个人从中取出一个数字,直到剩下2个数字。A希望最后2个数字尽可能小,B希望最后两个数字尽可能大。问,在相对聪明的情况下,最后两个数差的绝对值(距离)是多少思路:逆向思维 。 考虑最后两个数字分别是X,Y(sort排序后)。对于A来说,他希望两个数字尽可能小,那他不可能去删除X~Y之间的数字,假如他删这中间的数字,就相当于帮助了B去有能力删除 A左边or原创 2017-08-20 10:16:14 · 305 阅读 · 0 评论 -
Codeforces - 337C(div2) - Harmony Analysis【规律】
题意:输入k,对应给定的2^k空间,求一组正交向量组。思路:原创 2017-08-20 14:22:48 · 293 阅读 · 0 评论 -
Codeforces Round #237 (Div. 2) 404B Marathon【精度】 好题!!!!
题意:一个边长为a的正方形,左下角定在(0,0),右上角在(a,a)。一人每跑d米需要喝一次水(求坐标)。一共喝n次水,问坐标分别是多少。思路:判断一下在哪条边错误原因:求rest多余的部分,我用了整数的方法去做,完全不知道有fmod这种东西的存在。 而且对于d一开始的时候fmod(d,4*a),改了这个操作我就AC了。 这是解决精度问题的一个细节。 很重要。 学习了。数据分析:1 ≤ n ≤ 1e原创 2017-08-13 16:24:58 · 300 阅读 · 0 评论 -
Okabe and Future Gadget Laboratory CodeForces - 821A
题意:告诉你n*n的矩阵,问对于其中任意一个不为1的数,是否有 当前行的某个数+当前列的某个数== 这个数思路:暴力穷举, n <=50#include <bits/stdc++.h>using namespace std;int a[55][55];int n;bool check(int x,int y){ for(int i=1;i<=n;i++) {原创 2017-07-28 16:46:19 · 366 阅读 · 0 评论 -
Okabe and Banana Trees CodeForces - 821B
题意:告诉你一条直线y , 让你求y上的某一点,使得过该点向x,y轴做垂线后得到的矩形和最大。和的定义是矩阵内每个点的 横坐标+纵坐标 ;思路:穷举#include <bits/stdc++.h>using namespace std;typedef long long ll;int main(void){ ll m,b; cin >> m>>b; ll maxs=-原创 2017-07-28 16:49:02 · 380 阅读 · 0 评论 -
Queue on Bus Stop CodeForces - 435A【思维】
题意:有n个团队的人在等车,一个团队的人必须同时坐一辆车,否则等下一辆。已知每个团队的人数a[i],每辆车的载客量m(不包括司机),问至少需要几辆车。思路:定义变量sum。for(i=1~n) 。 如果sum+a[i] > m , 那么sum=a[i] , ans++。 数据分析:1 ≤ n, m ≤ 100 1 ≤ ai[i]≤ m 没什么好担心的复杂度分析:O(n)#include <原创 2017-08-06 13:52:33 · 489 阅读 · 0 评论 -
Memory and Scores CodeForces - 712D【好题啊!!】
题意:A和B两个人的初始积分为a,b。每一轮A,B均可从[-k,k]的区间内取出一个数,累加在初始积分上,共执行t轮,问A赢B的有多少种可能。思路:暴力复杂度O(t*kt*k) TLE 。 取dp前缀和优化,每次的前缀和为下次的前缀和服务,以此类推。#include <bits/stdc++.h>using namespace std;typedef long long ll;int MOD=原创 2017-07-28 19:59:40 · 373 阅读 · 0 评论 -
Codeforce~545C - Woodcutters【贪心】
题意:已知n棵树坐标x及其高度h,现在要求最多能砍多少棵树。要求:砍一棵树后,其所占有的区间是 [x-h,x] or [x,x+h] 要求树倒下后所占的区间不能先前被其他树占领过。思路:对于2棵以上的树,首先左右两棵树必定往左边和右边倒。 对于i=2~n-1的树,对于当前的i,先尝试能不能放左边,左边不行,放右边,右边还不行不放。 理由是:对于两棵树,要么只能放一棵(任意一棵),要么两颗都放,要原创 2017-08-14 09:19:58 · 359 阅读 · 0 评论 -
CodeForces 679A Bear and Prime 100【交互题+数论】
第一次做交互题:所谓交互题,就是我们给一个结果,系统返回一个结果。题意:系统会隐藏一个数字x∈[2,100],你至多可以询问20次,系统会反应当前你给的值是不是x的因数,需要你最后判断x是质数还是合数思路:对于一个合数,必定能被2个以上的质数整除。那么我们只要枚举2~100内的质数,然后看一看是不是有2个以上的质数是x的因数。但题目里说只能询问20次。 因为x∈[2,100] 对于大于50的质数我们原创 2017-08-14 10:51:22 · 397 阅读 · 0 评论 -
832C - Strange Radiation【二分+思维】
题意:有n个人坐落在ox坐标上。已知每个人的x,v(速度),dir(朝左还是朝右)。 现在有一颗定时炸弹,一旦炸弹引燃,所有人向其当前方向以速度v跑。在爆炸的同时,炸弹会朝正负两个方向释放一条射线,一旦有人碰到了,那么其速度会改变为v+s(射线速度)。 现在问,满足 让x=0和x=1e6都有人经过的最短时间是多少。思路:二分 时间。 时间越长,肯定能跑,时间越短,越难跑。那么单调性很原创 2017-08-21 09:38:41 · 481 阅读 · 0 评论 -
Codeforces Round #303 (Div. 2) D. Queue 【贪心】
题意:n个人在超市排队买单。每个人花费的时间为a[i]。如果第i个人排队的时间大于买单的时间,那个人就会发火。问,最少可以让几个人不发火。数据分析:1 ≤ n ≤ 105 :: 1 ≤ a[i] ≤ 1e9思路: 1·错误思路:必须要让时间小的先买单,那么sort一下。然后求前缀和,再O(n)for一遍。如果sum[i] > a[i] ans++。2.正确思路:假如第i个人生气了,那么这原创 2017-08-14 15:18:42 · 247 阅读 · 0 评论 -
Codeforces 832D. Misha, Grisha and Underground【LCA】
题意:已知一棵树节点数n,n-1 条边组成。Q次询问,现在从中选取3个点a,b,c。 以一个点为顶点,另外两个点为起始点走最短路。要求得3种组合中,公共点数量最多的情况。思路:枚举3种情况。节点A,B之间最短路距离是:dis(A,B)=dep[A]-dep[LCA(A,B)]+dep[B]-dep[LCA(A,B)];两节点A,B到节点C的 公共点个数= ( dis(原创 2017-08-21 15:36:35 · 519 阅读 · 0 评论