
每天一题
文章平均质量分 67
killua7080
这个作者很懒,什么都没留下…
展开
-
poj1065
#include#include#include#include#include#include#define MAX 5010using namespace std;struct node{ int l,w; node(){}; node(int l,int w):l(l),w(w) {} bool operator <(const no原创 2012-12-18 23:44:11 · 698 阅读 · 0 评论 -
7
#include#include#include#include#include#includeusing namespace std;struct node{ int s,b; node(int s,int b):s(s),b(b) { } bool operator<(const node& rhs)const {原创 2012-12-10 23:57:45 · 320 阅读 · 0 评论 -
8
#include#include#include#include#include#include#define MAX 210using namespace std;char map[MAX][MAX];bool visit[MAX][MAX];int dir[2][4]={{0,0,1,-1},{1,-1,0,0}};int step[MAX][MAX];int m,n,原创 2012-12-10 23:19:42 · 268 阅读 · 0 评论 -
hdu1224
#include#include#include#include#include#include#include#define N 200using namespace std;bool map[N][N];bool inq[N];int interest[N];int dp[N];int father[N];void spfa(int n){ int i,j原创 2012-12-24 00:14:37 · 354 阅读 · 0 评论 -
zoj1666
#include#include#includeusing namespace std;int coin[]={1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289};int a[301];int ans[301];int main(){ int i,j,n; memset(ans,0,sizeof(ans)原创 2012-12-23 23:18:38 · 374 阅读 · 0 评论 -
poj2482
#include#include#include#include#include#define L(x) (x<<1)#define R(x) (x<<1|1)#define MAX 30010using namespace std;class line{public: long long x,y1,y2; int flag; line(){}原创 2012-12-06 15:05:35 · 612 阅读 · 0 评论 -
hdu2492
#include#include#include#include#include#define MAX 20010using namespace std;long long a[MAX];long long c[100005];long long d[MAX];long long f[MAX];long long t[MAX];long long h[MAX];long原创 2012-12-07 12:03:24 · 494 阅读 · 0 评论 -
poj2828
一开始想得直接用vector插入,结果TLE用list,依然TLE算法思想:可以先把数据存起来,然后从最后一个人向前考虑,假设他的位置为(p,val),那么他前面一定会有p个人是在他之前到的所以可以用线段树维护每个区间还有多少个空位,插入一个People,保证他前面有p个位置,然后插入的区间就是他最后的位子,插入后,相应区间的空位数减一。0 771 511 332 6原创 2012-11-23 12:49:28 · 387 阅读 · 0 评论 -
poj3277
#include#include#include#include#include#include#define L(x) (x<<1)#define R(x) (x<<1 |1)#define MAX 80000using namespace std;long long int cx[4*MAX];class line{ public: long long i原创 2012-11-22 20:02:29 · 397 阅读 · 0 评论 -
zoj1481
因为这n个数为0~n-1;所以如果第一个数为k,那么有n-k个数比他大,k-1个数比他小,假设现在逆序数为sum,那么第一个数的逆为0,把他放到最后时比他小的数的逆都会少1,放到最后了这个数的逆就是比他大的数的个数为n-k所以新的你序数sum=sum-(k-1)+n-k=sum+n-1-2*k然后可以建一个线段树,可以查询出区间L,R中数的个数。#include#incl原创 2012-11-22 21:36:50 · 280 阅读 · 0 评论 -
hdu4007
不知道为什么数组开到2000才能过#include#include#include#include#include#define L(x) (x<<1)#define R(x) (x<<1|1)#define MAX 2010using namespace std;int cy[MAX*2];class line{public: int x,y1,y2,flag原创 2012-12-05 23:08:54 · 372 阅读 · 0 评论 -
poj1177
参考http://wenku.baidu.com/view/1856cf84b9d528ea81c77918.html#include#include#include#include#include#define L(x) (x<<1)#define R(x) (x<<1 |1)#define MAX 5010using namespace std;int cy[2*原创 2012-11-22 11:55:25 · 1372 阅读 · 0 评论 -
poj1151
参考http://wenku.baidu.com/view/99fef963783e0912a2162adb.html基本思路,每个扫描线里存一条纵向边,记录矩形的x坐标和y轴覆盖的范围,矩形左边界的flag为1右边界的flag为-1那么对所有的矩形都这样建边,然后安x左边从小到大排序所有的扫描线,然后计算面积的时候从左到右查看每条扫描线覆盖的面积,这个过程通过一个线段树优化,每次加入原创 2012-11-20 21:54:55 · 1059 阅读 · 0 评论 -
hdu4000
#include#include#include#include#include#define MAX 100010using namespace std;long long c[MAX];int seq[MAX];int lowbit(int x){ return x&(-x);}void add(int x,int n){ while(x<=n)原创 2012-12-04 11:16:09 · 448 阅读 · 0 评论 -
hdu1698
#include#include#include#include#define MAX 100001#define L(x) (x<<1)#define R(x) (x<<1 | 1)using namespace std;int sum=0;struct node { int l; int r; int val;}a[MAX*3];void bui原创 2012-11-19 22:56:49 · 276 阅读 · 0 评论 -
hdu1166
#include#include#include#include#include#include#define MAX 50001#define L(x) (x<<1)#define R(x) (x<<1|1)using namespace std;struct node{ int l; int r; int sum;}a[MAX*3];int v原创 2012-11-19 21:50:33 · 228 阅读 · 0 评论 -
poj1088
#include#include#include#include#include#include#define N 101using namespace std;int map[N][N];int dp[N][N];bool inq[N][N];int dir[2][4]={{0,0,1,-1},{1,-1,0,0}};struct node{ int x,y;原创 2012-12-24 22:38:03 · 259 阅读 · 0 评论 -
zoj3058
#include#include#include#include#include#define PI acos(-1)#define eps 1e-6using namespace std;struct circle{ double x,y,r; circle(){}; circle(double x,double y,double r):x(x),y(y原创 2012-12-12 00:37:47 · 311 阅读 · 0 评论 -
poj1050
#include#include#include#include#include#include#define MAX 101using namespace std;int mat[MAX][MAX];int sum[MAX];int maxval(int *a,int n){ int b=0,i; int s=a[0]; for(i=0;i<n;i+原创 2012-12-13 00:13:22 · 332 阅读 · 0 评论 -
zoj3471
#include#include#include#include#includeusing namespace std;int dp[2048];int map[12][12];int bin[]={0,1,2,4,8,16,32,64,128,256,512,1024};int main(){ int n,i,j,k; while(~scanf("%d",&n原创 2012-12-19 19:10:08 · 484 阅读 · 0 评论 -
poj1014
#include#include#include#include#includeusing namespace std;int dp[240010];int num[100];int cou;void insert(int n,int k){ int i,x,temp=0; for(i=1;;i=i<<1) { if(temp+i>n)b原创 2012-12-19 17:49:13 · 329 阅读 · 0 评论 -
zoj3171
#include#include#includeusing namespace std;char str[10005];int main(){ long long dp[5]; int n,i; while(~scanf("%s",str)) { memset(dp,0,sizeof(dp)); n=strlen(str)原创 2012-12-19 00:14:40 · 302 阅读 · 0 评论 -
poj3628
#include#include#include#include#include#include#define MAX 2000100using namespace std;int dp[MAX];int cow[20];int main(){ int n,b,i,j; int m; int sum=0; while(~scanf("%d%d"原创 2012-12-17 23:42:43 · 690 阅读 · 0 评论 -
poj1458
#include#include#include#include#include#include#define MAX 300using namespace std;int dp[MAX][MAX];int main(){ string str1,str2; int i,j; while(cin>>str1) { cin>>str原创 2012-12-17 23:11:24 · 1012 阅读 · 0 评论 -
hdu1058
#include#include#include#include#include#define N 5842using namespace std;int dp[N];int a[4];int b[4];int c[4]={2,3,5,7};int main(){ int n,i,j,k; int t,mi; memset(a,0,sizeof(a)原创 2012-12-29 20:18:47 · 607 阅读 · 0 评论 -
poj1631
#include#include#include#include#include#include#define MAX 40010using namespace std;int g[MAX];int main(){ int ca,n,x,i; int ans; scanf("%d",&ca); while(ca--) {原创 2012-12-18 00:13:13 · 816 阅读 · 1 评论 -
zoj1108
#include#include#include#include#include#include#include#define MAX 1010using namespace std;struct mose{ int w,s,x; int len; mose(){}; mose(int w,int s,int x):w(w),s(s),x(x)原创 2012-12-16 23:05:29 · 885 阅读 · 0 评论 -
poj1384
#include#include#include#include#includeusing namespace std;int w[10010];int p[10010];int main(){ int ca,n,weight,value,i,j,m; scanf("%d",&ca); while(ca--) { scanf("%d原创 2012-12-17 00:13:54 · 379 阅读 · 0 评论 -
poj3624
#include#include#include#include#includeusing namespace std;int dp[12900];int w[3420],v[3420];int main(){ int n,weight; int i; while(~scanf("%d%d",&n,&weight)) { for(i原创 2012-12-16 23:20:57 · 1475 阅读 · 0 评论 -
hdu1248
#include#include#include#include#includeusing namespace std;int dp[10010];int a[]={150,200,350};int main(){ int n,t,i,j; scanf("%d",&n); while(n--) { memset(dp,0,sizeo原创 2012-12-16 23:43:00 · 326 阅读 · 0 评论 -
hdu1069
#include#include#include#include#include#define N 40using namespace std;struct node{ int x,y,z; node(){} node(int x,int y,int z):x(x),y(y),z(z) {} bool operator < (const no原创 2012-12-26 23:50:51 · 423 阅读 · 0 评论 -
hdu1087
#include#include#include#include#include#include#define N 1010using namespace std;int a[N];int dp[N];int main(){ int n,i,j,ma,ma2; while(scanf("%d",&n)) { if(n==0)break;原创 2012-12-26 23:20:29 · 329 阅读 · 0 评论 -
zoj2136
#include#include#include#include#include#define MAX 1010using namespace std;int d[MAX];int g[MAX];int main(){ int t,n,x,i; scanf("%d",&t); while(t--) { scanf("%d",&n)原创 2012-12-12 23:43:26 · 544 阅读 · 0 评论 -
poj1163
#include#include#include#include#include#define MAX 101using namespace std;int triangle[MAX][MAX];int main(){ int n,i,j; while(~scanf("%d",&n)) { for(i=0;i<n;i++)原创 2012-12-12 23:31:59 · 444 阅读 · 0 评论 -
hdu 1754
#include#include#include#include#include#define MAX 200000#define L(x) (x<<1)#define R(x) (x<<1|1)using namespace std;struct node { int l; int r; int val ;}a[MAX*3];int soc[MAX原创 2012-11-19 16:58:01 · 210 阅读 · 0 评论 -
zoj1654
参考《算法艺术与信息学竞赛》P334 皇家卫士把每个横向线段当作集合A 每个纵向线段当作集合B如果是空地则A,B中的点有一条边,最大二分匹配如o***就对应了一条横向线段A1,和4条纵向线段B1,B2,B3,B4其中A1和B1的交点是空地,所以他们之间有一条边,所以每个边都会对应一个点,这个点为一个横向线段和纵向线段的交点#include#include#inc原创 2012-11-07 21:33:12 · 718 阅读 · 0 评论 -
poj2886
其中用到了反素数参考http://baike.baidu.com/view/2621997.htm思路就是给定一个确定的N,约数最大的P是确定的就是不大于N的最大反素数,所以可以打表然后用一个线段树记录空位模拟出队的过程,找出第P次出队人的编号。线段树的区间存的为编号1~N的人在队中的人数,update(t,val)就是更新线段树让第val个立刻,并求出他的编号。当出队人对应的ca原创 2012-11-25 01:31:28 · 760 阅读 · 0 评论 -
poj2195
#include#include#include#include#include#define MAX 1000using namespace std;struct node{ int x; int y;}house[MAX],men[MAX];int lh,lm;int wij[MAX][MAX];int lx[MAX],ly[MAX];int matc原创 2012-11-08 21:15:12 · 311 阅读 · 0 评论 -
zoj1157
#include#include#include#include#include#include#define MAX 1010using namespace std;vectorname;bool can[MAX][MAX];string recept[MAX];string device[MAX];bool map[MAX][MAX];bool visit[MAX];原创 2012-11-07 19:55:49 · 317 阅读 · 0 评论 -
poj2239
#include#include#include#include#define MAX 501int p,n;bool map[MAX][MAX];bool visit[MAX];int match[MAX];bool find(int k){ int i,j; for(i=1;i<=n;i++) { if(map[k][i]&&visi原创 2012-11-05 22:52:17 · 309 阅读 · 0 评论