上一页 1 ··· 22 23 24 25 26 27 28 29 30 ··· 85 下一页
  2012年5月2日
摘要: URAL_1027 可以将若干种状态用整数标记一下,然后依次扫描一遍text的字符,如果在当前状态下满足某些条件就跳转到下一状态,如果跳入到了非法状态就可以直接break了,最后看扫描完text之后是否处于一个正常的状态即可。#include<stdio.h>#include<string.h>#define MAXD 10010int N;char b[MAXD], *ch = "=+-*/0123456789";void change(int &i, int &pat, int &pre){ if(pat == 0) { 阅读全文
posted @ 2012-05-02 21:10 Staginner 阅读(290) 评论(0) 推荐(0) 编辑
摘要: URAL_1026 排个序即可。#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXD 100010int N, K, a[MAXD];char b[MAXD];int cmp(const void *_p, const void *_q){ int *p = (int *)_p, *q = (int *)_q; return *p < *q ? -1 : 1;}void init(){ int i; for(i = 1; i <= N; i ++) scanf(&quo 阅读全文
posted @ 2012-05-02 17:40 Staginner 阅读(152) 评论(0) 推荐(0) 编辑
摘要: URAL_1025 排个序扫描一下即可。#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXD 110int K, a[MAXD];int cmp(const void *_p, const void *_q){ int *p = (int *)_p, *q = (int *)_q; return *p < *q ? -1 : 1;}void init(){ int i; for(i = 0; i < K; i ++) scanf("%d", & 阅读全文
posted @ 2012-05-02 17:32 Staginner 阅读(363) 评论(0) 推荐(0) 编辑
摘要: URAL_1024 实际上就是去求若干循环节的最小公倍数,题目中说明了数据会保证最后结果不大于10^9,不过超int的情况还是很好构造出来的,让循环节长度分别等于一连串的素数即可。#include<stdio.h>#include<string.h>#define MAXD 1010int N, P[MAXD], vis[MAXD];int gcd(int x, int y){ return y == 0 ? x : gcd(y, x % y);}void solve(){ int i, j, k, cnt, ans = 1; for(i = 1; i <= N; 阅读全文
posted @ 2012-05-02 17:22 Staginner 阅读(192) 评论(0) 推荐(0) 编辑
摘要: URAL_1023 如果用SG函数去分析的话,那么就是要求初始位置的SG函数值为0,对于给定一个L简单分析一下各个位置的SG函数值的情况,不难发现如果K是L+1的倍数,那么就能保证初始位置的SG函数值为0,这样就将问题化归成了找K的最小质因子。 这个题目是不存在无解的情况的,因为L=K-1一定可以保证胜利,但并不一定是最优的。 需要注意的是L要>=2,也就是L+1要>=3,所以在找质因子的时候要排除2。如果是预先筛出10000以内的素数再进行判断的话,就要注意K是2乘某个素数时的情况,这个素数就要作为L+1。#include<stdio.h>#include<st 阅读全文
posted @ 2012-05-02 16:33 Staginner 阅读(157) 评论(0) 推荐(0) 编辑
摘要: URAL_1022 拓扑排序。#include<stdio.h>#include<string.h>#define MAXD 110#define MAXM 10010int N, cnt, e, first[MAXD], next[MAXM], v[MAXM], topo[MAXD], vis[MAXD];void add(int x, int y){ v[e] = y; next[e] = first[x], first[x] = e ++;}void init(){ int i, j, k; memset(first, -1, sizeof(first)); .. 阅读全文
posted @ 2012-05-02 13:24 Staginner 阅读(399) 评论(0) 推荐(0) 编辑
摘要: URAL_1021 可以将问题等效成对于x查找10000-x是否在列表中出现过,二分、哈希等都可以。#include<stdio.h>#include<string.h>#define D 33000#define MAXD 66000#define MIN -32768#define MAX 32767int N, h[MAXD];void init(){ int i, k; memset(h, 0, sizeof(h)); for(i = 0; i < N; i ++) { scanf("%d", &k); h[D + k] = 1 阅读全文
posted @ 2012-05-02 13:06 Staginner 阅读(423) 评论(0) 推荐(0) 编辑
摘要: URAL_1020 实际上圆弧部分能够组成一个圆,而直线部分则分别等于各相邻两点间距离。#include<stdio.h>#include<string.h>#include<math.h>#define MAXD 110int N;double R;const double pi = acos(-1.0);struct Point{ double x, y;}p[MAXD];void init(){ int i; for(i = 0; i < N; i ++) scanf("%lf%lf", &p[i].x, &p 阅读全文
posted @ 2012-05-02 12:59 Staginner 阅读(171) 评论(0) 推荐(0) 编辑
  2012年5月1日
摘要: 可以用线段树进行区间染色、合并的操作。 由于数据范围比较小,离散化后直接暴力更新也是可以的。#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXD 10010int N, lc[4 * MAXD], rc[4 * MAXD], mc[4 * MAXD], to[4 * MAXD];int M, tx[MAXD];struct Seg{ int x, y; char b[5]; }seg[MAXD];int cmp(const void *_p, const void *_q){ in 阅读全文
posted @ 2012-05-01 10:56 Staginner 阅读(367) 评论(0) 推荐(0) 编辑
摘要: 可以用f[i][j]表示递推到第i个节点时保留j个树枝的最优解,决策的时候要么只从某个子树中选取,要么就同时从两个子树中选取,而且如果选择了某个子树中的树枝,那么就必须选择和这个子树相连接的树枝。#include<stdio.h>#include<string.h>#define MAXD 110#define MAXM 210int N, Q, e, first[MAXD], next[MAXM], v[MAXM], w[MAXM], f[MAXD][MAXD];void add(int x, int y, int z){ v[e] = y, w[e] = z; ne 阅读全文
posted @ 2012-05-01 09:50 Staginner 阅读(187) 评论(0) 推荐(0) 编辑
上一页 1 ··· 22 23 24 25 26 27 28 29 30 ··· 85 下一页