- 博客(84)
- 资源 (3)
- 收藏
- 关注
原创 自动生成ACM-ICPC模版的Latex版本
Github地址:ACM-ICPC-Code-Template-Latex首先你要有:你自己的ACM-ICPC模版库,Latex发行版软件。然后你可以:生成一个漂亮的pdf文件,里面是你的模版。效果图:template.pdf用法:Linux用户直接make就可以了(如果没有安装latex,安装一下texlive-full就okay);Windows用户编译运行main.cpp之后
2015-05-11 13:34:47
3178
原创 hdu 4578 Transformation [线段树 区间更新]
题意:一个长度为n的数列a,初始全为0,对这个数列进行m个操作,操作格式如下:op x y cop=1: a[i] += c, i=x,x+1,...,yop=2: a[i] *= c, i=x,x+1,...,yop=3: a[i] = c, i=x,x+1,...,yop=4: 输出sum=a[x]+a[x+1]+...+a[y]思路:考虑用线段树,对set,m
2014-06-23 15:24:42
534
原创 LightOJ 组合游戏 SG函数 SG定理 1199 1296 1315 1229 1401
SG函数与SG定理练手的题目。1. LightOJ 1199 - Partitioning Game题意:有n堆石子(1一次操作可以使一堆石子变成两堆数目不相等的石子,最后不能操作的算输,问先手胜还是后手胜。思路:n堆石子相互独立,所以可以应用SG定理,只需要算出一堆石子的SG函数。一堆石子(假设有x个)的后继状态可以枚举出来,分别是{1,x-1},{2,x-2},...,
2014-05-28 20:24:55
1483
原创 zoj 3772 Calculate the Function monthly 14th
题意:给一个数组A[1,2,...,n]和m个查询l,r对于每一个查询,F[l] = A[l]F[l+1] = A[l+1]F[x] = F[x-1] + A[x]*F[x-2], x >= l+2求F[r]。1 1 每一步骤均对 MOD = 10^9+7 取模方法一:复杂度O(n+m*log(MOD))看到递推公式,不难想到递推公式[F[n
2014-04-06 23:58:44
531
原创 soj 2013 weekly-5 暨校赛模拟III 7966-7974
本来不打算写这个的,因为当时一个人A了五道水题感到很凄凉,可是bbs上还没发解题报告= =我好懒= =比赛过后都懒得再想题目= =...7966当时看到Special Judge就没看了,结果- - ...7967题意:是说要把一堆给了宽度的书(50本)弄成宽度不递减的样子,一本书能被抽出放到最顶上当且仅当上面的书是宽度不递减的。问最少需要多少次操作才能完成。思路:首先
2013-04-18 09:39:31
1018
原创 codeforces Round #179 (Div. 2) 296A 296B 295A 295B 295C
296A 题意:给一个数列(N),问这个数列能不能通过有限次相邻数的交换使得数列任意两个相邻的数都不相同思路:数列的每一个排列都是可以达到的,所以,每个数出现次数大概都不多于一半就行。296B [组合数学]题意:定义两个长度相等的数字串s和t,如果在某一位i有s[i] > t[i],但是在另一位j有s[j] 思路:用排差法,假设,对于每一位,s[i] > t[i] 的可
2013-04-12 02:23:12
845
原创 codeforces 283A. Cows and Sequence [线段树-区间更新]
题意:对一个初始有1个元素0的 序列进行三种动态操作:1. 前k个元素都加X2. 在序列后增加一个元素X3. 删除序列最后一个元素要求每次操作后输出序列的平均值,保证每次操作后队列至少有1个元素,操作数少于20 0000次思路:注意第一种操作是对前k个元素都加X,而第三种操作是删除最后一个元素,那么不可能简单地模拟了。于是用线段树,这里用到区间更新。第一种操作,对1~k
2013-04-09 22:23:07
593
原创 soj 2013 weekly-4 暨校赛模拟II 7904-7911
首先说一下感受吧,适合组队做,但是一个队友因为要写实验报告没时间,于是我和另一个队友分开在宿舍做的,我负责偶数题。总体感觉代码量略大略大=。= 除了1001这道题目看都没看,剩下的感觉还是很有思路的,就是不对~1000题意:经典的24点问题,不过是问能得到的最长的连续数字起终点。思路:深搜出所有的结果,放入set中,再遍历一遍找出最长段。#include #include us
2013-04-08 16:34:30
681
1
原创 ural 1470 UFOs [树状数组]
题意:对(0,0,0)到(128,128,128)的三维空间进行三种操作:(1)在点(x,y,z)增加V(可能为负);(2)查询(x1,y1,z1)到(x2,y2,z2)的数量和;(3)退出三种操作是实时的。思路:可以向上一题一样采用线段树,但是需要三重线段树,编程复杂度有点高,于是简单的树状数组,查询的时候用差值。树状数组这里讲得比较清楚:click me#include
2013-04-08 15:58:40
710
原创 ural 1028 Stars [线段树]
题意:给n个星星的坐标(x,y),其中1 ≤ N ≤ 15000,0 ≤ X,Y ≤ 32000,定义星星的等级为在它的左下方的星星的数目(横纵坐标均可相等),要求输出等级为0~n-1的星星的数目思路:首先不可能暴力两重循环,自然是线段树。由于给的星星是按照纵坐标的升序排列的,只要一维地对x做处理就行了。线段树跟堆好像23333~#include #include struct
2013-04-07 18:04:20
687
原创 ural 1013 K-based Numbers. Version 3
题意:K-based Numbers. Version 3系列3~ 题意不多说,跟前两个系列一个意思。。。只不过要高精度了发现一个很叼的现象。。。ural上加system("pause")不影响测评啊。。。好像poj上也不影响。。。。。?还发现一个很叼的事情。。。Virtual Judge就是开了五个ID:Huang HanSheng,Zhang YiDe,。。。。啊。。。。好叼啊。。。。
2013-04-06 22:45:16
700
原创 ural 1011 Conductors
题意:(差点没看懂题目。。。囧)前面那个好像是说那句话有两种理解。。。一种是。。。售票员在公共汽车上裸奔?还有一种是。。。。?。。。(无关紧要- -)给精确到0.01的p和q,求最小的i,使得存在整数x,i*p 思路:(这道题我WA了好多次我会说麽。。。)我还是不晓得怎么弄精度的东西。。。希望高人指点啊。。。我的做法是。。。由于p和q是精确到0.01,我就把p和q都扩大到100倍。。。这样
2013-04-06 22:41:22
756
原创 ural 1008 Image Encoding
题意:给一幅图的两种编码方式,现在任意给出一种编码方式,求另一种编码方式思路:广搜。。。#include #include #include #include #include #include #include using namespace std;struct Point{ int x, y; Point() {} Point(int _x, int _y)
2013-04-06 22:36:47
581
原创 ural 1007 Code Words
题意:一个01信号串在经过某通道的时候会有如下几种可能的变化(1)不变(2)一个(仅一个)0变成1(3)在某个位置删掉一个(仅一个)符号(4)在某个位置增加一个(仅一个)符号并且原信号串必须满足 符号为1的位置和 模 (len+1) 为 0。例如1010,符号为1的位置有1和3,加起来等于4,模len+1=5的结果不是0,所以不可能是原信号串。现在给原信号串的长度和
2013-04-06 22:35:08
878
原创 ural 1005 Stone Pile
题意:给n(n 思路:把这20个石头看成一个集合,张成子集即可,假设20个石头的重量和sum,子集的所有石头重量和为ts,那么重量差就是abs(sum-2*ts)。#include int n, a[25], sum, ans;int main(){ while (scanf("%d",&n) != EOF) { sum = 0; ans = 0x7fffffff;
2013-04-06 22:30:17
718
原创 ural 1004 Sightseeing Trip
题意:给一个无环边可以有重边的无向带权图,求最小环的顶点序列思路1:对每一条边 e = (v, w) 而言,在原图中删去这条边e,再做从v到w的最短路,|e| + dijkstra(v,w) 就是这个环的的长度,复杂度是O(e*O(dijkstra))思路2:用floyd求最小环,复杂度O(n^3),不过记录顶点序列的时候很尴尬啊- -...#include using namesp
2013-04-06 22:27:05
1136
原创 poj 1833 排列
题意:求接下来的第k个排列思路:next_permutation,书上有实现方法#include #include using namespace std;int t, n, q, a[1040];int main(){ scanf("%d", &t); while (t --) { scanf("%d%d", &n, &q); for (int i = 0; i
2013-04-02 23:37:48
516
原创 poj 2084 Game of Connections
题意:2*n个点(一个圆周上的)连线,要求每个点必须与且仅与一个点相连,问有多少种方法。思路:对于2*n个点,任意选择其中一个点,这个点能和与它相距偶数个点的点相连,而相连的这条线会把整个图形分成两个子问题,即得到递推公式:f[n] = f[0]*f[n-1] + f[1]*f[n-2] + f[2]*f[n-3] + ... + f[n-1]*f[0]。注意高精度。据说这是卡
2013-04-02 23:29:34
1302
原创 ural 1215 Exactness of Projectile Hit
题意:按照逆时针顶点的顺序给一个凸多边形,再给一个点O,问以点O为圆心,至少以多少为直径画圆才能使这个圆和多边形有至少一个点的交集。 思路:如果点在多边形内,答案为0否则,求点到每一段边的距离(点到线段的距离)取最小值即可。点到线段距离分两种情况:点到线段所在直线的垂线与线段无交点,有交点题目用到的计算几何知识:(1)点在多边形内的判定(2)向量点积判断两射线夹角是
2013-03-30 03:05:41
576
原创 soj 1459. The Dragon of Loowater
大水题:给n条龙和m个骑士的身高。如果一个骑士比一条龙高,那么这个骑士就能杀死这条龙(不能再杀其他的龙),并且得消耗这个骑士这么高的价钱。问能否杀掉所有的龙,如果有的话,最少消耗多少钱。思路:如题。。排序。。。遍历。。#include #include using namespace std;#define N 20005int n, m, i, j, ans;int d
2013-03-30 00:39:54
549
原创 soj 1569. Encrypted SMS
大水题:给一个字符串加密的方法:老式手机键盘应该按的次数 + 当前是第几个字符,老式手机键盘按那么多次后得到的字母即加密后的字母。如对ABCD加密,A应该是1按1次,但是是第1个字符,所以加密成A按2次的样子,变成B,依次加密为BACE。现在给出加密后的字符串求加密前的样子。注意大小写#include using namespace std;string s;string
2013-03-30 00:24:39
998
原创 poj 2187 Beauty Contest
题意:给n(50000)个点,求这n个点间的最长距离。思路:最短距离用分治,最长距离用凸包+旋转卡壳但是。。。卡壳暂时不会,先把凸包挂上来,计算几何啊我干!#include #include using namespace std;#define N 50000struct Point{ int x, y; void input() { scanf("%d%d",
2013-03-29 21:40:49
538
原创 soj 2013 weekly-3 暨校赛模拟I 7763-7770
7763题意:有m份彩票,n个人,已知第i份彩票的奖金是 2^i 元,已知每个人买的不同彩票的数量,已知每张彩票中奖的概率是相等的,问对于每个人来说,得到的奖金比别的所有人的奖金都多的概率。思路:看起来很吓人要算这样奇葩的概率。。。但是2^m > 2^(m-1) + ... + 2^1。。。所以最后的概率就是该人买的第m份彩票中奖的概率。。。#include #define N
2013-03-28 11:31:02
857
1
原创 soj 1488. 矩阵取数游戏
题意太清楚不过了。思路:如果不考虑高精度的问题就是一个很简单的逆向分析的问题,之前有过这样的一个题目的分析。就是先确定最后一个数,再扩展到两个,三个,...,m个数。f[X][Y]记录最后取a[X]到a[Y]时能得到的最大的数。递推方程就是:f[i][j] = max(f[i][j-1] + a[j]*pow, f[i+1][j] + a[i]*pow),其中pow是当时所需要乘的数。
2013-03-27 17:14:43
654
原创 soj 1939. 煎饼堆
题意:有一堆煎饼,没个煎饼有直径,你能从最上面的到某个位置将这些煎饼倒转过来,问经过怎样的操作能使这些煎饼是按照直径从下到上递减的顺序排列。题目中的例子给的很详细,要求输出这样的操作序列。思路:每次都将最大的翻转到最底下,再递归求解问题。#include #include using namespace std;int t, n, v[35], maxn, maxp;void re
2013-03-21 11:24:19
980
原创 soj 2382. Flowers Flourish from France
题意:问给出的字符串们的首字母是否相同(英文韵律)思路:getline,stringstream。。。#include #include using namespace std;string line, word;char head;int flag;int main(){ while (true) { getline(cin, line); if (line[
2013-03-21 10:45:03
869
原创 soj 2369. Nim-B Sum
题意:给出进制B,两个十进制数X,Y,求X、Y转化成B进制的数后进行无进位加法后得到的数再转成十进制的结果思路:。。。#includeint t,C,b,x,y,z,l,i,p,a[30];int main(){ scanf("%d",&t); while(t--){ scanf("%d%d%d%d",&C,&b,&x,&y); for(i=0;i<30;a[i++]=0)
2013-03-21 10:43:16
730
原创 soj 2503 最长字符串
题意:给出字符A的个数,字符B的个数,字符A的最大连续数,字符B的最大连续数,构造一个最长的字符串,使字符数最多且满足上述条件,输出最大长度思路:显然A、B交替时达到最大#include int ca, cb, ma, mb;#define min(a,b) ((a)<(b)?(a):(b))#define max(a,b) ((a)>(b)?(a):(b))int main()
2013-03-21 10:40:32
961
原创 soj 2013 weekly-2 7574-7675 7691-7593
7674题意:n个人(0~n-1)坐成一圈,有p个石头,从第0个人开始,如果还有石头,那么他从中取出一个,如果没有石头,那么他把自己所有的石头贡献出来,接着轮到下一个,问最后p个石头会到谁那去。思路:简单模拟即可。#include #include int n, p, arr[55], curP, curN;int main(){ while (true) { sc
2013-03-18 22:57:16
641
1
原创 soj 1890. Balls Again
题意:有N个球,M个瓶子,每个球有分数,每个瓶子有容球上限和容分数上限,这里的容分数上线是其中的每个球都不达到这个上限就行。问最多能容纳多少个球,这些球加起来分数多少。思路:贪心,分数高的球往分数上限高的瓶子里面扔即可。#include #include using namespace std;struct Bottle { int c, q;} b[205];bool cmp
2013-03-16 12:03:40
534
原创 soj 1278. Soldiers
题意:有一排士兵(题目描述错误,给的N行其实是一排),有面向左边的'',定义将面对面的'>'为一次操作,问最少经过多少次操作能使这排士兵没有面对面的情况。思路:首先一次操作并不改变面向左边和面向右边的士兵的数量,其次要达到没有面对面的情况最后结果只可能是">.....>>>>",这样我们就能得到最终状态,剩下的就是算达到最终状态的步骤数。既然向左的士兵都在左边,那么当向左的士兵的左边有向右的士
2013-03-16 11:49:17
680
原创 soj 1350. Piggy banks
题意:有N个储蓄罐,每个储蓄罐都需要一个钥匙打开,而这把钥匙在其他的储蓄罐里面,问至少需要打破多少储蓄罐才能打开所有储蓄罐。思路:对于一个储蓄罐,这样想,如果打开这个储蓄罐X,那么打破藏有这个储蓄罐的钥匙的储蓄罐Y即可,如果Y已经被打破,那么就不需要打破额外的储蓄罐,如果类推下去刚好构成了一个环X>>Y>>...>>X,那么这个环只要并且必须要打破一个储蓄罐才能打开(注意每个储蓄罐只有
2013-03-13 13:07:02
635
原创 soj 2013 weekly-1 7530-7534
7530题意:填3*3的格子,让给的六个单词在横竖都有。思路:(AC)深搜生成 P(6,3)的排列,带入检验即可。#include #include using namespace std;int arr[6], vis[6], have[6];string given[6], atry[3], tmp;bool flag;void dfs(int cur){
2013-03-10 13:23:47
915
1
原创 soj 1893. Sell Ticket
题意:公园售票,票价五元,现在有n个有十元的人和n个有五元的人,问有多少种排列顺序让售票员在售票的时候不用用到公园内部的零钱。思路:动态规划,sum[i][j]表示前i个人,和为j的排列种数。#include #include long long sum[70][35];void calc(){ memset(sum, 0, sizeof(sum)); sum[0][0
2013-02-04 10:14:41
436
原创 POJ 1899 Farmer Bill's Problem
题意:给一个矩形和在矩形内的N个圆,用若干个没有任何公共部分(甚至公共点)的矩形(边平行于大矩形的边)包含住这N个圆。要是这些用于包裹的矩形的面积最小,求剩下的面积。思路:找到有公共部分的矩形就合并,直到不能合并为止。错了好多遍。。。不知道为什么。。。code:#include #include using namespace std;#define N 105int
2013-01-20 11:13:15
640
原创 POJ 1896 Code Formatting
题意:给一份代码,让它的格式标准化。思路:模拟。code:#include #include #include using namespace std;string data;int level = 1, len;bool flag;int main(){ while (getchar() != '{') ; printf("{\n "); fla
2013-01-20 11:08:11
470
原创 POJ 1894 Alternative Scale of Notation
给一个Base,一个大整数(100位),求这个大整数的Base进制的表示,其中,表示中不能出现0,但是可以出现Base。如,60 = 1 * 3^3 + 3 * 3^2 + 1 * 3^1 + 3 * 3^0,所以,60(3) = 1313。思路:依然是,让大整数不断地对Base取模得到低位,再对Base做整数除法,不一样的是如果得到的模是0,那么低位会是Base,而不是0。涉及到
2013-01-20 11:05:28
526
ACM ICPC Latex 自动生成模版的模版
2015-05-11
GreenDao使用例子-Android工程中如何便捷使用
2014-07-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人