11 2012 档案

摘要:题意: 知道了n 个基地的位置和m个炸弹的安放点,每个炸弹可以炸掉一行或一竖,炸掉的基地要从地图上去掉,对于每次操作输出该炸弹炸掉的基地个数。分析:用set集合容器,每去掉一个基地就从集合中删掉。#include <stdio.h>#include <string.h>#include <set>#include <map>#include <algorithm>using namespace std;typedef map<int,multiset<int> >line;map<int,multiset 阅读全文
posted @ 2012-11-05 21:33 'wind 阅读(181) 评论(0) 推荐(0)
摘要:2—sat建图总结1.元素关系有以下11种A[x]NOT A[x]A[x] AND A[y]A[x] AND NOT A[y]A[x] OR A[y]A[x] OR NOT A[y]NOT (A[x] AND A[y])NOT (A[x] OR A[y])A[x] XOR A[y]NOT (A[x] XOR A[y])A[x] XOR NOT A[y] And 结果为1:建边 ~x->y, ~y->x (两个数都为1)And 结果为0:建边 y->~x , x->~y(两个数至少有一个为0)OR 结果为1:建边 ~x->y , ~y->x(两个数至少有一个为 阅读全文
posted @ 2012-11-03 23:57 'wind 阅读(767) 评论(0) 推荐(0)
摘要:题意: Zty很痴迷数学问题.。一天,yifenfei出了个数学题想难倒他,让他回答1 / n。但Zty却回答不了^_^. 请大家编程帮助他.输出1/n. (是循环小数的,只输出第一个循环节).分析: 找循环节的时候看看是否出现了相同的被除数即可。#include <stdio.h>#include <string.h>#define maxn 100010#define clr(x) memset(x,0,sizeof(x))int res[maxn];int vis[maxn];int main(){ int top, i; int k, t, n; scanf(& 阅读全文
posted @ 2012-11-03 14:00 'wind 阅读(301) 评论(0) 推荐(0)
摘要:题意: 知道了 n 个人的坐标和一个边长为R的正方形,问正方形内最多可以包含多少人。分析:离散化坐标,将y坐标映射到区间上,按x坐标从小到达扫描。#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;#define maxn 10005long long max(long long a, long long b){ return a>b?a:b;}struct seg{ long long x, y, val;}s[maxn*2];int add[max 阅读全文
posted @ 2012-11-03 13:09 'wind 阅读(368) 评论(0) 推荐(0)
摘要:题意: 有n 个砖块,有不同的长宽高,分为三种类型,要求是: When di = 0 the block's length and width must be more or equal to the block's length and width which lies under the block. When di = 1 the block's length and width must be more or equal to the block's length which lies under the block and width and the 阅读全文
posted @ 2012-11-03 00:19 'wind 阅读(375) 评论(0) 推荐(0)
摘要:题意: 已知一个树形的地图,要在其间建设一条公路,每个公路上的点只经过一次,问如何建工路使得所有点到公路的最长距离最短。分析: 看成是找树上所有点中距离最远的路径,主要是两次广搜,第一次找到一个端点,第二次找到另一个,第二次找的过程中记录路径, 便于最后一次遍历全图找到答案。#include <stdio.h>#include <string.h>#define maxn 100005#define clr(x)memset(x,0,sizeof(x))struct node{ int to, next, w;}q[1000000];int tot;int head[m 阅读全文
posted @ 2012-11-02 23:51 'wind 阅读(202) 评论(0) 推荐(0)
摘要:题意:问一个1..n 的排列中,有多少组数满足 i < j < k 且 num[i] < num[k] < num[j].分析:符合条件的答案即为 小大中的情况总数,而 小大中 = 小XX - 小中大 可以求出每个数前面小于它的数的个数x,和后面大于它的个数y, 那么每个数对应的 小XX 数量为 y*(y-1)/2 每个数对应的小大中数量为 x*y#include <stdio.h>#include <string.h>#define mod 100000007long long a[100005];int n;int lowbit(int x) 阅读全文
posted @ 2012-11-02 07:15 'wind 阅读(314) 评论(0) 推荐(0)
摘要:题意:输入两个非负整数a, b,找到非负的整数 X, Y使其满足 X*a + Y*b = 1.#include <stdio.h>#include <string.h>void extend_gcd(int a, int b, int& d, int& x, int& y){ if(!b) { d = a; x = 1; y = 0; } else { extend_gcd(b, a%b, d, y, x); y -= x*(a/b); }}int main(){ int a, b... 阅读全文
posted @ 2012-11-01 23:05 'wind 阅读(199) 评论(0) 推荐(1)