|
Posted on 2011-07-01 20:04 Uriel 阅读(403) 评论(0) 编辑 收藏 引用 所属分类: 考研&保研复试上机题
各种悲剧, 深刻感觉到... ... 成绩是王道, 比赛什么的都是浮云... ... 暑假好好啃DS和高数吧... ... 再切套水题放松一下... ... 不过这套比起前面三年的还真不算很水的... ... 貌似现在HDU上的ZJU 2005-2011都切了... ... 1. 又一版 A+B 这个A+B很水啦, 递归输出实现进制转换就行
//浙大计算机研究生复试上机考试-2008年 又一版 A+B
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define I __int64
![](/Images/OutliningIndicators/None.gif)
int m;
I a, b;
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) void print(I x) {
if(!x) return;
print(x / m);
printf("%d", x % m);
}
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) int main() {
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) while(scanf("%d", &m), m) {
scanf("%I64d %I64d", &a, &b);
a += b;
if(!a) printf("0");
else
print(a);
puts("");
}
return 0;
}2. 欧拉回路 这题只是判欧拉回路是否存在, 不用输出欧拉回路的话就不用那个神奇的套圈法了 根据欧拉回路条件, 首先图要连通(一开始WA了一次忘记这个条件了), 这个嘛, BFS一下就好了, 再判下是否每个结点度数都是偶数
//浙大计算机研究生复试上机考试-2008年 欧拉回路
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 1010
![](/Images/OutliningIndicators/None.gif)
int n, m, deg[N], f[N][N], vis[N], q[N * 2];
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) void BFS() {
int l, r, i;
memset(vis, 0, sizeof(vis));
q[0] = 1; vis[1] = 1;
l = 0, r = 1;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) while(l < r) {
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) for(i = 1; i <= n; ++i) {
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if(i != q[l] && !vis[i] && f[i][q[l]]) {
vis[i] = 1;
q[r++] = i;
}
}
++l;
}
}
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) int main() {
int x, y, i;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) while(scanf("%d", &n), n) {
scanf("%d", &m);
memset(deg, 0, sizeof(deg));
memset(f, 0, sizeof(f));
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) for(i = 0; i < m; ++i) {
scanf("%d %d", &x, &y);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if(!f[x][y]) {
deg[x]++;
deg[y]++;
f[x][y] = f[y][x] = 1;
}
}
BFS();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) for(i = 1; i <= n; ++i) {
if(!vis[i] || deg[i] % 2) break;
}
if(i <= n) puts("0");
else
puts("1");
}
return 0;
}3. 继续畅通工程 继续prim模板题, 不解释
//浙大计算机研究生复试上机考试-2008年 继续畅通工程
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 110
#define INF 0x3f3f3f3f
#define min(x, y) (x < y ? x : y)
![](/Images/OutliningIndicators/None.gif)
int n, ans, adj[N][N], lowcost[N], closest[N];
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) void prim(int c[][N]) {
bool s[N];
s[1] = true;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) for(int i = 2; i <= n; ++i) {
lowcost[i] = c[1][i];
closest[i] = 1;
s[i] = false;
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) for(int i = 1; i < n; ++i) {
int mi = INF, j = 1;
for(int k = 2; k <= n; ++k)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if(lowcost[k] < mi && !s[k]) {
mi = lowcost[k];
j = k;
}
s[j] = true;
for(int k = 2; k <= n; ++k)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if(c[j][k] < lowcost[k] && !s[k]) {
lowcost[k] = c[j][k];
closest[k] = j;
}
}
}
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) int main() {
int i, j, x, y, c, st;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) while(scanf("%d", &n), n) {
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) for(i = 1; i <= n; ++i) {
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) for(j = 1; j <= n; ++j) {
if(i == j) continue;
else
adj[i][j] = adj[j][i] = INF;
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) for(i = 0; i < n * (n - 1) / 2; ++i) {
scanf("%d %d %d %d", &x, &y, &c, &st);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if(!st) {
adj[x][y] = adj[y][x] = min(adj[y][x], c);
}
else
adj[x][y] = adj[y][x] = 0;
}
prim(adj);
ans = 0;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) for(i = 1; i <= n; ++i) {
ans += lowcost[i];
}
printf("%d\n", ans);
}
return 0;
}4. 魔咒词典 5000Ms的时限, 果断水过去了... ... 2011.09.17 PS: 坑爹啊... 九度怎么都AC不能...
//浙大计算机研究生复试上机考试-2008年 魔咒词典
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define N 100010
#define Q 1010
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) struct M {
int mk, id, ans;
char name[25], s[100];
}p[N], q[N];
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) bool cmp1(M a, M b) {
return strcmp(a.name, b.name) < 0;
}
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) bool cmp2(M a, M b) {
return strcmp(a.s, b.s) < 0;
}
![](/Images/OutliningIndicators/None.gif)
int nq, id[Q];
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) int main() {
int i, j, n = 0, pos1, pos2;
char s[110];
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) while(gets(s), strcmp(s, "@END@")) {
for(i = 0; s[i] != '['; ++i);
for(j = ++i; s[j] != ']'; ++j);
strncpy(p[n].name, &s[i], j - i);
strncpy(q[n].name, &s[i], j - i);
strcpy(p[n].s, &s[j + 2]);
strcpy(q[n].s, &s[j + 2]);
++n;
}
sort(p, p + n, cmp1);
sort(q, q + n, cmp2);
scanf("%d", &nq);
getchar();
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) for(i = 0; i < nq; ++i) {
gets(s);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if(s[0] == '[') {
s[strlen(s) - 1] = '\0';
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) for(j = 0; j < n; ++j) {
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if(!strcmp(p[j].name, &s[1])) {
puts(p[j].s);
break;
}
}
if(j == n) puts("what?");
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) else {
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) for(j = 0; j < n; ++j) {
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if(!strcmp(q[j].s, s)) {
puts(q[j].name);
break;
}
}
if(j == n) puts("what?");
}
}
return 0;
}5. 毕业bg 简单DP, 好久不写DP, 一点感觉都没有了... ... 还看了一下解题报告才搞出sample, dp数组NC开小了还WA了一次... ...
//浙大计算机研究生复试上机考试-2008年 毕业bg
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define N 35
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) struct M {
int h, l, t;
}p[N];
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) bool cmp(M a, M b) {
if(a.t != b.t) return a.t < b.t;
return a.h < b.h;
}
![](/Images/OutliningIndicators/None.gif)
int n, mxt, dp[1010];
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/ExpandedBlockStart.gif) int main() {
int i, j;
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) while(scanf("%d", &n), n > 0) {
mxt = 0;
memset(dp, 0, sizeof(dp));
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) for(i = 1; i <= n; ++i) {
scanf("%d %d %d", &p[i].h, &p[i].l, &p[i].t);
mxt = max(p[i].t, mxt);
}
sort(p + 1, p + n + 1, cmp);
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif) for(i = 1; i <= n; ++i) {
for(j = p[i].t; j >= p[i].l; --j)
dp[j] = max(dp[j - p[i].l] + p[i].h, dp[j]);
for(j = p[i].t + 1; j <= mxt; ++j)
dp[j] = max(dp[j], dp[j - 1]);
}
printf("%d\n", dp[mxt]);
}
return 0;
}
|