- 博客(45)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注
原创 poj 1961
KMP next 数组实际上就是最长的i 使得的str[1~i] = str[n-i+1~n]#include #include #include #include using namespace std;int next[1000010];void COMPUTE_PREFIX_FUNCTION(char P[], int m){
2015-01-31 23:06:47 340
原创 E - Vasya and Polynomial
如果a == b == t != 1, 那么就是两个解 p(x) = a, p(a) = a那么通过这种情况可以得知如果 t != a, a == b的时候 只有一个解 p(x) = a;如果 a == b == t == 1 inf 题中强调 所有的系数都非负, 那么 p(t) = a ,当 t != 1 时候, 系数之和一定小于 a , 证明 如果
2015-01-31 19:42:02 327
原创 D - Vasya and Chess
猜的。。不知道怎么证明#include #include #include #include using namespace std;int main(){ int n; while(scanf("%d",&n) != EOF) { if(n%2) printf("black\n");
2015-01-31 13:28:15 478
原创 Vasya and Basketball
#include #include #include using namespace std;int num1[211111];int num2[211111];int num[411111];long long res1, res2;long long ans1, ans2;int n, m;int main(){ w
2015-01-31 12:14:05 415
原创 poj 3386
分情况讨论,因为有可能一个连续的地方被分割开, #include#include#include#includeusing namespace std;#define MAXN 100100int num2[MAXN],num[MAXN];int dp[MAXN][100];void RMQ(int n){ int i,j,
2015-01-28 22:08:38 368
原创 poj 3221
dfs + 树状数组单点更新加上区间求和很容易想到线段树, 但是怎么样去构建数据是一个难点,。。开始想了好久也没相同, 其实我们可以做一个映射把无顺序的图映射成一个有序的点阵列, 然后再用树状数组去求具体的映射就是通过一个DFS, 扫一遍, 这时候需要两个数组STA, END, 分别存放子树的开始节点的序号和结束节点的序号, 而且STA一定是其本身这样我们的节点序号也有了,子数的范
2015-01-28 20:51:42 323
原创 poj 1201
查分约束**要注意查分约束的隐含条件, 然后加一个源点,终点,用bellman_ford 或者 sfpa Poj 1201 大致题意:给出n个闭区间[ai,bi],每个区间对应一个ci,表示集合Z在区间[ai,bi]内ci 个相同元素,问集合Z至少有几个元素。分约束的思想:可以肯定的是s[bi]-s[ai-1]>=ci; 为什么要ai-1,是因为ai也
2015-01-27 22:35:56 290
原创 zoj 1456
#include#include#include#include#include#include#define N 1000050#define INF 1000000001using namespace std;int d[106][106];int pre[106][106];int a[106];int main() { int i,j,k,n; while(
2015-01-27 13:41:36 412
原创 POJ 1845
要用一些定理和公式(1) 整数的唯一分解定理: 任意正整数都有且只有一种方式写出其素因子的乘积表达式。 A=(p1^k1)*(p2^k2)*(p3^k3)*....*(pn^kn) 其中pi均为素数(2) 约数和公式:对于已经分解的整数A=(p1^k1)*(p2^k2)*(p3^k3)*....*(pn^kn)有A
2015-01-25 21:34:58 224
原创 poj 3292
打表#include #include #include #include using namespace std;#define MAXN 1111111int H[MAXN+1];void init(){ memset(H, 0,sizeof(H)); //+4确保每个数都是H-PRIME for( int i = 5; i
2015-01-25 16:56:27 271
原创 poj 2635
好久之前看过的一道题,不过一直没有什么思路, 然后突然想起来, 看了下解题报告, 真的很佩服他们 10^100太大我们就改成用1000进制存的, 然后用同余模定理#include #include #include #include #include using namespace std;int knum[1111];char num[1111];
2015-01-25 14:43:38 308
原创 poj 1026
置换群的问题 先求去各个置换群及其长度, 然后看取模后的置换就好了, 长度为len的置换群置换len次相当于没置换#include #include #include #include #include using namespace std;#define MAXN 220int vis[MAXN];int len[MAXN], cnt =
2015-01-25 11:03:26 306
原创 poj 3270
组合数学, 置换群分析:原交换问题相当于一个置换群,因此可以分解成s个不相交循环的并,又因为每个循环内的交换次数一定,我们选择循环中最小的一个数与其它数交换,代价最小。进而考虑到利用所有数中最小的一个m参与其他循环中的交换可能更优,加上这一点判断,问题得以解决。 Cost = sum + Σ(i-> 1~s) min{(ki - 2)*ti, ti+ (k1+1)m};#i
2015-01-24 23:12:56 302
原创 POJ 2409
裸的polya定理#include #include #include #include #include using namespace std;int gcd( int a, int b){ if(b == 0) return a; return gcd(b, a%b);}int n, m;
2015-01-24 16:17:31 343
原创 Necklace of Beads
裸的Polya定理, 不过要注意一点就是N = 0 的情况#include #include #include #include #include using namespace std;int gcd( int a, int b){ if(b == 0) return a; return gcd(b, a%b
2015-01-24 13:47:38 467
原创 Amr and Pins
#include #include #include #include using namespace std;int main(){ double r, x, y, xx, yy; while(scanf("%lf %lf %lf %lf %lf",&r, &x, &y, &xx, &yy) !=EOF) {
2015-01-24 11:18:17 325
原创 Amr and Music
#include #include #include #include using namespace std;#define MAXN 1111int w[111];bool vis[111][MAXN];int dp[MAXN] , ans[111];int path[111][MAXN];int main(){ int n, k;
2015-01-24 11:17:46 365
原创 POJ 3122
也是一个二分的题, 然后学了一个新招, 控制循环次数来控制二分, #include #include #include #include #include using namespace std;#define MAXN 11111#define PI acos(-1.0)#define eps 1e-8double pie[MAXN];dou
2015-01-23 22:13:14 375
原创 poj 1905
角度→弧度公式 2* θr = s 三角函数公式 sinθ= 1/2*L/r 勾股定理 r^2 – ( r – h)^2 = (1/2*L)^2逆向思维解二元方程组:要求(1)式的h,唯有先求r但是由于(2)式是三角函数式,直接求r比较困难很显然的二分查找了。。。。。#include #include #include
2015-01-22 22:52:46 335
原创 poj 3258
最小值最大, 也是二分#include #include #include #include #include using namespace std;#define MAXN 55555#define INF 1111111111int dis[MAXN];int l, r, ll;int n, m, ans;int cal
2015-01-21 23:17:30 298
原创 poj 3272
最大值最小一般都是二分#include #include #include #include #include using namespace std;#define MAXN 111111int num[MAXN];int l, r;int n, m;int cal(int sum){ int res = 0, cnt =
2015-01-21 22:07:39 335
原创 poj 1408
#include #include #include #include #include using namespace std;struct Point{ double x, y; Point () {}; Point(double a, double b) { x = a;
2015-01-21 18:24:12 314
原创 POJ 2013
#include #include #include #include #include using namespace std;#define eps 1e-8#define INF 0x1f1fstruct Cell{ double x, y, z, r;} num[111];double getdis(Cell a, Ce
2015-01-21 14:29:50 367
原创 poj 1039
实践告诉我们有小数的时候选择C++ G++90%会挂#include #include #include #include #include using namespace std;#define eps 1e-8struct Point{ double x, y; Point(){}; Point (double
2015-01-21 10:58:56 322
原创 POJ 1113
我有白痴了原来强制类型转换不会自动四舍五入只会保留整数部分,,,,,好吧我是白痴#include #include #include #include #include #include using namespace std;#define MAXN 1111#define PI 3.1415926struct Point{
2015-01-20 15:27:49 295
原创 Mr. Kitayuta, the Treasure Hunter
#include #include #include using namespace std;#define MAXN 30100int dp[MAXN][510];int num[MAXN];int main(){ int n, m, val; while(scanf("%d %d", &n, &m) != EOF)
2015-01-19 22:35:20 461
原创 Mr. Kitayuta's Colorful Graph
#include #include #include #include using namespace std;#define MAXN 111struct Edge{ int u, v,co; int next;}E[MAXN int head[MAXN int cnt ,ans, s, e;bool vis[MAXN
2015-01-19 22:34:04 340
原创 Mr. Kitayuta's Gift
#include #include #include #include using namespace std;char s[15], res[15];char ans;int pos;bool solve(char *str ,int len){ bool flag = false; for(int i = 0; i {
2015-01-19 22:33:35 404
原创 poj 1019
#include #include #include #include #include using namespace std;#define MAXN 32270long long a[MAXN];long long s[MAXN];//int会REvoid init(){ a[0] = s[0] = 0; for
2015-01-19 10:20:00 327
原创 POJ 1850
#include #include #include #include using namespace std;int num[33][33];void init(){ memset(num, 0, sizeof(num)); for(int i = 0; i num[i][0] = num[i][i] = 1;
2015-01-18 19:35:02 375
原创 POJ 3252
因为bit数组开小了神WA了无数遍#include #include #include #include using namespace std;int bit[33];int dp[32][32];void init(){ memset(dp, 0, sizeof(dp)); //dp[i][j] 长度为 i,
2015-01-18 17:21:59 290
原创 POJ 3347 Kadj Squares
因为数据比较少暴力就行, 数据多的话可以考虑线段树, 题解: 考虑都到整数的问题,把边长扩大根号2倍, 然后画画图就能推算出怎样根据之前的矩形得到当前矩形的左右起点 然后我们考虑相交的情况。 相交无非两种情况 : 1 : 前面的压着后面的 2: 后面的压着前面的 然后我们把覆盖的地方去掉,最后扫一遍就是答案#include
2015-01-17 18:49:36 273
原创 POJ - 1696 Space Ant( 极角排序)
#include #include #include #include #include using namespace std;#define maxn 20000int top = 2;struct Point{ double x,y,len; int id;} Pt[maxn],Stack[maxn],Point_A;
2015-01-16 18:56:31 342
原创 C - Misha and Forest
感觉CF的题都是蛮巧妙的,题里 的每一句话都不是白给的, 就像这道题, 他说图里没有环, 就说明了两点, 1 -> 一定有度为一的节点 2->所有度的和一定是偶数, 确sum/2就等于变数 然后我们可以从 度为1 的节点入手。 它的sv一定是他临近节点的序号, 通过这个我们可以慢慢把所有节点的边都找出来#include #include #include #
2015-01-16 11:42:22 327
原创 B - Misha and Changing Handles
#includeusing namespace std;#includestring old[1001];string new_name[1001];int main(){ int coun=0; int n; int t; cin>>n; t=n; while(n--) {
2015-01-16 00:33:55 612
原创 poj 1414
没有理解好相交什么意思WA无数次 判断线段是否和矩形相交。而所谓“相交”,在计算几何的角度来看,就是线段有一点在矩形内或矩形上。判断的方法如下: 判断线段的两端点是否在矩形内,若是,则线段在矩形内。 判断线段是否与矩形相交,即是否和矩形的四条边中的任意一条边相交(规范相交和不规范相交都算)#include #include #in
2015-01-16 00:00:36 407
原创 poj 1556The Doors
给一个房间,房间的边都是固定的,房间内有一些墙, 每面墙上有两个门, 起点是(0,5) 终点是(5,0), 求起点到终点的最短路径( 遇到墙从门走) 解题思路: 想到怎么 建图就好做了 N条边则有4*N+1个顶点, 我们所要求的就是怎样连接这些定点使得起点到终点的距离最小 因为N最多是10
2015-01-15 12:23:28 370
原创 POJ 1066 Treasure Hunt
题意: 线段与线段相交会形成密室, 求边界上到宝藏所经过的最少线段数N , 则答案就是N+1 思路: 暴力枚举,我们知道, 起点一定是边界上某一点,而终点一定是宝藏。 因为有 doors should only be blasted at the midpoint of the wall of the room being ent
2015-01-06 23:58:33 295
原创 New Year Book Reading
#include #include #include #include #include using namespace std;int w[555];int ord[1111];vector sta;int main(){ int n, m; while(scanf("%d %d",&n, &m) != EOF) {
2015-01-05 21:46:21 610
原创 POJ 2653 Pick-up sticks
开始在实验室入手写的时候就在想会不会TLE,结果真的TLE 开始的想法是一边输入一边找木棍i可以覆盖的他前面的木棍j,如果他可以覆盖掉前面的那vis[i] = true, 开始我还天真的以为是O(N^2)的时间复杂度。可是这样是时间复杂度是 接近 O(N^3)的, 果断TLE了 那我们换一种思路, 当前木棍是I,我找它后面的可以覆盖它的木棍J,如果找到了就直接放弃它,找下一根木棍,如果没有
2015-01-05 00:00:48 378
iOS app 模拟器图片显示不全
2016-01-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人