自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

binarycopycode

人百我一,人万我十,舒服了

  • 博客(35)
  • 收藏
  • 关注

原创 高三暑假随想

高三暑假快结束了,而我却在acm集训结束后又迎来10天假期。1.能力与教育小时候,觉得6年级好远好远了,高三就真的不敢想了,都听说高三好苦好苦,一定要抓住小学的时候痛快玩。当时在县城的我,从小学2年级起寒暑假每天去网吧玩6,7,个小时电脑,然后晚上跟爸妈说我没碰电脑,又可以再玩2,3个小时。然而,在长沙这种大城市的孩子,寒暑假每天学奥数,学钢琴,学书法,学画画,学作文,计算能力,阅

2017-08-29 08:22:07 555

原创 HDU3333

8.17那天我再考场上用莫队A了这题。。。。其实是可以卡掉的。正解是线段树或树状数组。按照询问的r排序,然后r没向右移动一次,如果这个数曾经出现了,就在这个数原来出现的地方减去这个数,再在当前位置加上这个数。#include#include#include#include#define maxl 30010#define maxq 100010using namespace

2017-08-27 18:23:57 452

原创 51Nod 1385

找规律,发现1-9,就是1到9,到10的时候,0放在哪呢?就发现如果放在最后的话,可以保证以后的20,30,..90都用这个0,这样能把这个0的作用最大化,然后11的时候,同样一个新的1放在0后面,可以满足21,31...91.101,利益最大化,于是我们想到按照123456789012345678901234567890....的顺序放,是最优的贪心策略、#include#include#d

2017-08-27 08:29:03 264

原创 HDU6138

先构造AC自动机,完了以后对于x,y,先用x把x的所有子串标记了,再用y去寻找是否y的子串为也是x的子串,根据字典树的性质,这已经保证了一定是原先某字串的前缀了。一开始T掉我还以为数据卡的恨死,结果是小细节错误,while(v && !ch[v][c])写成了while(!ch[v][c])导致死循环,xushu教了几个细节,不用吧所有串压到一个char数组里后面再调取,直接记录每个串的末尾节点,

2017-08-26 19:27:45 317

原创 HDU 3667

因为这个流量的平方乘以ai为代价,就很烦,一般的费用流,怎么改姿势都处理不了。然后又看题解发现了神奇方法。。。将每条边的费用变成1ai,3ai,5ai,9ai,且流量为1,这样吧1条边拆成多条边,流量为1就是1ai,流量为2就是走2条边,(1+3)=4ai=2*2ai;'#include#include#include#include#define maxl 210#define

2017-08-26 18:51:26 332

原创 HDU - 3605

十分机智,由于n太大,一般的网络流估计过不了,(然而加了读入优化当前弧优化的代码,上午T掉了,下午A了。。。还是错的模板,反边的流量操作搞成+了。。。)所以因为m只有10,所以对于每个人来说,能适应这些星球的情况最多2^11-1种,于是就可以统计出每种情况的人数,然后把每种情况建个点,有多少人是这种情况,就从源点连多少流量的边到这个点,然后再根据情况连无穷大的边到星球点,最后从星球点连边到汇点,控

2017-08-26 18:47:54 336

转载 二分图最大匹配的König定理及其证明

