自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(108)
  • 收藏
  • 关注

原创 hdu 3682

二分 + 状压dpdp[i][j]表示终点为i,fa

2014-08-27 21:12:24 646

原创 hdu 3689

kmp外加dpdp[i][j]表示长度为i,末尾的chua

2014-08-27 21:10:00 589

原创 hdu4973

线段树,每个点记录该点出现的次数,对于l,r的更新,找到l所对应的shu

2014-08-21 21:25:04 574

原创 hdu 4971

经典闭权和问题,正权的点由yuandian

2014-08-21 21:22:59 654

原创 ural 1682

从1写到无穷,每写1个数可以和前面的数连边,连边有两个条件a + b ^ 2 == 0 mod k ||   b + a ^ 2 == 0 mod ks

2014-08-12 20:41:56 571

原创 hdu 4941

水题竟然没有很快A出来= =

2014-08-12 18:52:26 485

原创 hdu 4937

想到一个数一定是由a1 * x ^ 0 + a2 * x ^ 1 + ... an * x ^ n

2014-08-12 18:49:50 485

原创 ural 1701

已知一些关系,判断接下来n个陈述是否成立,采用并查集。注意根s

2014-08-11 20:33:51 493

原创 ural 1772

有n个跑道,一开始在s跑道,有k个障碍物,问切换最少的跑道数。

2014-08-11 16:11:26 611

原创 ural 1890

每次更新树上单点或者整个子树,最后查询

2014-08-11 11:27:15 686

原创 ural 1807

给定一个数,分解成k个数之和,使得这K个数

2014-08-10 00:17:26 530

原创 ural 1803

求Fibonacci的第n项K进制表示后各个位的和。采用压缩的方式,

2014-08-10 00:13:15 501

原创 hdu 4869

维护最大能翻多少张,最少能翻多少张,然后从最大到最小,奇偶相同的也可以翻到。维护,然后求

2014-08-08 16:40:12 472

原创 HDU 4923

去掉前导0和后导1之后切分成1111100,11100,10连续的一段,每段算一个平均值hebing

2014-08-07 23:20:12 573

原创 HDU 4930

直接模拟,先看能不能一手出完,不能一手出wan

2014-08-07 23:19:44 501

原创 poj1182和ural1003

poj1182并查集的运用,集合之间的关系表示,增加一个字段来表示和跟的关系r[x]如果r[x] == 0表示和根同类,r[x] == 1表示根吃x,r[x] == 2表示x吃根。那么现在如果x,y的关系为r[y],y,z的关系为r[z],那么x和z的关系则是(r[y] + r[z]) % 3。不妨画个图看看。现在读入一个陈述:1.如果x,y在同一个集合里面:1. 1 x

2014-06-28 00:18:21 540

原创 第4章:文件和目录

stat,fstat,lstat分别获取不同文件的stat结构信息文件类型有7种:(1)普通文件(2)目录文件(3)块设备(4)字符设备(5)Socket(6)FIFO(7)符号链接设置用户ID和设置组ID通常一个进程的有效用户ID和有效用户ID为实际用户ID和实际组ID,但是如果一个进程设置了设置用户ID,那么有效用户ID为文件所有者ID,有效组ID为文件组ID

2014-04-22 11:27:52 582

原创 codeforces round #240_div1

A:a1,a2   a3,a4,   a5,a6 ... an-1, an两两公约数之和为k,因为

2014-04-07 20:26:15 596

原创 第三章:文件I/O

大多数文件I/O用到的函数:open(), close(), create(), lseek(),

2014-04-07 20:19:07 660

原创 codeforces round #230

codeforces_div230A:半径为n的圆,园内有一些整点,和它距离为1的点就连接起来,现在去掉一些点,使得圆内的点和圆外的点没有连接。策略是选择圆内的点:圆内选择肯定是靠近边界的点,如何选择?四个端点肯定是要选择的。(n, 0) (0, n) (0, -n), (-n, 0)四个点。然后圆内的点,因为象限对称,只要考虑第一象限,如果横坐标为1,可以算出一个圆内的纵坐标

2014-02-21 10:25:01 582

原创 codeforces_374c

在一个二维表中搜特定序列的串。采用记忆化的搜索。dp[x][y]表示x,y能达到的最大深度,如果每次搜的时候能搜到原来的点,那么就是无穷的。如果dp[x][y]的深度大于4,说明是存在特定串的。AC代码:#include #include #include using namespace std;#define max(a,b) ((a) > (b)) ? (a) : (b

2013-12-19 20:09:40 489

原创 编译器开发(一)

