ACM
hello_pig1995
日有所进
展开
-
poj1979
#include <iostream> #include <queue> using namespace std; char M[24][24]; typedef pair<int,int> P; queue<P> q; int W,H; int dx[4] = {0,0,-1,1}; int dy[4] = {-1,1,0,0};int bfs(){ int count = 0,i,j;原创 2016-07-02 20:20:51 · 334 阅读 · 0 评论 -
poj1017
在4x4 5x5 6x6的情况中,其实剩下的都是直接记录在leftspace(空闲大小)中即可,但是对于3x3要特判,因为不同的情况对应着不同的可能。再有就是对于剩下的小块的记录,要随时注意可能的余数能不能被收纳,而不是进入下一个分之,比如说,最后判断1x1的时候:需要判断的第一个(a+3),因为可能刚好有剩下的盒子能够包含a的剩下的,而不是再需要多一个盒子。如果盒子够,那么刚好,就收下了,如果不够原创 2016-07-06 21:57:52 · 206 阅读 · 0 评论 -
poj2393
从本星期一直算上库存成本往后推即可。#include <iostream> #include <stdio.h> using namespace std; #define maxn 10000int N,S; int C[maxn],Y[maxn];int main(int argc, const char * argv[]) { cin>>N>>S; for(int i=0;i<N原创 2016-07-06 14:47:32 · 336 阅读 · 0 评论 -
poj3190
用堆来做,其实和用priority_queue来做是一样的,而且感觉我用堆来做比较麻烦。不过感觉似乎和操作系统的调度略有关系。排序的时候是按照开始的时间进行排序,比如说这头牛该吃奶了,就看之前吃奶的有没有吃完,所以堆中要按照结束时间排序,而选择牛的时候要按照开始时间进行排序。最后输出的时候要按照id进行排序。所以结构体中: - id:牛的编号 - queue_number:第几队列 -原创 2016-07-06 14:27:45 · 308 阅读 · 0 评论 -
poj1328
首先先贴上一个经典的错误代码,就是按照贪心算法使得圆尽可能的向右靠拢,但是其实这样是不对滴,原因是因为可能由于为了能够迎合左边的点,尽可能的使圆心向右压缩,那么就可能忽略掉高处的点。但是换一种思路,我们可以发现,如果先包含更高的点,那么稍微低一些的点可能自然的也被包含进来了。正确的方法其实是这样的,首先对于需要进行检索的岛屿进行一个海岸线上的起始点和终点的计算,然后去重即可。 在输入数据之后就进行原创 2016-07-06 13:16:27 · 264 阅读 · 0 评论 -
poj2376
这道题目首先输入要是scanf,但是我用了scanf之后一度TLE以至于怀疑人生,后来发现是while循环的条件疏漏使得有些条件下会永远TLE,不是输入的鬼。。后来几经修改觉得没问题了,但是就是WA,后来发现自己在调试TLE的问题的时候把sort关了。。sort一开就AC了。。。Test:input: 10 10 1 3 2 4 3 5 4 6 5 7 6 8 7 9 8 10 9 10 10 10原创 2016-07-05 23:17:56 · 429 阅读 · 0 评论 -
poj3617
#include <iostream> #include <string.h> using namespace std;int N,len; char s[2048],c; char result[2048];int main(int argc, const char * argv[]) { int i; cin>>N; getchar(); for(i=0;i<N;原创 2016-07-05 21:22:29 · 209 阅读 · 0 评论 -
poj3253
heap操作: http://www.cplusplus.com/reference/algorithm/make_heap/注意:heap的sort操作并不是对于堆的sort操作,而是将其sort成为数组。而make_heap push_heap pop_heap中含有堆的调整#include <iostream> #include <vector> #include <algorithm>原创 2016-07-05 20:59:05 · 280 阅读 · 0 评论 -
poj3050
这道题还是相对来说比较简单的,只需要无脑搜,而且因为是找出所有结果,所以深搜比较好。#include <iostream> #include <set> using namespace std;set<int> number; int M[5][5]; int dx[4] = {-1,1,0,0}; int dy[4] = {0,0,-1,1};void dfs(int len,int cur,in原创 2016-07-03 16:33:32 · 390 阅读 · 0 评论 -
poj3187
这道题比2718简单多了。。2718一直在超时。。。#include <iostream> #include <algorithm> using namespace std; int cnt[11][11]; int res[10];inline int dot(int a[],int b[],int l){ int ret = 0; for(int i=0;i<l;i++)ret原创 2016-07-03 16:17:15 · 431 阅读 · 0 评论 -
poj3669
好日狗,这道题首先用queue超时,修改了读取数据的方式,以及将queue变成了两个全局数组。TLE的问题解决了。在调用solve()的时候总是会崩溃,不明所以,后来发现是特判情况没有很清晰的控制,比如说在0位置如果一开始就被炸了以及最开始就是安全的。另外,最后总是WA,发现是因为。。手抖。。already[newx][newy]=1写成了already[newy][newy]=1还非常不好检查。。原创 2016-07-03 13:43:08 · 301 阅读 · 0 评论 -
poj3009
本题目唯一需要注意的一点就是终点只要在冰壶的移动路径上就可以,不用最终一定要落在冰壶上。#include <iostream> #include <stdio.h> using namespace std; #define INF 100000000int W,H; int M[32][32]; int minstep = INF; int sx,sy,ex,ey; int dx[4] = {-1,原创 2016-07-02 21:28:36 · 261 阅读 · 0 评论 -
poj3040
reference : http://blog.csdn.net/sdj222555/article/details/10279225#include <iostream> #include <string.h> #define INF 1000000000 using namespace std;int N,C; int V[32],B[32]; int sum = 0; int use[32]原创 2016-07-07 10:38:04 · 356 阅读 · 0 评论