就是用这个定理的性质证明之前那道题的最小覆盖点集构造问题解法的正确性。智商之神matrix67 本文将是这一系列里最短的一篇,因为我只打算把König定理证了,其它的废话一概没有。    以下五个问题我可能会在以后的文章里说,如果你现在很想知道的话,网上去找找答案:    1. 什么是二分图;    2. 什么是二分图的匹配;    3. 什么是匈牙利算法;(http://ww

2017-08-23 16:42:08 294

原创 UVA - 11419

二分图最小点覆盖=最大匹配。这题巧的是对于解的构造,lrj故意在白书上不写原因和证明,留给我们思考,我找了好多博客才找到一个详细写了这个问题的题解。左边集为S,右边集为T,现在我们已经得到了最大匹配,知道了S,T中的匹配点。那我们怎么知道每一条边(匹配和未匹配)选哪一个点进行覆盖呢?我们先假设已经匹配边中的全部选择S中的匹配点,但我们发现S中还有一些未匹配点对T中的已匹配点连着未匹配边

2017-08-23 16:07:12 323

转载 DAG最小路径覆盖与二分图最大匹配

DAG的最小路径覆盖和二分图的最大匹配DAG的最小路径覆盖是指找最小数目的互相不相交的有向路径,满足DAG的所有顶点都被覆盖.首先给出公式:DAG的最小路径覆盖数=DAG图中的节点数-相应二分图中的最大匹配数.那么对应一个DAG,如何构造相应的二分图?对于DAG中的一个顶点p,二分图中有两个顶点p和p',对应DAG中的一条有向边p->q,二分图中有p-q'的一条无向边.二分图中

2017-08-22 18:58:44 530

原创 2017ccpc网络预选赛1005

#include#include#define maxl 100000#define eps 1e-8int ans;double n;double f[maxl];void prework(){ f[1]=0;f[2]=0,f[3]=0;f[4]=2; for(int i=5;i<maxl;i++) { if(i%4==1)

2017-08-19 21:14:15 645

原创 ACdream 1417

这种小的贪心,思维,技巧题我真的训练的太少了,感觉总是无从下手。字典序最小,就要求第一个是1,然后后面很多0就最后,于是用k找出刚好比1  , 10  ,100,1000,....等数字的k的倍数(处理不存在的情况),然后字典序的时候就从小到大比较久从小到大比,每次对ans*10,当前数字比ans小就更新。#include#include#define maxl 21long lo

2017-08-17 08:13:23 367

原创 HDU 2492

这种有点小技巧的题目我都转不过弯,已然GG。考试的时候一直想着如何去算出2个点之间有多少个可以的裁判点,然而完全不好计数。就这样怼了一个半小时,其实转换一下,枚举裁判点,去统计能已该点为裁判点的左右两边的点对有多少,就很简单了,x1是左边比该点搞的,x2是低的,x3是一样的,y1,y2,y3,则是右边的。#include#include#define maxl 100010int

2017-08-17 08:08:53 240

原创 POJ2352

一定一定要看数据范围!考虑极端情况!#include#include#include#define maxl 32010using namespace std;int n;int b[maxl],ans[maxl];struct node{int x,y;} a[maxl>>1];bool cmp(const node &a,const node &b){ if(a.

2017-08-15 19:17:22 182

原创 POJ2528

今天发现了离散化的一个神坑,处理区间覆盖问题用离散化时,不相邻的数字一定要在中间多添加一个不存在的数字,不然的话,比如你覆盖1 15,1 5,10 15,若1->1 ,5->2,10->3,15->4,则终于最后只能看见1-2 3-4,而实际上可以看见1-5 6-9 10-15,然后就是区间覆盖问题从后往前添加,如果这一个区间被填满了就不用填了。然后一个蜜汁错误,gank明明没用,然而加在re

2017-08-15 18:02:04 283

原创 POJ1066

我永远不会忘记今天2017.8.13,一道计算几何从上午写完,改到下午4点半,出不来,然后换了一道水一点的这题,然后把变量名全改的更kuangbin的一样,二分对比代码查错,最后一个y1写成x2,一个if();的括号后面写了个分号,吐得血出全程抄写kuangbin代码#include#include#include#include#include#define maxl 110

2017-08-13 17:59:03 169

原创 csu8月月赛,csuoj1978

此题一开始WA了很久,之前NOIP2015的时候DAY1T2也是类似的题目,然而那是无向图找最小环,于是可以到过的点不经过,这里是有向图找乘积最小环,所以到过的点还是要经过,但每条边走一次就行了,还有一个要注意的地方是,如果即将到达的位置也在队列里,首先是对这个环进行记录,然而还必须继续到这个点,因为可能存在联环和环套环的情况,所以一次要把所有可能形成的环找干净,然而其实如果一个点在队列里面多

2017-08-12 15:59:03 313

原创 CSU - 1975 洛谷P1126

CSU上数据有bug,如果起点和终点重合在障碍物上ans=0而不是ans=-1,这种情况本来是不存在,然而造数据的QT大神表示他认为这样可以可以,于是就这样造数据了。。。此处注意几个细节,首先是格子和格点有区别,为了方便我把起点和终点的坐标都加了1,就好处理了。向前123步走的时候,如果只是有那个点已经有最优值,就不记录那个点,但是要继续走,而如果那个点不能走,直接break,这个地方WA了许

2017-08-11 18:46:04 258

原创 UVA - 11090

看到最小平均值,就想到二分之后去判断是否为负数。根据题目,用spfa来判断有无负环,判断的标准为一个点到达过n次以上。然而有个很严重的bug,现在还没想通,原来我用的是记录最大边长maxlen,然后r=maxlen+1,如果最后ans>maxlen-eps就证明没有路径,结果WA了1小时,看看网上代码,改成r=10000010,ans>10000000就输出没有路劲,最后就A了,这很不科学..

2017-08-11 18:32:37 266

原创 HDU 4786

智商捉急。看了题解先判断图是否联通,然后优先选黑边。看白边最小选多少,再优先选白边,看白边最多选多少。于是从最小到最大都可以构成这样的生成树了。可以想象一下,既然已经可以联通成生成树了,那么黑边先选,再最小选出白边,一定存在许多白边可以替代黑边,多选一条白边,就一定找的出相应联通关系的黑边,一直到白边最多。#include#include#include#define maxl

2017-08-10 18:46:23 237

原创 HDU2122

WA的不知所错时,可以重写一遍,比检查快的多。注意考虑极限情况,这题中n#include#include#include#define maxl 100100using namespace std;int n,m,sum;long long ans;int f[maxl];struct ed{int x,y,l;} e[maxl];bool yes;bool cmp(

2017-08-10 18:35:57 254

原创 HDU - 3047

今天发现一个大秘密!关于合并函数,此题题意很鬼,1--300列没有明确说明是什么东西,然而是否考虑%300都可以A,奇葩题。#include#include#define maxl 50010#define mod 300int n,m,cnt,ans;int dis[maxl],f[maxl];void prework(){ cnt=0;ans=0; for(int i

2017-08-09 18:41:09 321

原创 C - 食物链 POJ - 1182

设虚点,若ab相同就连接ab,吃就连接a,b+n,设2组虚点方便理解ABC#include#include#define maxn 1000001int n,k,ans=0;int f[maxn*3],rank[maxn],d[maxn];void prework(){ scanf("%d",&n); for(int i=1;i<=3*n+1;i++) f[i]=i;

2017-08-08 19:20:01 343

原创 CodeForces 432D

这题也想了很久,智商捉急。求相同前缀和后缀在串中出现了多少次,用num数组表示出现了多少次,由于next数组树的性质,而且一定保证越后面的深度约大,所以先把num数组全赋值为1,然后再从后往前扫,num[nxt[i]]+=num[i]#include#include#define maxl 1000020int n,tlen,cnt;int nxt[maxl],num[ma

2017-08-08 18:35:38 377

原创 HDU 5763

KMP,预处理nxt,然后去文本串中匹配,f[i]表示前i个字母有多少种意思,当匹配到i成功时,说明i-len+1.....i可以表达为2种意思,所以f[i]=f[i-1]+f[i-len]。想了许久,暴露了我的sb智商#include#include#define maxl 100010#define mod 1000000007int cas,tlen,slen;int f[m

2017-08-08 18:06:38 316

原创 E - Squares POJ - 2002

记住一个教训,vector把数组开出来不添加值也会占空间,vector e;  e.clear(),无法减少空间,必须用vector (e).swap(e),才能释放内存空间,所以以后做hash题,最好不用vector存公共溢出区,直接开放寻址法,省时省空间。记住一个教训,vector把数组开出来不添加值也会占空间,vector e;  e.clear(),无法减少空间,必须用vector (

2017-08-07 18:59:26 300

原创 E - Mondriaan's Dream POJ - 2411

这题是2015年暑假DP考试里考的。。上次不会做抄了代码,这次又不会做抄代码。。。以前状压DP的题简直白做了这题关键是用一个数组记录上一行状态为s和这一行状态为t能否并存,用一个dfs预处理这个数组,然后转移就很简单了。每种木板只有两种情况,横着放和竖着放,dfs里面对其进行枚举。#include#include#define maxl 12 int n,m,lim;bool

2017-08-06 18:29:07 201

原创 C - 炮兵阵地 POJ - 1185

vijos和codevs上都过了,然而poj死活过不了。检查1小时未果,吃饭回来打开discuss发现n=1 m=1数据=_=。把一行空白可放的状态搜出来,放到一个数组里,然后空间就不会炸了,然后用位运算判断在转移的时候状态可不可行。f[i][t][s]表示第i行为s,第i-1行为t的最大放置数量,然后从枚举k,max(f[i-1][k][t])+num[s]转移i=1,i=2单独处理

2017-08-06 18:24:19 307

原创 CodeForces 149D

本蒟蒻看完学长题解后写了100+行,中间每行30+列然后错了,眼睛查错已烂,只好抄一手代码,学习先进dfs写法#include #include #include #define maxl 710#define mod 1000000007using namespace std; int n,top=-1; int match[maxl],stk[maxl]

2017-08-05 19:24:50 547

原创 CodeForces 557C

我智商太低,考试没磨出来。。。看到200想到桶排,然后先按长度排序,一个一个添加,用一些前缀和数组,就可以直接求出比当前枚举的长度大的总消耗能量值,然后预处理当前长度有多少个,然后再到比这个长度小得里面去找。注意长度相同时要跳过,只枚举一次,不然可能删除之前一个相同长度的桌脚,然而网上很多题解代码没这个处理也过了,cf竟然数据弱,没人hack吗?   =_=#include#includ

2017-08-05 18:52:49 343

原创 G - String painter HDU - 2476

想破脑袋想不出来,看神犇谭显瀚那么快切了还以为是道水题,真的不看题解完全想不出QAQ,贴学长题解对于有重叠部分刷法的处理:先刷区间[1,5]再刷[3,7]先刷[1,2],再刷[3,7]因此,只需考虑不相交的刷法1、首先考虑石头都没有颜色刷到B:思想与C题相同,保证最优解的刷法能够被我们的区间DP状态转移方程转移即可f[i][j]=min{f[i][k]+f[k+1]

2017-08-04 19:12:16 451 1

原创 D - You Are the One HDU - 4283

这道题巨巧,考虑到进栈出栈并不能生成全排列,贴一波学长题解dp[i][j]表示从第i个人到第j个人这段区间的最小花费(是只考虑这j-i+1个人,不需要考虑前面有多少人)那么对于[i,j]中的第1个人,就有可能第1个上场,也可以第j-i+1个上场。考虑第K个上场即在i+1之后的K-1个人是率先上场的,那么就出现了一个子问题 dp[i+1][i+1+k-1-1]表示在第i个人之前上场的

2017-08-04 18:58:34 197

原创 C - Halloween Costumes LightOJ - 1422

f[i][j]:参加从第i个到第j个Party所需要的最少套装f[i][j]=min{f[i][k]+f[k+1][j],f[i][j-1]}; f[i][j-1]只有在a[i]==a[j]时才考虑转移。f[i][i]=1;用小区间求大区间,区间DP的题目我还是理解不够深刻,用起来不同熟练,然而我今天看到一个题解//这题就相当于查找区间内的括号对数,每一对括号就相当于可以少带一

2017-08-04 18:52:15 234

原创 CSU1973: 给自己出题的小X

本题本意是搜索题,直接小优化剪枝裸搜即可,然而可以DP,看了石文斌的题解,设F[i][j][k]为前i个数,选出j个,相差大于k的方案数,先预处理 f[i][1][k]=1; f[i][j][k]=f[l][j-1][k]之和 ,a[i]-a[l]>k,a数组先预处理成从小到大排序的序列(序列顺序不影响方案数的),然后统计f[i][k][k]之和即可#include#include#inclu

2017-08-02 19:28:29 307

原创 CodeForces - 724D

要保证每个长为m的子串有个位置被选掉,切选出的序列排序后字典序最小。关键是要保证最大的字母字典序最小,所以先遍历,从前往后每m个选一个最小的,在相同字幕里选尽可能靠后的,保证之后字典序最小,然后找到无论如何必须要选的最大字母后,再从前忘后遍历,找出比最大字母小的字母全部选掉。#include#include#include#include#define maxl 100010#def

2017-08-02 16:21:20 317

原创 CodeForces - 803C 数学贪心

传送门:https://codeforces.com/problemset/problem/803/C给一个n,要选k个严格递增的数字和等于n,且最大的公因数最大最大gcd也是n的因数,构造q*(a1+a2+..ak)=n,q<=(a1+a2+..ak),枚举q找到最大gcd#include<cstdio>#include<cstring>#...

2017-08-02 08:50:30 294

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除