好吧。在学习完编译原理之后终于自己做了一个编译器的前端。当然只是一个很简单的前端。会在接下来的日子里面去不断完善这个编译器前端,以后再写出一个后端出来。前端分为词法分析,语法分析和语义分析。语法的结构如下:程序>::= main()语句块>语句块>::= ‘{‘语句串>’}’语句串>::=语句>{;语句>};语句>::=赋值语句>|条件语句>|循环语句>赋值

2013-12-18 23:00:18 889 1

原创 codeforce round #217

A题:rook的话如果同行同列就一次,否则两次。bishop,首先如果一个在白色位置,另外一个在黑色位置是不可达的。否则再一条对角线上就一次,其余位置两次。king,bfs()一次求出答案。AC代码:#include #include const int MAX_NUMBER = 1007;struct Point { int x, y, steps;

2013-12-07 20:59:42 508

原创 codeforces 367C

有n个位置,有m个不同的数,选数的代价为mi,选出k个数,填在n个位置中,使得所有k个数中任意选两个都是相邻的。类似于相邻位置满足的关系可以用一条边来表示。选k个数,因为任意两个都要相邻,填在n个位置后,相当于所有边都要经过一次,那么就是形成一个欧拉路,且任意两个位置都要相邻,至少要有k * (k - 1) / 2条边。如果k是奇数的话,那么k * (k - 1) / 2条边足以形成一

2013-12-05 20:06:56 965

原创 usaco_3.2.2

求满足条件,且排列序为I的串。有两种方式求,一是求出不满足条件的串,而所有串易求,不满足的也容易求,把不满足条件的串再I序前面的求出来,求出I的正常序。2是直接统计满足条件按的串。此题应为2的做法,因为不满足条件的串的求法和满足条件的串求法对称,也比较难求。用dp[i][j]表示长度为i,1的个数不超过j的满足条件的串的个数。那么dp[i][j] = dp[i - 1][j]

2013-12-02 16:36:41 555

原创 poj1659

havel可图定理。如果有一个图的度为d1,d2...dn。那么依次将图度从大到小排序,先满足最大小的和次大点的连接。每连接一次扔掉最大点,然后继续排序,如果排序过程中没有点的度数为负数,说明是可图的,否则不可图AC代码:#include #include #include using namespace std;const int MAX_NUMBER = 2

2013-11-05 19:07:39 1367

原创 codeforces round 209

A:水直接观察得到只有两种情况,要么2次,要么4次,如果边界上有1则为2次,否则为4次AC代码:#include #include const int MAX_NUMBER = 55;int maps[MAX_NUMBER][MAX_NUMBER];int n, m;int main() { scanf("%d%d", &n, &m); int

2013-11-05 11:37:14 530

原创 hdu3415

求最大的连续不超过k的子序列的和。用单调队列维护。先求出s[1..i]的和,将前k个添加到n的结尾就相当于有循环和了。那么对于某个sj,他的最大的序列和为s[j] - s[i],其中  j - k - 1 那么用单调队列去维护i,可以在O(1)的时间去求出s[i]。今后有任何优化问题需要减去前面最小或者加上最大和的都可以使用单调队列去维护。AC代码:#include

2013-11-05 11:22:31 1089

原创 usaco_3.1.6

