![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM
文章平均质量分 52
ThunderSei
这个作者很懒,什么都没留下…
展开
-
POJ3468 顺便贴个学姐的线段树版
#include#include#include#includeusing namespace std;#define LL long long#define MAXN 101010LL sum[MAXN<<2],add[MAXN<<2],a[MAXN<<2];void pushup(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1];}原创 2013-11-01 23:36:20 · 460 阅读 · 0 评论 -
难道2分真的要卡死我么 ZOJ3702
今天做浙大的校赛的时候见到的题目,被队友找规律秒掉了,但是听大牛说他是2分搞过去的。于是我也再用2分写一发。但是还是WA了好久,究其原因并不是2分的错,而是我输出格式少了换行。如果要用半开半闭区间的二分,就一直用吧。这道题是个二分查找,当做查上界或者查下界都可以做,毕竟相等的只有一个。最后的正确答案就是你的闭区间那部分。就有包括等号的那部分。#include#includet原创 2013-11-07 01:32:56 · 729 阅读 · 0 评论 -
POJ1185 状态压缩DP 又是一道有意义的水题
之前做过POJ3285,那道题下一行的状态只和上一行有关,所以每一行只需要记录一行的状态。这一个炮兵阵地,炮可以打两行,所以不仅仅与上一行有关,还与上上一行有关,所以每一行的状态都由上两行状态推出,因为要记录两个状态,所以用了一个三维的dp,dp[i][j][k],表示第i行状态为state[k],第i-1行状态为state[j]时前I行最多有几个炮兵。写的时候一开始在初始化的时候没有原创 2013-11-07 10:42:22 · 660 阅读 · 0 评论 -
这到底是个什么游戏。。
ACM并不是需要拿方法去匹配问题。 而是,出题人拿问题来匹配你应该掌握的方法。所以,枚举一下自己应该掌握的方法吧。 AC无难事,只怕有心人。 当然,大神可以随意。。。原创 2013-11-21 22:04:00 · 644 阅读 · 0 评论 -
LIGHTOJ 1056
#include#includeint camp[2000];int rt[500];int n,k;int count;bool C(int x){ memset(rt,0,sizeof(rt)); int sum=0; count=0; for(int i=0;i<n;i++) { if(camp[i]>x)//this is important retur原创 2013-11-08 00:04:38 · 601 阅读 · 0 评论 -
lightoj 1043 浮点数2分
2分ad的可能值,本来推公式也可以,但是感觉有点麻烦。2分50次就够了,2分20次反正挂了#include#includeint main(){ double ab,bc,ac; double ad,de,ae; double k; int cas; scanf("%d",&cas); for(int T=1;T<=cas;T+原创 2013-11-07 22:03:32 · 839 阅读 · 0 评论 -
lightOJ 1002 最小瓶颈树 ..
第一次要把最小生成树保存下来。还是对算法理解有问题。一开始的时候要把起始点设置为1,并把所有的相连边加入队列中。自己写edge的时候不喜欢记录来源,所以用了个Pair,实在捉鸡,可以直接写成带有from的struct,这样代码复杂度会减少很多。#include#include#include#include#include#includeusing namespace st原创 2013-11-08 17:24:55 · 609 阅读 · 0 评论 -
lightoj 1042 练一练位操作
要把数字变成1的个数相同,比这个数大的最少的一个数我的想法就是先找到第一个01这样的序列,把1向前移动一位,然后再把位置靠前的1移动到后面的0上。位操作:&= 可以把某位置0 通过1110111这样子的数字|= 可以把某位置1 通过0001000这样的数字^ 异或,与11111异或可以取反 另外两个相同的数与另一个数异或得到另一个数 5^2^5=2~ 按位取反原创 2013-11-08 20:24:01 · 823 阅读 · 0 评论 -
lightoj 1045 有关进制的二三事
做完这道小题,对进制的理解加深了一点。进制就是把一堆1用log级别表示出来的方法。log的底数就是进制。不同进制(除了1进制之外)在表示的难度方面没有质的变化。所谓10进制并没有什么优势。2进制一样可以log级别表示数。总共有几位就是log(n)进制转换看这篇文章就好了http://www.cnblogs.com/phinecos/archive/2009/09/11/15原创 2013-11-08 22:39:53 · 646 阅读 · 0 评论 -
CF 362C 冒泡排序 交换哪两个数逆序数减少最多
交换两个数,求使得排列的逆序数最多减少多少,以及有多少个这样的数对数据范围有5000,我的算法是n^2logn因为有n^2个询问,所以最好O(1)的回答,所以需要先预处理一下。怎样快速回答交换两个数之后逆序数的改变呢?这就要快速的算出i和j之间有多少个比num[i]小的数,有多少个比num[j]小的数,比它们大的数一减就OK。设 si为i到j中比i小的数 bi为比i大的数 sj原创 2013-11-21 20:27:27 · 1747 阅读 · 1 评论 -
POJ 2104 归并树 OR 划分树
以前做的线段树都是存了一个值,而现在这颗树存的是一个数组。保存从[ l , r )这个左闭右开区间的有序值。建树的方法就是归并排序的过程,因此叫做归并树。如何查询某区间内的第K大值呢?用到的一个技巧是2分答案。我觉得2分是个很好用又很有技巧性的东西。首先是二分区间的选择,这里选择是右闭左开,因为当符合条件的优先更新右边。对于第K大的数,不大于第K大的数的数量一定要大于等于K,所原创 2013-11-05 14:47:50 · 621 阅读 · 0 评论 -
POJ 3254 简单状态压缩DP
现在对简单题的态度也变了,觉得简单题未必不能帮助你提高。简单题往往更裸,更能单独体现某一个知识点或者技巧。而复杂题目往往是几种技巧的组合使用。这是一道入门的状态压缩DP。在一个棋盘上选择一些不相邻的点(上下左右),求这些点的总数。有一些点不可选。首先把每行可能的状态保存下来。存在state里面,因为限制了不相邻,所以这样一轮筛选之后单行的状态数就已经少了很多。然后对每一行i 枚举所原创 2013-11-06 16:59:20 · 537 阅读 · 0 评论 -
长沙赛区结束
这次长沙打完,真的不想多回忆过去,实在是把呆逼和逗比发挥到极致的一场比赛。3次看错题目,导致多WA了近10发,还导致一题到最后五分钟才明白题意,交了一发没有优化的T了。如果提前十分钟能多看看题目的话,我想结果不会是这样。真是给自己涨教训啊。这次比赛从热身到正赛,所有题目都是我自己做出的,自己曾经对队友期待太高了,上一届的人走后,不知道学校里还有没有人在搞ACM。没有了学长们,我也不想明年被原创 2013-11-18 10:26:43 · 1185 阅读 · 0 评论 -
ACMer的博客 没事看看 好处很多
ACM大牛BLOG(转)2010-08-26 Twilightgod CUST http://blog.csdn.net/twilightgodAekdycoin FZU http://hi.baidu.com/aekdycoinForeverlin HNU http://hi.baidu.com/forverlin1204/blogMatrix67 PKU http://www.转载 2013-11-18 00:10:02 · 445 阅读 · 0 评论 -
ACM竞赛中用到的取摸运算
话说对这个取摸运算还是很陌生的,唯一的接触是高二的时候去参加物理竞赛的培训,完了之后旁边数学竞赛的培训还没有结束,然后混进去听了一节数学竞赛的课。那节课就是有关于数论的。ACM中数字一大就经常模这个 10^9+7这个质数,但是什么时候可以模什么时候不可以取摸让我担惊受怕了很久。今天早上上OOAD的时候无聊突然就明白了。取摸的三个运算式子1 反身性 a≡a (mod m)原创 2013-11-04 15:04:35 · 871 阅读 · 0 评论 -
ACM新手入门
第一章 新手入门1.ACM国际大学生程序设计竞赛简介1)背景与历史1970年在美国TexasA&M大学举办了首次区域竞赛,从而拉开了国际大学生程序设计竞赛的序幕。1977年,该项竞赛被分为两个级别:区域赛和总决赛,这便是现代ACM竞赛的开始。在亚洲、美国、欧洲、太平洋地区均设有区域赛点。1995至1996年,来自世界各地的一千多支s代表队参加了ACM区域竞赛。ACM大学生程转载 2013-11-05 10:42:28 · 876 阅读 · 0 评论 -
poj2104 分桶法与平方分割 还有一些其他的感悟
其实这是一道划分树的题目,用这种方法可以说是纯粹搞过去的。不过还是从这里面学到了好多。 首先当然是搞这道题目的方法,分桶法与平方分割,分统法把元素每n^1/2分成一桶,这样可以把区间操作降低到O(n^1/2),比如分筒法的RMQ。 然后是关于程序中区间的理解,程序中用到的区间最好是半开半闭区间,STL 和 JAVA的类库都是这样实现的,这样有很多优点,其中一个优点就是区间的长度是原创 2013-11-04 23:56:38 · 1089 阅读 · 1 评论 -
POJ2352 简单树状数组 附加输入挂
这道题本是很简单的一道题目,题意是统计一个平面坐标系中某点左下方有多少个点,做的时候却卡了三个地方。第一个:统计什么?树状数组的作用就是统计[x,y]这个区间的和,至于这个区间里面是什么,就因题而异了。这里数星星,要找到有多少个星星x和y都小于待求的那个点,y是从小到大排的,所以,只需要统计前面到底有多少个x是比现在这个小的。第二个:被统计值的定义域树状数组的大小和被统计值得取原创 2013-11-06 02:11:30 · 580 阅读 · 0 评论 -
线段树和树状数组各过一次POJ2182
也是从后往前统计有几个空格#include#includeint dat[40000];int n;void PushUp(int rt){ dat[rt]=dat[rt*2]+dat[rt*2+1];}void build(int rt,int l,int r){ //printf("rt:%d l:%d r:%d\n",rt,l,r); if(r-l==1原创 2013-11-06 09:18:25 · 621 阅读 · 0 评论 -
所以说,你是个会写2分的人么?
关于2分,实在是自己的痛处,上次区域赛热身的时候把2分写挂了,被黑了好几个月了= =,幸亏我有强大的心脏。。2分的用处不仅仅在于查找,还有很多用处,比如2分答案,查询满足条件的最大值,或者查询满足条件的最小值,又或者是平均值。我写的2分是这个样子的(取自 线段树和树状数组各过一次POJ2182)因为我要找的是满足空格数符合条件的最小的一个值,也就是找下界,所以选择更新一个左开右闭的原创 2013-11-06 11:14:27 · 609 阅读 · 0 评论 -
lightoj 1202
#include#includeusing namespace std;int main(){int t,tt=1;scanf("%d",&t);while(t--){int x,y,x1,y1;scanf("%d%d%d%d",&x,&y,&x1,&y1);printf("Case %d: ",tt++);int tmp1,tmp2;tmp1=x1-x;if(tm原创 2013-11-23 00:23:43 · 659 阅读 · 0 评论 -
LightOJ 1136 Division by 3
#includeusing namespace std;int main(){ int A, B, T; int caseNo = 0; cin >> T; while(T--){ int count = 0; cin >> A >> B; count = (B - A + 1) / 3 * 2; if((B - A + 1) / 3 * 3 == B - A -原创 2013-11-23 00:20:56 · 807 阅读 · 0 评论 -
lightoj 1003 强联通模板题
#include#include#include#include#include#include#includeusing namespace std;map mp;vector topo;vector G[12000];vector rG[12000];int cmp[20000];int num_kind=0;int used[20000];void dfs(原创 2013-11-10 21:34:33 · 726 阅读 · 0 评论 -
lightoj 1168 tarjan 强联通分量加缩点 加各种题目坑
#include#include#include#include#includeusing namespace std;vector G[2000];vector C[2000];int dfn[2000];int low[2000];int cmp[2000];stack sta;bool instack[2000];bool used[2000];int top原创 2013-11-11 12:49:20 · 737 阅读 · 0 评论 -
uva 10131 大象。
就是一个最长上升子序列而已。状态转移的时候注意一下必须是严格递增的就好#include#include#include#include#includeusing namespace std;struct P{ int i; int w; int s; P() { i=-1; s=0; }原创 2013-11-25 12:06:04 · 508 阅读 · 0 评论 -
lightoj 1210 最少加边,使得图变成强联通
huilaizai xie#include#include#include#include#includeusing namespace std;#define MS(x) memset(x,0,sizeof(x))stack S;vector G[23000];vector C[23000];bool used[25000];int dfn[25000];in原创 2013-11-11 21:11:30 · 659 阅读 · 0 评论 -
回来三周了,这三周
从成都回来之后,到现在一共三周了,感觉,这三周学到的东西比我过去一年学到的东西都要多,尤其是开始刷专题之后。从成都回来之后有那么几个感觉,第一个感觉是题没有那么神了,都是一些常规的题目,一步步的学都能做的会。第二个感觉是人没有那么神了,以前感觉那些会做ACM题目的都是大神,现在感觉,他们为什么能做出来那些题目,要么做过,要么做过。我时间不是很多的,所以,对于三周能进步着一些,还是很不满意。原创 2013-11-13 10:44:37 · 646 阅读 · 0 评论 -
状态压缩DP
怎么确定状态 微观状态 一般都是一堆0101010来表示某位置用或者不用 宏观状态 一般都是用数字来表示微观状态用了几个1 还有状态的阶段。 比如,要计算棋盘上放置K个国王令其不能互相攻击的问题 dp[i][j][s] 就表示第i行状态为S时前i-1行放了j个国王原创 2013-11-14 00:38:44 · 531 阅读 · 0 评论 -
国家队ACM论文分类整理(转载)
距离NOI时间越来越少了,选择性地看一些集训队论文是很有必要的。(在此给已经看过所有论文的神牛跪了= =)所以,我在此整理了一下,供大家参考。组合数学计数与统计2001 - 符文杰:《Pólya原理及其应用》2003 - 许智磊:《浅谈补集转化思想在统计问题中的应用》2007 - 周冬:《生成树的计数及其应用》2008转载 2013-11-13 22:15:55 · 2320 阅读 · 0 评论 -
SGU223 状态压缩DP
问在棋盘上放置K个国王,让其不能够互相攻击的放置方法有多少种国王可以攻击周围的8个格子dp[i][j][k] 表示前i行防止j个国王,且第i行状态s的情况下放置的方案数。状态压缩dp的关键一是找到完整的描述状态的方式 本题不但要描述最后一行,还要描述现在总共放置了多少个国王关键二是找出合法的状态转移方式。本题中一行中可能的状态方式先枚举出来10的时候总共不过200,然后把每种可能的原创 2013-11-14 14:31:51 · 617 阅读 · 0 评论 -
UVA 10066 shuangzita...
//lun lcs de zhong yao xing ....#include#include#includeusing namespace std;int dp[102][102];int n1,n2;int a[200];int b[200];int lcs(){ memset(dp,0,sizeof(dp)); for(int i=1;i<=n1;i++) {原创 2013-11-25 13:36:21 · 686 阅读 · 0 评论 -
lightoj 1211 立方体面积交
#include#includeusing namespace std;int main(){ int cas; scanf("%d",&cas); for(int T=1;T<=cas;T++) { int n; scanf("%d",&n); int bl[3],tr[3]; for(int i=0;i<3;i++) scanf("%d",&bl[i]原创 2013-11-10 14:57:32 · 677 阅读 · 0 评论 -
lightoj 1214 大数除法
#include#includeint main(){ int cas; scanf("%d",&cas); for(int T=1;T<=cas;T++) { char num[300]; long long div; scanf("%s%lld",num,&div); printf("Case %d: ",T); if(div==0) { print原创 2013-11-10 15:51:39 · 715 阅读 · 0 评论 -
UVA 111 LCS
注意他给的是第n个事件的顺序,不是按事件的顺序给的....#include#include#includeusing namespace std;int s[100];int t[100];int dp[100][100];int lcs(int n){ memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { for原创 2013-11-23 19:11:37 · 617 阅读 · 0 评论 -
sin PI and other things
#include#includeint main(){ double PI=2*acos(0.0); int cas; scanf("%d",&cas); for(int T=1;T<=cas;T++) { double R,r; double n; scanf("%lf%lf",&R,&n); double ang=PI/n; r=R*sin(ang)/(1+原创 2013-11-09 11:07:07 · 714 阅读 · 0 评论 -
lightoj 1189 水题叫你明白什么叫贪心....
#include#include#includeusing namespace std;typedef long long ll;ll fac[21];int main(){ int cas; fac[0]=1; for(int i=1;i<20;i++) fac[i]=fac[i-1]*i; scanf("%d",&cas); for(int T=1;T<=ca原创 2013-11-10 00:45:41 · 596 阅读 · 0 评论 -
lightoj 1136 第一次打表找规律做题..
#includetypedef long long ll;ll getNum(ll n){ if(n==1) return 0; ll sum=2*((n+1)/3)-1; if((n+1)%3==0) return sum; return sum+1; }int main(){ int cas; scanf("%d",&cas); for(int T=1;T原创 2013-11-09 23:55:27 · 664 阅读 · 0 评论 -
hangzhou 02
#include#include#include#include#include#includeusing namespace std;const int INF=12345678;int n,m;struct P{ int x,y; P(int a,int b) { x=a; y=b; } P(){}};int b[200][200];queue q原创 2013-11-09 14:21:27 · 671 阅读 · 0 评论 -
lightoj 1109 struct is good
#include#includeusing namespace std;struct P{ int num; int count; bool operator < (const P &o) const { if(count==o.count) return num>o.num; return count<o.count; }};P n[1500];int原创 2013-11-09 20:06:54 · 611 阅读 · 0 评论 -
讨厌的字符串读入
字符串一共两种string char*1.读入一个字符scanf("%c",&c);c=getchar();2.读入一行字符char c[100];gets(c);string s;getline(cin,s);3.string 和char*转换这个以后再说吧..原创 2013-11-09 21:08:37 · 536 阅读 · 0 评论