摘要:新blog地址http://wulala.logdown.com 阅读全文
posted @ 2014-02-18 19:46 乌拉拉979 阅读(178) 评论(0) 推荐(0) 编辑
摘要:妈蛋感觉比别人落后了好多 阅读全文
posted @ 2014-02-17 13:16 乌拉拉979 阅读(162) 评论(0) 推荐(0) 编辑
摘要:网上题解一搜一大把我就不献丑了,直接放代码吧 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define N 100008 7 #define M 1008 8 9 long long S,F[N],n,C[5],T,A[M][5];10 11 void init()12 {13 for (int i = 1;i = 0)40 {41 ans -= F[S - (A[i][j]+1)*C[j]];42 for (int... 阅读全文
posted @ 2014-02-01 17:05 乌拉拉979 阅读(152) 评论(0) 推荐(0) 编辑
摘要:这个题可以先floyd求出最短路在将包含原图中所有S->T最短路径的子图抽出来求最小割(就是最大流啦)f[S][i]+f[i][j]+f[j][T] == f[S][T]代表i->j边在要求的这个子图中 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define N 508 7 #define M 124758 8 #define INF 0x7ffffff 9 10 int n,m,tot1,tot2,head1[N],head2[N],f[N][N],lay[N],qu... 阅读全文
posted @ 2014-02-01 17:02 乌拉拉979 阅读(424) 评论(0) 推荐(0) 编辑
摘要:用一个结构体来存储每一页的标号,访问次数和进入内存时间然后用堆来弄这些东西。在堆外开一个at数组判是否在内存里面,开一个delta数组用作懒标记存储访问次数的变更然后在一个外存里的东西要入内存时进行判断和懒标记的加入。。记得要离散化!! 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 1000008 8 9 struct page10 {11 int num,v,t;12 bool operator b.t); return (v >... 阅读全文
posted @ 2014-02-01 16:56 乌拉拉979 阅读(299) 评论(0) 推荐(0) 编辑
摘要:f[i][j][k]表示i行之前有j行放了一个,k行放了两个棋子的方案数,DP。代码懒得写了,copy了搞神的 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 #define maxn 105 7 #define mod 9999973 8 #define rep(x,l,r) for (x=l;x1) f[i][j][k]+=f[i-1][j-2][k]*C(m-j-k+2);//223 if (j&&k) f[i][j][k]+=f[i-1][j][k-1]*(m-j-k+1)... 阅读全文
posted @ 2014-01-22 10:55 乌拉拉979 阅读(180) 评论(0) 推荐(0) 编辑
摘要:这道题可以转换一下。试想每一个对应关系a-b为从a->b的一条边,那么图中一定存在n条边且每个点入度出度都为1,易证一定存在一个或几个环。实际上排数就是这几个环大小的最小公倍数。即求和为n的数列的最小公倍数种数。那么可以直接DP 1 /* 2 ID:WULALA 3 PROB:bzoj1025 4 LANG:C++ 5 */ 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #define N 100814 #define M15 #define mod16 #defin. 阅读全文
posted @ 2014-01-22 10:53 乌拉拉979 阅读(277) 评论(0) 推荐(0) 编辑
摘要:可以假设一个A数组为第i天之前的收入,即前缀和。每次输入的s,t,v即At - As-1 = v。对,就是一个差分约束。实际上全是等式即图中从u到v的所有路径长度相同。于是可以用并查集做Si表示从i到Fi相差多少。 1 #include 2 #include 3 #include //一定要记得打!! 4 using namespace std; 5 #define N 1008 6 7 int T; 8 int n,m,F[N],S[N]; 9 bool Right;10 11 void clean()12 {13 memset(S,0,sizeof(S));14 ... 阅读全文
posted @ 2014-01-22 10:49 乌拉拉979 阅读(466) 评论(0) 推荐(0) 编辑
摘要:首先是对于图上所有的棋盘一定属于以下两种类型:1.黑格行列奇偶性相同,白格不同2.白格行列奇偶性相同,黑格不同那么在输入的时候属于第一种情况的赋1,属于第二种情况的赋0统计最大的1或0矩形和正方形就可以啦。统计矩形和玉蟾宫是一样的做法,单调栈嘛。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 2008 8 9 int ans1,ans2,n,m,f[N][N],s[N],w[N],top;10 bool map[N][N];11 12 void b... 阅读全文
posted @ 2014-01-22 10:45 乌拉拉979 阅读(362) 评论(0) 推荐(0) 编辑
摘要:枚举每一个位置找出每一种颜色在这个位置之后的第一个位置与这个位置距离的最大值,再找出每一个位置结果的最小值就可以啦。用堆来处理这个问题是不错的想法 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define N 1000008 8 #define K 68 9 10 int n,k,ans = 2147483647;11 12 priority_queue,greater > que[K];13 14 void init()15 {16 scanf("%d%d&q 阅读全文
posted @ 2014-01-20 17:19 乌拉拉979 阅读(153) 评论(0) 推荐(0) 编辑