摘要: 题目是:HDU1896题目简述:输入一堆石头,每个石头有自己所在的位置p,以及自己可以抛多远的距离d。你每遇到第奇数个石头,就把石头丢出去,第偶数个石头就不管。计算出最后一个石头它所处的位置。解法:该题我采取的是先用优先队列对石头进行排序,然后再对每个石头进行处理,奇数石头就计算出石头的新位置在插进队列去,偶数石头就删除,最后所剩的石头的位置就是所求的位置。Σ( ̄。 ̄ノ)ノ很久没敲代码。。。。优先队列都快忘记怎么写了。。。。复习一下:优先队列头文件:#include 基本操作:empty() 如果队列为空返回真pop() 删除对顶元素size() 返回优先队列中拥有的... 阅读全文
posted @ 2014-02-25 21:50 Teilwall 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 最近没什么事,决定把杭电没提交的题一道道的做过去......= =A + B Problem II简单的大树相加的题目,以前一直觉得感觉大数相加好麻烦,都没好好的做一下,认真去写还是觉得比较简单(((o(*゚▽゚*)o)))代码如下:TIME:0ms Memory:260K 1 #include 2 #include 3 using namespace std; 4 5 int main() 6 { 7 int n,i=0,k; 8 scanf("%d",&n); 9 while(n--)10 {11 i++;12 char... 阅读全文
posted @ 2014-02-03 12:55 Teilwall 阅读(259) 评论(0) 推荐(1) 编辑
摘要: LINK:Andrew the Ant题意:给一根长度为L的木头,上面有A只蚂蚁【每只蚂蚁给出了初始行走的方向,向左或向右】。当两只蚂蚁相碰时,两只蚂蚁就朝相反的方向行走~╮(╯▽╰)╭问的是:最后掉下来的蚂蚁用时多少,并且它的初始位置是哪里?【若有两只,就先输出初始位置小的那只】~这道题跟白书里的那道题十分的像,不过白书问的是:给出时间T,问最后每只蚂蚁的位置是什么~题目的关键是: 1.当两只蚂蚁相碰的时候,其实就好像是两只蚂蚁穿过了~那么,每输入一只蚂蚁,那么一定存在对应的一只蚂蚁【也可能是自身】符合:若它要掉下来,那么它走的路程就是——若向右,X=L-P;若向左,X=P【X为要走的路.. 阅读全文
posted @ 2013-08-26 23:15 Teilwall 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 转自:windows下srand48()和drand48()的问题 1 #ifndef DRAND48_H 2 #define DRAND48_H 3 4 #include 5 6 #define m 0x100000000LL 7 #define c 0xB16 8 #define a 0x5DEECE66DLL 9 10 static unsigned long long seed = 1;11 12 double drand48(void)13 {14 seed = (a * seed + c) & 0xFFFFFFFFFFFFLL;15 unsigned int ... 阅读全文
posted @ 2013-08-25 23:02 Teilwall 阅读(1230) 评论(1) 推荐(0) 编辑
摘要: LINK:BNUOJ 26475 Cookie Selection题意:你在不停的输入数字a1,a2,a3,......,ak,当你输入#时,就把已输入数字中的第k/2+1删除,然后剩下的数字又组成一个新的数列a1,a2,......,a(k-1)。把删除的数输出来~╮(╯▽╰)╭刚开始理解错了题意......各种WA......想半天还不知道错哪.....最后搞清,自己压根连题目都弄错了......就没有再继续战斗的想法了~~~~(>_ 2 #include 3 #include 4 #include 5 using namespace std; 6 priority_queue p; 阅读全文
posted @ 2013-08-25 22:33 Teilwall 阅读(418) 评论(0) 推荐(0) 编辑
摘要: 转自:LINK_优先队列优先队列用法:在优先队列中,优先级高的元素先出队列。标准库默认使用元素类型的 qi;通过, greater >qi2;其中第二个参数为容器类型。第二个参数为比较函数。故示例2中输出结果为:2 3 5 6 9第三种方法:自定义优先级。1 struct node2 {3 friend bool operator (node n1, node n2)4 {5 return n1.priority > n2.priority;6 }7 int priority;8 int value;9 };则会编译不过(G++编译器)因... 阅读全文
posted @ 2013-08-25 21:41 Teilwall 阅读(426) 评论(0) 推荐(0) 编辑
摘要: WHU 1464 deal with numbers题意:给你一串数字,对着串数字有三项操作:Minus a,b,c:对区间[a,b]总的每个数都减c。Division a,b,c:对区间[a,b]中的每个数都除以c。Sum a,b:求出区间[a,b]的和~由于该题是对区间里的所有数进行操作,用一般的线段树会TLE,在这里要用到Lazy_Tag。然后另外要注意的是除法如何维护:这里的数C 2 #include 3 #include 4 #include 5 using namespace std; 6 7 typedef long long LL; 8 const int N... 阅读全文
posted @ 2013-08-25 10:40 Teilwall 阅读(307) 评论(0) 推荐(0) 编辑
摘要: 转载LINK:LAZY_TAG先看一个具体问题吧 PKU 3468http://poj.org/problem?id=3468题意很清楚 1 ≤N,Q≤ 100000."Cabc" means addingcto each ofAa,Aa+1, ... ,Ab. -10000 ≤c≤ 10000."Qab" means querying the sum ofAa,Aa+1, ... ,Ab.用朴素的做法是O(NQ)的 明显TLE由于是区间统计问题 我们尝试用线段树解决先考虑线段树节点记录什么左右儿子 区间范围是必须的:ls[] rs[] l[] r[]为 阅读全文
posted @ 2013-08-25 10:19 Teilwall 阅读(387) 评论(0) 推荐(0) 编辑
摘要: LINK:HDU 2571题意:就是给了一个nxm的表格,从左上角到右下角所能得到的最大值。PS:每到一格就加上格子中的数字,且只能向下或向右走,向下只能走一格,向右能走一格或走到所在点的k倍【即有a[i][j]走到a[i][j*k],k=1,2,3,.....】。采用DP做,具体方法详见下面的代码:#include #include #include using namespace std;int a[22][1010],n,m,c;int main(){ scanf("%d",&c); while(c--) { scanf("%d%d",&a 阅读全文
posted @ 2013-08-22 16:37 Teilwall 阅读(207) 评论(0) 推荐(0) 编辑
摘要: LINK:HDU 1018 题意:求n!的位数~由于n!最后得到的数是十进制,故对于一个十进制数,求其位数可以对该数取其10的对数,最后再加1~易知:n!=n*(n-1)*(n-2)*......*3*2*1∴lg(n!)=lg(n)+lg(n-1)+lg(n-2)+......+lg(3)+lg(2)+lg(1);代码: 1 #include 2 #include 3 #include 4 using namespace std; 5 6 int main() 7 { 8 int t; 9 scanf("%d",&t);10 while(t--)11 ... 阅读全文
posted @ 2013-08-22 16:27 Teilwall 阅读(151) 评论(0) 推荐(0) 编辑