简单dp = =,没想出来。。一开始想到用dp[i][j] = 1来表示可以用j张邮票来找i钱。。转移方程为dp[i][j] = 1 if dp[i - coin[k]][j - 1]  = 1。后面发现内存太大存不下。后面发现dp[i][j]只和dp[i - coin[k][j - 1]有关,于是准备用滚动数组去做。做不出来= =。。看了题解才知道可以用另外一种表示方法dp[i]表示

2013-10-27 11:02:12 508

原创 codeforces_351b

好吧。。比赛的时候没有做出来。主要是只考虑了所有整数都取向下的情景,没有考虑到所有整数都往上取。首先区分出整数和小数,整数的差是没有影响的,主要在于小数的差。先把所有小数的和求出来。因为取上为n个,取下为n个。对于所有小数来说哪一个小数取上和哪一个小数取下是没有区别的。假设0.3 0.5 0.7 0.8 ...假设里面有2个可以取上,2个可以取下。无论是哪2个取上取下最后一定是0

2013-10-05 23:54:31 749

原创 codeforces_350b

求到宾馆的最长路。开始想法是添加超级起点和终点,起点向所有山连接一条权为0的边,所有宾馆向终点连接一条权为1的边。然后只有出度为1的点才可以对后面进行更新(超级起点不算),做一遍spfa最长路,然后输出路径。不知道为什么会TLE = =然后重新想可能枚举所有起点,然后求当前起点的最长路。发现好麻烦。因为一个点有多条出的路径。dfs时间复杂度也太高。没有想到反过来做。。枚举所有终

2013-10-02 15:37:38 1279

原创 usaco_1.4.3

做的时候只知道把表打出来,不知道怎么去找等差数列。做法直接枚举公差和首项即可。AC代码:/*ID: 123PROG: ariprogLANG: C++*/#include #include const int MAX_NUMBER = 250 * 250 * 2 + 3;bool vis[MAX_NUMBER];int n, m;void ini

2013-09-28 20:38:19 611

原创 codeforces_346a

从一个集合里面选两个数,x,y 把|x - y|的绝对值加进去,如果|x-y|的绝对值不能被加进去的话那个人就输了。找到所有数的最大公约数,设为k那么所有数就可以表示成为a1 * k,a2 * k,a3 * k....an * k.(假设an最大)所以加进去的数一定是m * k (1 所以看1,an有多少个数,如果有奇数个就一定是Alice赢,否则BobAC代码:#in

2013-09-21 15:18:59 619

原创 uva11069

找一个1-n的子集,满足两个条件(1)任何数不能相差1(2)向其中插入不存在其中的1-n的数一定会存在一个数和其相差1.用递归来统计。f[i]表明选用了1-i个数中最后一个数。那么f[i] = f[i - 3] + f[i - 2],因为选了i一定就要么选i - 2,要么选i - 3最终答案是f[n] + f[n - 1]AC代码:#include #

2013-09-18 14:38:31 701

原创 codeforces_330c

木有做出来,发现是在求组合数模的时候求错了。今后涉及取模运算除法的应该把其逆求出来,而不应该直接拿出来除之后再去求逆。AC代码:#include #include #include using namespace std;const int MAX_NUMBER = 1000007;const long long MOD_NUMBER = 1000000007; lo

2013-09-14 19:31:17 591

原创 ural 1860

求f[i]的不同因子数。f[i] = i * f[i - 1] * f[i - 2],f[1] = 1, f[0] = 1类似斐波拉契数要想到斐波拉契数列。f[2] = 2f[3] = 2 * 3f[4] = 2 * 2 * 3 * 4f[5] = 2 * 2 * 2 * 3 * 3 * 4 * 5所以f[i]中k的个数和斐波拉契数有关。个数为fi[n - k],因为n的个

2013-08-23 22:48:21 658

原创 sgu491

求满足ax + by = n,(x >= 1, y >= 1)的a,b有多少个。比赛时候没有做出来,是因为想到只知道n,要求a,b,x,y枚举的话4个铁定超时如这类找满足条件个数的,如果不能暴力枚举的话都要尽量去转化成为求因子个数。转化成n - ax = by,枚举a,x,那么b的个数就相当于n - ax中的因子个数,依次检查每个因子,要比a大,然后去重统计。#include #

2013-08-15 22:46:02 498

原创 uva12585

好吧。。比赛的时候竟然没做出来,就是一个精度控制问题,一直老想怎么去解方程。因为精度为1e-6,所以当某局进行概率非常小的时候直接可看做0返回就行了,而不要继续进行计算下去。设进行到某局的概率为p,进行到该局已经进行到的局数为r如果p非常小的话,接下来要进行的局数就是0.否则:如果a >b,那么当前局赢的概率就为p * 0.5,然后再加上下一局赢的概率dfs(a - b, 2 *

2013-08-11 21:43:36 611

原创 codeforces 336c

一开始想错了。想到要被2^k整除,那么找到最大的lowbit(x)即可。但是也有可能实际答案比lowbit还要大。所以应该直接枚举k,然后看是否有和2^k - 1一系列与之后为0的,如果有的话说明k满足,k从大到小枚举即可。AC代码:#include #include const int MAX_NUMBER = 100006;int value[MAX_NUMBE

2013-08-10 23:27:23 712

原创 hdu4196

从1-n里面选数,数的乘积要求是完全平方,求这个乘积的最大值,要求mod 1000000007对n!进行素因子分解,如果素因子是奇数的话,要变成偶数,也就是n!要除以该素因子。否则的话就保留该素因子。首先筛素数,然后对n!进行素因子计算。把要除的积保存在一个数里面。最后求n! / 该数,也就是对该数关于mod_number的逆,mod_number = 100000007为素数,就相当

2013-08-08 21:00:11 602

空空如也

空空如也

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

TA关注的人

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