摘要:
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) { 阅读全文
摘要:
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 阅读全文
摘要:
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", & 阅读全文
摘要:
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; 阅读全文
摘要:
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 阅读全文
摘要:
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)); .. 阅读全文
摘要:
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 阅读全文
摘要:
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 阅读全文