- 博客(34)
- 收藏
- 关注
原创 SGU 226
题目大意:给出一张图,每条边都有一个颜色,求1到n的最短路,要求路径上不能有两相邻边颜色相同。 题解:本来写了个裸SPFA,WAon5看了讨论区的数据才知道不能直接判断边的颜色然后跑SPFA,应该设d[n][k]表示第n个点,由第k个颜色过来的最短路,也就是加一维跑SPFA。给我的感觉是:做不出就加一维。 %%%__debug大神。#include#include#include
2015-08-27 20:28:08 454
原创 NOIP 2014 day1第二题 联合权值
题目描述:无向连通图G 有n 个点,n - 1 条边。点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 。图上两点( u , v ) 的距离定义为u 点到v 点的最短距离。对于图G 上的点对( u, v) ,若它们的距离为2 ,则它们之间会产生Wu×Wv的联合权值。 请问图G 上所有可产生联合权值的有序点对中,联合权值最大的是多少?所有联合权值之和是多少?
2015-08-27 19:24:00 557
原创 NOIP2014 day2第三题 解方程
题目大意:已知多项式方程: " target="_blank" style="color:rgb(113,40,40); font-family:Tahoma; line-height:18px">求这个方程在[1, m ] 内的整数解(n 和m 均为正整数)。题解:傻逼hash题,我取了三个模数,然后把每个系数分别取模;如果a不是解那么显然a+mod也不是解。经过三重筛选以后,剩下
2015-08-27 17:02:34 667
原创 NOIP 2014 day1第三题 飞扬的小鸟
题目描述:Flappy Bird 是一款风靡一时的休闲手机游戏。玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,小鸟顺利通过画面右方的管道缝隙。如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告失败。 为了简化问题,我们对游戏规则进行了简化和改编: 1. 游戏界面是一个长为n ,高为 m 的二维平面,其中有k 个管道(忽略管道的宽度)。 2. 小鸟始终在游戏界
2015-08-27 16:52:51 900
原创 SGU 225
题意:给出一个n*n的棋盘和k个,问有多少种放的方法使得马互不相攻击。 题解:首先很容易想到设dp[u][v][i][j]表示前i行,用了j个马,第i行的状态为v,前一行的状态为u。dp[u][v][i][j]+=dp[i][u][i-1][j-cnt[v]]且v不与i,u冲突。 判冲突的话可以这样,前两行左移1位&当前行,为1则冲突,然后右移一样的。前一行就左右移
2015-08-27 10:38:02 803
原创 SGU 224
题目大意:给定一个n*n的国际象棋棋盘和k个后,问使得所有后互不相攻击方案数。题解:无脑爆搜(和紫书P193上面那个差不多),我265ms过的,0.75秒就会T,还好,捏一把冷汗。%%%__debug大神今天一下午过了BZOJ1999树网的核加强版,还口口声声地吐槽联赛数据弱,WA3个地方的程序都能A。#include#include#include#include#inclu
2015-08-26 19:39:13 613
原创 SGU 223
题目大意:给出一张n*n的棋盘和k个王,问有多少种使得王互不相攻击的方案。题解:状压dp,设dp[i][j][S]表示前i行用了j个王,其中第i行放王的状态是S。显然有dp[i][j][S]+=dp[i][j-cnt[S]][S'],其中cnt数组保存每个状态王的个数,且S'作为当前行可以在下一行放S这个状态。位运算写错了妈了个鸡,还有用vector里的元素时直接用的指针,就这两个地方
2015-08-26 16:19:46 482
原创 SGU 222
题目大意:给出一个n*n的棋盘和k个车,要求他们互不相伤害,问有多少方法。题解:裸dp,dp[i][j]表示放前i行,有j个车的方案数,那么dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*(n-j+1)。没特判n然而还可以组合数学显然当n当n>=k时,可分为两步:先在n*n的矩阵中选出k行k列,组成一个k*k的子矩阵,再在k*k的子矩阵中放置k个。前一步的
2015-08-26 11:02:21 467
原创 Codeforces 7B
题目大意:其实就是模拟一个内存分配器,有n个指令,k个单元的内存。alloca:分配a个单元给内存块(内存块是从程序开始就计数器++),从左往右找一个连续空的内存区域将其分配。erasex:删除编号为x的内存块。defragment:把不相邻的内存块移动至相邻,且最前面的内存块要移动到1的位置(并不是标号小的靠前)。其实我看了一麻版的英文题面之后就去网上搜翻译,然而并没有,
2015-08-18 21:45:47 1070
原创 SGU 221
题目大意:给你一块n*n的国际象棋盘,放k个象,有多少种互不攻击的方法。我们可以把棋盘转45度,那么象就可以看成车了,而且黑格象白格象不可能互相攻击,于是我们考虑白格象。我们先把每一斜行的格子数拿出来,为避免后效性,从小到大排序再处理,不影响答案。然后就可以dp了,设f[i,j]表示前i格放了j个象的方案,由于一行只能放一个,有如下方程f[i,j]=f[i-1,j]+f[i-1][j-
2015-08-18 21:00:35 637
原创 Codeforces 7A
题目大意:给出一块8*8棋盘的终态,初始状态是全部白棋,一次操作可以把一行或一列的棋子换成黑棋,可以重复换,问最少要多少次。好吧,构造题,平时做得比较少。我的构造方法基于贪心的思想,我们先处理行,处理完行再处理列。对于一行在终态中全黑的,我们自然要在初始棋盘中将其涂黑,然后对于非全黑的一行,我们枚举每一个格子,再检查在这个格子上能不能竖着涂,能就在初始棋盘上涂。对于列同样的搞法。这道题完全
2015-08-16 20:48:15 701 1
原创 Codeforces 6E
题目大意:给定一个长度为n的序列和一个数k,求最大数与最小数的差小于等于k的子序列的最长长度,并输出有多少个,以及各自的左端点和右端点。不得不说这道题目真是经典。刚开始看到这道题的时候,就觉得要用线段树做了,但始终不知道该怎么搞,我当时的想法很暴力,枚举l,r用线段树暴力判断是否满足,显然T得很惨。看题解有一句关键的话:“若[l,r]满足条件,则[l,r-1]也必然满足条件”。这句话说明了单调
2015-08-16 19:48:44 865
原创 codeVS第二次月赛 C
题目描述 Description切记不要加任何文件读写, 本次比赛暂不支持ifndef ONLINE_JUDGE。请互相转告。评测机是linuxJijijie是恐怖的科学怪人,他有特殊的邪恶科技 Song'ci Crash。Dash在他的家庭农场里拥有 n块连续的拥有者黑色和金色混杂的 Da'shgua田地。Song'ci Crash攻击会使连续的一段 Da'shgua田
2015-08-16 16:19:48 778
原创 CodeVS第二次月赛 B
题目描述 Description切记不要加任何文件读写, 本次比赛暂不支持ifndef ONLINE_JUDGE。请互相转告。评测机是linux 是个富有诗意的男孩。在他居住的小镇上,有 n个村庄,由 n-1条道路连接着。这里的生活和谐而又宁静。有一天 tty偶然阅读到一篇杂志上的文章《阳光下的向日葵》,深受感动。特别是其中一位小女孩的故事让他记忆犹新。 于是他买来葵花籽,
2015-08-16 16:08:34 685
原创 CodeVS 第二次月赛 A
题目描述 Description切记不要加任何文件读写, 本次比赛暂不支持ifndef ONLINE_JUDGE。请互相转告。评测机是linuxtgopknight是著名的计算机天才,他十分喜欢研究二进制,所以他对0 和 1特别感兴趣。由于他很喜欢读宋词,在文学的熏陶下,他发现只有 , 组成的十进制数是十分有特点的,他定义为特别的数:. “1"是一个的特别的数。
2015-08-16 16:06:54 1010
原创 Codeforces 6D
题目大意:有n个敌人站成一行,你可以发射火球,使得被攻击的那个人扣a的血量,相邻的扣b点血量,血量严格小于0则死,问最少多少次干掉全部。看见这题数据这么小以为是状压dp,硬是想不出,结果发现DFS可过,自己写了个DFS结果光荣TLE,下面讲讲怎么剪枝。由于攻击的顺序不影响结果,换句话来说我们需要搜的是组合而不是排列,爆搜的话浪费了很多的时间。所以我们在拓展时只考虑拓展当前节点和下一个节点,
2015-08-15 21:38:46 718
原创 Codeforces 6C
题目大意:有两个人在吃巧克力,一个人从左往右吃,另一个人从右往左吃,如果左右同时吃到一块巧克力的话那么给左吃,给定每块巧克力吃掉的时间,求各自吃了多少块。我是这样做的:记一个前缀和s1,后缀和s2,然后从1到n+1(必须n+1,否则WA on test 2)枚举第一个人吃了多少块。对于第i块巧克力,如果s1[i-1]也可以二分答案啊,反正我觉得这种算法挺显然的。%%%__debug
2015-08-14 20:20:35 442
原创 Codeforces 6B
前面的题目确实很水啊。题目大意:给定一个字符串矩阵和一个字符C,求与含C的子字符串矩阵边相邻的字符种类数(大写拉丁字母),n,m我的思路是找出所给矩阵的左上右下,暴力枚举四条边相邻的元素,计数器++。不管多么水的题都要%%%__debug大神。保佑我noip不挂。#include#include#include#include#include#include#include
2015-08-14 19:53:07 648
原创 Codeforces 6A
题目大意:给定4根长度已知得木棍,问是否能组成三角形,或者能组成一个面积为0的三角形,或者不可能组成三角形。水,先对边进行排序。设ac,第二种情况a+b=c,第三种情况a+b不管是什么题,都要%%__debug大神。#include#include#include#includeint a[4],f1,f2,f3,f4;void judge(int x,int y,int z
2015-08-14 19:33:08 524
原创 Codeforces 5E
这一题看见我就想套单调数据结构什么的,然后各种做不出来,超时什么的,看了一下英文版的官方题解,体会了题解的妙处。先找到序列中最高的作为数组的第一个元素,把圈切成一条链,然后就可以开始做了。具体说来,设r[i]表示从i这个位置往右走第一个严格大于w[i]的位置,l[i]正相反,再记c[i]表示i到r[i]中与i相等的数的个数。从左到右扫一遍,每个w[i]可以贡献给答案c[i],还有两对(
2015-08-14 17:11:45 1011 1
原创 HDU 1520
又是一眼题撒,树形DP的干活。设dp[i][0]表示不邀请i的答案,dp[i][1]表示邀请i的答案。那么dp[i][0]+=max(dp[son[i]][0],dp[son[i][1]]);下属可来可不来。dp[i][1]+=(dp[son[i]][1]);下属必须不能来。%%%__debug大神。#include#include#include#include#in
2015-08-14 14:43:52 410
原创 NOIP2012提高组 借教室
这个题目是个一眼题啊,维护一下一段区间内教室数的最小值,线段树搞就可以了,lazy标记打一打,来一个订单先询问再区间减,codeVS上是可以过的,只不过嘛。%%__debug大神。我卡时间过的。#include#include#include#include#includeconst int MAXN=1e6,MAXNODE=MAXN*2+MAXN/10;int num[MAX
2015-08-14 13:24:15 959
原创 HDU 3466
这一个题,首先就应该想到01背包问题了,但是题目有一个限制,对于每一件商品i,只要你的钱数小于qi,你便不能购买这件商品。如果按照一般的思路dp的话,假如有一件商品价格5,要求6,有一件商品价格5,要求5,手上一共10块钱。你在处理商品1的时候,显然你手上有5元钱的状态是什么也不能买的,这样就导致答案最终只有商品2。如果我们按qi-pi升序排序,那么先处理商品2,显然不会出现问题啦,好开心。然
2015-08-14 13:15:03 472
原创 Codeforces 7E
我们考试的时候把题目稍微改了一下就是这个样子的题解啦,%zxo学姐。%__debug大神#include#include#include#include#include#includeusing namespace std;const int MAXN=105,MAXL=1006;int t,n,i,res[105];char f[MAXN][2][MAXL],p[MAX
2015-08-11 20:45:11 1196
原创 HDU 5357
这一题好神啊,看了半天题解还是不会做。设a[i]表示以i开头的合法括号序列的个数,b[i]表示以i结尾的合法括号序列的个数,a只考虑左括号,B反之。设up[i]表示包括i的极小匹配序列的左端且up[i]!=i;记match[i]表示i括号匹配的位置。那么ans[i]=ans[match[i]]=ans[up[i]]+a[i]*b[match[i]]; ab怎么求
2015-08-10 16:20:34 713 1
原创 Codeforces 5C
这道题我开先想了两个算法,结果全WA(受了4C还是4B的影响),无耻地看了题解。 先把所有右括号插入set,然后从右到左处理每一个左括号,二分查找set里面第一个位置大于它的,然后记录下来。然后就很简单了,扫一遍有连续标记的就出来啦。最后仍然伏地%__debug大神。#include#include#include#include#include#include#incl
2015-08-09 21:46:30 652
原创 Codeforces 5B
这道题水,但是就是看不懂题意,加上输入不太会。反正奇数的话,一次取下整,一次取上整,轮着来。 __debug大爷说我肯定做不出来,果然没做出来,%%%__debug#include#include#include#include#include#include#define sys system("pause")const int MAXN=1001;using nam
2015-08-08 20:58:07 726
原创 Codeforces 5A
这题真是一道水题啊,只是输入有点问题,你只能边调试边看你的ans,然后交上去即可AC,反正我用的是getLine。 不要管说话人是谁,谁进来或者谁出去,cnt维护聊天室内的人数,然后乘起来,累加即可。 伏地%__debug大神。。。#include#include#include#include#include#includeusing namespace std;
2015-08-08 20:14:12 494
原创 Codeforces 4D
CF这套题目确实水啊,这题把每个信封能套进去的信封n方扫一遍,然后连一条有向边。由于一个信封不可能直接或间接地套在自己身上,因此这个图是一个DAG(有向无环图)。设f(i)表示从节点0开始的最多的矩形嵌套,就变成了求DAG上最长路的水题。f(i)=max(f(i),f(v)|(i,v)属于E)E是边集。这坑爹题我交了两遍,第一次MLEon32,一看就是Vector爆了,考虑到只有5000个
2015-08-08 19:46:53 613
原创 NOIP 2013提高组 truck
今天上课讲的是分治与分块,讲到这道题时,觉得分治算法真的好無理(其实看不懂),所以就写了个标准算法。。。 这题两点之间的路径一定在最大生成树上(运用贪心的思想很容易脑补出来,因为如果不走最大生成树的话,路径中必有一条边小于最大生成树路径最小的一条边,那么路径的min值就不可能大于生成树路径的min值)。 所以我们用kruskal把最大生成树求出来,把边加进去建图,
2015-08-06 20:50:41 437
原创 UVALive 5031
#include#include#include#include#include#include#include #includeusing namespace std;//题目说每种询问20万,总共60万,开小了RE const int MAXN=20005,MAXM=60005,MAXQ=600001,MAXNODE=MAXQ*2;int val[MAXNODE],r[MAX
2015-08-06 10:48:56 522
原创 Codeforces 4C
这一题很水啊,一次A,C++直接开map判重和记录次数然后输出就行了,反正我开了两个map 592ms,此题给了5s,不知道毛子是什么心态。__debug大神看我如此开map一定要吐槽了。“呵,这常数太大了,看我写平衡树”,其实我是黑他的哈哈哈。。总之%%%_debug大神。#include#include#include#include#includeusing namespace
2015-08-04 20:59:07 590
原创 Codeforces 4B
此题我的做法是: 一、如果计划下界大于sum或者计划上界小于sum,直接no return; 二、将每天的答案设置为当天的上界; 三、现在应该调整每天的答案了,我这么做,将每天的差值升序排序,维护一个now,初始为上界和,然后遍历,将每天的ans变成下界,更新ans; 四、如果now 五、还原顺序输出。#include#includeusi
2015-08-04 20:35:50 522 1
原创 Codeforces 4A
大意是给出一个正整数n,能不能拆成两个偶数之和。“even number"才知道是偶数的意思,差点看不懂题了。。。水过。%%%__debug大神常数强迫症#includecstdio>int main(){ int n; scanf("%d",&n); for(int i=2;i { int b=n-i; if(b%2==
2015-08-04 20:05:25 405
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人