Constructive & BruteForce
文章平均质量分 69
Masamiiiii
这个作者很懒,什么都没留下…
展开
-
Codeforecs 705C Working Routine 模拟(链表)
题意:n*m矩阵,q次操作,每次给出两个矩形的左上角坐标,及宽度和高度.交换这两个不相交的矩形.n,m题意限制的很紧,一条直线上不会有属于不同矩形的格子.每个格子存其右边和下面元素,交换两个子矩形不改变其内部指针,变得只有其四周一圈的指针O(q*(n+m))#include using namespace std;typedef long long ll;const int原创 2017-08-08 20:48:05 · 401 阅读 · 0 评论 -
hdu 6016 Count The Sheep 思维
点击打开链接题意:n男m女 n,m,k首先由于关系只有B-G G-B 所以最后的路径为 G-B-G-B 调换就有(B-G-B-G) 记录boy的friend,和girl的friend个数,枚举第二个人得到第一个人的选法 枚举第三个人得到第四个人的选法 枚举中间两个人 也就枚举了所有的边 复杂度为O(K)将G-B-G-B个数*2即可 #include using na原创 2017-02-26 19:05:48 · 298 阅读 · 0 评论 -
Codeforces 116C Party 树+dfs
点击打开链接题意:森林有n个结点,n若某个树的高度为h 则至少要分h组,若把每个高度的分在一组则只要h组,不同的树可以分在同一个组 所以ans=max(hi) #include using namespace std;const int N=2e5+20;int vis[N],ans,a[N];vector e[N];void dfs(int u,int fa,int h原创 2017-03-08 12:09:00 · 356 阅读 · 0 评论 -
Codeforces 776C Molly's Chemicals 前缀和
点击打开链接题意:给出n个数,|ai|线段最大和为1e14,k最多开50次幂吧2^40 -1只有1,-1求区间和为x的个数,枚举右端点,合法的左端点l满足,满足前缀和l=pre[r]-x,用map保存前缀和为i的个数即可 #include using namespace std;typedef long long ll;const int N=2e5+20;cons原创 2017-02-24 13:53:03 · 427 阅读 · 0 评论 -
Codeforces 765D Artsem and Saunders 构造
点击打开链接题意:给出n 和 f[] 求出函数g,h 满足 g[h[x]]=x && h[g[x]]=f[x] h定义域为1~m 值域为1~ng[h[g[x]]]=g[f[x]]=g[x]g[x]=g[f[x]] -> h[g[x]]=f[x]=h[g[f[x]]]=f[f[x]] 得当两个等式成立即有解时:有f[x]=f[f[x]]构造f[x]=f[f[x原创 2017-02-15 15:11:39 · 579 阅读 · 0 评论 -
Codeforces 764C Timofey and a tree 树+思维
点击打开链接题意:n个结点n考虑一条边(u,v),如果color[u]!=color[v] 则只能以u||v作为根,否则边i会出现在子树中使得颜色不同.则检查所有连接颜色不同的边,必须存在一个公共顶点rt,把rt作为根时才有解. #include using namespace std;typedef long long ll;const int N=2e5+20;in原创 2017-02-03 01:16:59 · 420 阅读 · 0 评论 -
Codeforces 761C DaSha and Password 暴力
点击打开链接题意:给出n行string 长度都为m (n,m消耗最小,只需要有三行满足即可,多的没意义->最终的password 肯定有三个字符分别对应数字字符和字母,暴力O(n^3)枚举这三个字符所在的行,预处理每行变化的最小代价即可.#include using namespace std;typedef long long ll;const int N=2e3+20;co原创 2017-02-01 12:09:59 · 410 阅读 · 0 评论 -
Codeforces 110C Lucky Sum Of Digits 暴力
点击打开链接题意:求digit和为n(n假设最后有p个4,q个7 为了最小:4排在前面,7排在后面,求出4,7个数即可4p+7q=n 枚举q,p=(n-7q)/4,数字尽量小->位数p+q尽量小,q尽量小即可. #include using namespace std;const int N=2e3+20;int n;bool flag;int main(){ w原创 2017-01-30 22:00:19 · 650 阅读 · 0 评论 -
Codeforces 152C Pocket Book 思维
点击打开链接题意:给出n个string,每个长度都为m(n,m由样例AAB BAA 容易发现:由于每次交换都为前缀,无论怎么交换,交换多少次,最后string中的第k个字符只可能为某一行的第k个统计cnt[k] 第k个位置的不同字符个数,计算ans=cnt[1]*..cnt[m]即可 #include using namespace std;typedef long lon原创 2017-01-30 18:07:04 · 471 阅读 · 0 评论 -
Codeforces 490C Hacking Cypher 暴力
点击打开链接题意:把s分成两部分,左部分被a整除,右部分被b整除 不能有前导0 s位数先预处理所有被b整除的后缀位置,O(n)找到被a|前缀i 判断后缀i+1是否成立即可 #include using namespace std;const int N=2e6+20;char s[N];int a,b,n,mk[N];//b|"mk[i]~n"int t[N];//(原创 2017-01-25 11:59:25 · 354 阅读 · 0 评论 -
Codeforces 165C Another Problem On Strings 尺取 Or 前缀和
点击打开链接题意:给出串s,长度尺取:以l为左端点成立的子串,若第一次在r成立 最后一次在y成立(r后的第一个1在y+1) 则个数为y-r+1第一次在r成立,[l,r]成立 [l+1,r-1]肯定不成立 dp记录i后的第一个1 复杂都为O(2*n)#include using namespace std;typedef long long ll;const int原创 2017-02-22 14:19:22 · 325 阅读 · 0 评论 -
Codeforces 284C Cows and sequence 构造 or 线段树
点击打开链接题意:m个操作 m前两个操作容易实现 只要记录sum和个数即可, 由于最后一个操作,还需要知道当前数列中最后一个数的值.设add[i] 前i个数同时加的add[i] ,只有求最后一个元素才有需要用到add.前面没有需要的先不更新add每次删除最后一个元素时 将它的add[i]传递给add[i-1] 则add[cur]就等于add[cur~ed] , a[cur]=a原创 2017-02-12 23:38:44 · 288 阅读 · 0 评论 -
Codeforces 768C Jon Snow and his Favourite Number 构造
点击打开链接题意:n个数字 k次操作(n,k注意到每次操作时都将数组排序,ai,x令f[y]为y的出现次数 只要知道每次多少个y保持不变 多少个y变为y^x 重复k次后,求出答案 O(k*1024) #include using namespace std;typedef long long ll;const int N=2e5+20;int n,k,x,a[N原创 2017-02-21 08:52:48 · 352 阅读 · 0 评论 -
Codeforces 768B Code For 1 二分+区间查询
点击打开链接题意:给出n1 则把n变为n/2,n%2,n/2,问[l,r]内1的个数?f[n]为n展开后得到的数字个数: f[n]=2*f[n/2]+1 迭代化解得到 f[n]=2^(log(2,n)+1)-1d[n]=n%2+2*d[n/2] d[1]=1,容易归纳得到n展开后会得到n个1 要求查询的区间为[l,r] 从起始区间(n,1,1+length(n)-1原创 2017-02-21 06:04:54 · 779 阅读 · 0 评论 -
Codeforces 501C Rational Resistance 迭代+思维
点击打开链接题意:有无数个单位1的电阻 要求每次用单位电阻和构造的电阻并联或者串联 求阻值为a/b(a,b首先并联总电阻小于任意一个分电阻得:如果当前电阻小于1,则最后步骤为并联,否则为串联迭代直到a或者b==1即可 迭代时发现竟然是求gcd的过程(表示好神奇..),复杂度为O(log(max(a,b)))おもしろい#include using namespace std原创 2017-02-28 20:31:04 · 377 阅读 · 0 评论 -
Codeforces 149C Division Into Teams 构造
点击打开链接题意:n个人(n构造即可:按价值排序后 奇数号给x,偶数号给y(天平倾斜向每次选人的那一边)每轮两边差为a[i]-d d>=0 所以两边差始终#include using namespace std;const int N=2e5+20;int n;pair a[N];vector x,y;int main(){ while(cin>>n) {原创 2017-02-10 15:16:19 · 353 阅读 · 0 评论 -
Codeforces 758C Unfair Poll 暴力模拟
点击打开链接题意 n*m个座位 提问顺序从row:1 2 ...n n-1 ...2 1 .. 每行都是从1~m提问 问总共有k次提问 被问到最多,最少和在(x,y)的学生被提问的次数?1由于k较大 定row1~ n n-1 ~ 2 为一个周期,则有X=k/((n+n-1)*m)个周期,除了row1,n被访问X次以外,其余都被访问2*X次剩下k%((n+n-1)*m) 由于n,m原创 2017-01-20 11:34:18 · 610 阅读 · 0 评论 -
Codeforces 791C Bear and Different Names 简单构造
点击打开链接题意:给出1~n-k+1连续k个人的名字是相同或者不同,构造出满足条件的n个名字 n,k任意生成50个可重排列,则a,aa,a..a,b,bb,b...b 前5个字符每种各10个 简单构造:若i~i+k-1为N,则令ans[i]=ans[i+k-1],使得i+1~i+k-1为Y,则i+1~i+k为N还是Y只取决于ans[i+k] #include using原创 2017-03-19 10:48:52 · 470 阅读 · 0 评论 -
Codeforces 782C Andryusha and Colored Balloons dfs
点击打开链接题意:ndfs遍历时,保证当前子结点颜色和祖先u,fa[u]结点颜色不同 && 兄弟结点的颜色要不同即可#include using namespace std;typedef long long ll;const int N=4e5+20;int n,c[N],ans;pair p[N];vector e[N];void dfs(int u,in原创 2017-03-06 08:22:15 · 623 阅读 · 0 评论 -
Codeforecs 700D Connecting Universities 构造
题意:n个结点的树,其中有2k个标记点,每个点只能配对一次,将标记点配对后,每问k对标记点距离累加和最大为多少?,n,k首先一条边u-v的贡献最多为min(sz[v],2*k-sz[v).其次每条边都能达到这个上限.从深度大的边开始check,假如存在u-v小于上限,则说明以v为子树中,至少有一个配对点(a,b).v之外的子树中有配对点(c,d).将(a,c),(b,d)配对,贡献增加.当原创 2017-08-08 09:05:08 · 340 阅读 · 0 评论 -
Codeforces 448C Painiting Fance 分治
点击打开链接题意:n个高度a[i]参差不齐的矩形,宽度都为1排列在一条直线上,有宽度为1的刷子,每次可以垂直或者水平刷一次,不能刷空白的位置.n竖着刷ans次 ans每次能横刷的最大次数为min(a[1]-x,a[2]-x,...a[n]-x) x为已经刷的行.每次横刷后 n个矩形 某些列为0 这些0列 把[l,r]分成不相交的块,这些块和原问题性质相同 递归求解即可每次扫原创 2017-07-05 11:51:25 · 497 阅读 · 0 评论 -
Codeforces 365C Matrix 暴力
点击打开链接题意:给出A利用b[i][j]=s[i][j] 若子矩阵左上角(a,b),右下角(c,d)和为A 则(s[a]+..s[c])*(s[b]+..s[d])=An特判A=0 非0区间个数乘以0区间的个数+零区间个数^2 #include using namespace std;typedef long long ll;const int N=5e3+20;原创 2017-06-02 18:08:34 · 463 阅读 · 0 评论 -
AGC 015C Nuske vs Phantom Thnook 思维+二维前缀和
点击打开链接题意:n*m矩阵,n,mq个询问,q同一个连通分量中任意两点只有一条路径,于是对相邻的每个1连接一条边,每一个连通分量显然都为一颗树若子矩形有k个联通分量,因为每个联通分量都为树,则子矩形中点数-边数等于k 利用二维前缀和求出子矩形1的个数(点)和相邻1(边)个数即可 复杂度O(mn+q)#include using namespace std;co原创 2017-05-27 23:07:52 · 585 阅读 · 0 评论 -
Codeforces 798D Mike and distribution 构造
点击打开链接题意:数组a,b共有n个数,n Sum(A) && 2*(b[p1]..b[pk]) > Sum(b)2*(a[p1]..a[pk]) > Sum(A)a[p1]..a[pk] > a[q1]..a[q(n-k)] (q为剩下的下标),因为一定有解,所以k=[n/2]+1必定有解 构造:将a从大->小排序后,当n为odd时,先选取A中最大的元素下标,则剩下2k对元素原创 2017-04-23 23:10:40 · 482 阅读 · 0 评论 -
Codeforces 799D Field expansion 暴力
点击打开链接题意:给出长宽A:(a,b),B:(h,w)和n个数a[i] 所有数a,b由于选a[i]肯定是从大到小考虑 如果最后只剩下2,则直接分配2的个数即可,该操作复杂度为线性.则最坏情况变为log(3,1e5)=11,O(2^22)=4e6 暴力即可 #include using namespace std;typedef long long ll;cons原创 2017-05-13 16:34:31 · 524 阅读 · 0 评论 -
Codeforces 746E Numbers Exchange 模拟
点击打开链接题意:n个数a[i],m个数1~m 问最少要多少次交换,使得数组a中odd个数等于even个数 && 所有数都不同,无解输出-1 记录odd个数,先去掉重复的元素 ans>=该步交换次数odd>n/2 找到m中下一个能交换的偶数 odd==n/2 则交换相同奇偶性即可odd此时,a中无重复元素 若oddn/2也一样 ,最后判断odd是否等于n/2即可 a原创 2017-05-02 20:04:48 · 424 阅读 · 0 评论 -
Codeforces 404C Restore Graph 构造
点击打开链接题意:给出n个点的最短距离数组d[i],每个顶点的度数先将距离d[i]排序,从小到大构造边 保存最短距离为x-1的点pre,把距离为x的连接到x-1上,每个pre[i]最多连接k次,更新pre即可 复杂度O(M)==1e6#include using namespace std;typedef pair ii;const int N=2e5+20;struct no原创 2017-05-02 17:59:37 · 400 阅读 · 0 评论 -
Codeforces 681D Gifts by the List dfs+构造
点击打开链接题意:给出n点,m边的森林,a[i]为i的祖先,问能否构造出一个list,使得每个i:在list中第一个找到的祖先为a[i]?i的祖先集合为B,则在list中,a[i]应该出现在每个b[k]之前,a[i]->b[k]连接一条边,判断拓扑序.(显然MLE,TLE!!)u-v v为u的father情况1:u给u送礼 情况2:u不给自己送礼,则list中原创 2017-04-06 11:45:04 · 351 阅读 · 0 评论 -
Codeforces 797D Broken BST dfs+模拟
点击打开链接题意:n若暴力查询 最坏时,树退化成链O(n^2) 一个值x能被查询到,当且仅当从root起往值x走的路径中,端点p向右走的值都比x小,端点q向左走的值都比x大则x>=max(p) && x#include using namespace std;typedef long long ll;const int N=2e5+20;const int inf原创 2017-04-17 17:59:18 · 692 阅读 · 0 评论 -
Codeforces 796D Police Stations 构造+BFS
点击打开链接题意:n个点的树,k个为黑色,law:任意点距离d内都有黑点,n,k,d由于是树,每删除一条边 都增加一个联通分量,无论d是多少,每个联通分量内都要有一个黑点,所以删除的边不会超过k-1.一开始已经满足law,任意点到黑点的最短距离可以构造k个合法的联通分量:对每个点u,把它加入到和它最近的黑点的联通分量中,黑点距离自己为0,同一个联通分量只有一个黑原创 2017-04-12 15:29:23 · 726 阅读 · 0 评论 -
HDU 4920 Matrix multiplication 暴力(bitset)
点击打开链接题意:n*n矩阵A,B相乘后%3的结果 n直接相乘,O(n^3)=5e8 TLE由于求%3后的结果 则用bitset保存A每行和B每列%3后的情况则c[i][j]=A第i行和B第j列,共有部分的个数*权值x(x=1,2,4) #include using namespace std;const int N=2e3+20;bitset a[N][3],b原创 2017-04-11 20:04:05 · 323 阅读 · 0 评论 -
Codeforces 272C Dima and Staircase 思维 or 线段树
点击打开链接题意:给出n个物品高度ai,ai每次都从左端点1开始叠放,第i个方块肯定落在第i-1个方块的上方 取高度边界low=ans[i-1]+h[i-1]高度递增,(下标>=i)高度>=a[i]的都能放的宽度为i的方块若l若l>=a[w] ans[i]=l (因为高度l以上的宽度都大于等于w) #include using namespace std;typ原创 2017-03-15 13:38:40 · 394 阅读 · 0 评论 -
Codeforces 276D Little Girl and Maximum XOR 贪心+构造
点击打开链接题意: 给定l和r,l,r把l,r展开成2进制000111... 000110...若l,r二进制中第一个不相同为第k位,则取a第k位之后全部取1,b第k位之后全取0此时答案的第k位起全部为1,显然为最大.因为ans第k位前不可能有1,a,b必须在l,r内,若k位之前,l,r某位为(1,1)时,若a,b其中一个改位取0,必然小于l.原创 2017-03-13 20:30:39 · 343 阅读 · 0 评论 -
Hihocoder 1273 清理海报 DAG建图+几何
点击打开链接题意:给出n张矩形海报的左上角(x1,y1),右下角(x2,y),撕下一张海报A,会把海报B,C..都斯去(B,C..为覆盖A的海报)海报A被海报B覆盖当且仅当他们存在面积大于0的交集并且A在B之前贴出,海报A的一个角被海报B覆盖当且仅当这个顶点处于海报B的内部 一张海报想要被手动撕掉的话需要至少存在一个角没有被其他海报覆盖,问选那一张海报手动撕 能使被撕去的海报最多?原创 2017-03-21 20:48:39 · 318 阅读 · 0 评论 -
Codeforecs 465C No To Palindromes! 构造+思维
点击打开链接题意:给出初始串长度为n,包含前p个字符的合法string,n=2的回文子串,求下一个字典序大于初始串的合法的子串?无长度>=2的回文子串 :任意连续两个不能相同a[i]!=a[i-1]若以i为中心无长度为3的回文子串 则也没有长度l>3的回文子串 所以a[i-1]!=a[i+1]为了构造出下一个合法排列:先找到第一个能往上变化的a[i],若p>=3,之后按照上原创 2017-03-19 15:44:19 · 343 阅读 · 0 评论 -
Codeforces 767"B" The Queue 模拟
点击打开链接题意:给出n个人的到达时间,总的服务时间为[s,e],每个人的需要t秒服务时间,问选择一个时间到达使得等待时间最少?先计算等待时间需要0 只能为[S,E]中间有free时 选择free到达即可否则 先计算第i个人的开始服务时间b[i] b[i]=b[i-1]+t枚举成为第i个人被服务 则到达时间最晚为a[i]-1 等待时间最少则为:b[i]-(a[i]-1)原创 2017-02-19 10:14:33 · 513 阅读 · 0 评论 -
Codeforces 246C Little Girl And Maximum 差分
题意:n个数,m次询问 n,m最后的累加和可以写为:ans=segma(a[i]*f[i])每次询问l,r时 如何快速计算f? 用线段树区间更新使f[l]~f[r]同时加上1,最后单点查询计算出f,比较麻烦利用差分,每次更新时:c[l]++,c[r+1]-- 最后计算i的前缀和,即可求出i被包含在多少条线段(询问)中啦 ai因为a[i]·b[j]+a[j]·b[i]-a[i原创 2017-02-18 14:08:37 · 603 阅读 · 0 评论 -
Codeforces 733C Epidemic in Monstropolis 构造+思维
点击打开链接//b的k个中的第一个若从a[x']开始合并 因为b[1]为第一个,所以a[1~x']必须全部合并完,//如果sum[1~x']//同理后面的b[j]为a[i]的一段连续和 b[j]满足前缀和时 构造解即可:从一块的最大值开始向相邻的合并,合并时移动编号#include #include #include #include #include #incl原创 2016-11-01 22:34:36 · 437 阅读 · 0 评论 -
Codeforces 733B Parade暴力
点击打开链接有1e5行2列 只有一次操作,暴力枚举要换的行即可#include #include #include #include #include #include #include #include using namespace std;typedef long long ll;const ll mod=1e9+7;const int N= 1e6+20;i原创 2016-11-01 16:16:56 · 624 阅读 · 0 评论 -
Codeforces 734D Anton and Chess 几何+模拟
点击打开链接最后In Check的棋子来自king 8个方向中的最近的棋子 保留该棋子 最后在判断下即可 #include #include #include #include #include #include using namespace std;typedef long long ll;const int N=5e5+20;struct point{ cha原创 2016-11-16 10:22:53 · 608 阅读 · 0 评论