摘要:
题意:一些人把一些箱子搬到楼上,这些人从各自的位置以相同的速度移动,有的向上,有的向下,向上的有箱子,向下的没箱子。到顶后放下箱子同速返回。若两人相遇,则向上的人把箱子给向下的人,同时两人同时转身向反方向走。问把箱子全搬上去要用多久。分析:我们可以忽略题中的人,认为只是一些箱子在移动,这些箱子的移动规律很明显,就是在不停地上升。我们还可以认为,两个人相遇并没有交换箱子,而是擦肩而过,这样对箱子和人都没有任何影响。因为a上b下,a,b相遇,就变成了a替b向上,b替a向下。所以本题就变成了所有的人轮流来一楼取箱子,取完了就向上走,走到楼顶,再走下来,再取。这样只要算出整体轮回了多少次,再加上多余的 阅读全文
posted @ 2011-07-25 21:05
undefined2024
阅读(154)
评论(0)
推荐(0)
摘要:
简单题View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>using namespace std;int dcount;int n;char word[1005][50];int father[1005];int fa;int dir[1005][1005];int num[1005];int id[1005];void ins(char *st){ if (strcmp(st, &q 阅读全文
posted @ 2011-07-25 20:11
undefined2024
阅读(384)
评论(0)
推荐(0)
摘要:
题意:多项式求余分析:求余方法是,每次用被除式减去除式,直到不能减为止,具体做法是每次将除式乘以若干个x,使得除式与被除式的最高次项相同,然后用被除式减去除式。View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>usingnamespace std;#define maxn 2005int fn, gn, hn, en;int f[maxn], g[maxn], h[maxn], e[maxn];void input(){ scanf( 阅读全文
posted @ 2011-07-25 19:18
undefined2024
阅读(362)
评论(0)
推荐(0)
摘要:
简单题View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define maxn 1000int f[5];char st[maxn];char ans[maxn];int len;int group(char c){ if (c >= 'a' && c <= 'i') return 0; if (c >= 'j' 阅读全文
posted @ 2011-07-25 16:36
undefined2024
阅读(227)
评论(0)
推荐(0)
摘要:
floyd大约是n^3的效率,32msView Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define maxl 35#define maxn 205#define maxm 300int m, n, l;int member[maxl];int dist[maxn][maxn];int wall[maxm][maxm];int map[maxm][maxn];void floyd(){ for 阅读全文
posted @ 2011-07-25 15:08
undefined2024
阅读(189)
评论(0)
推荐(0)
摘要:
简单题View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define maxn 10int f[maxn];void input(){ for (int i = 1; i < 9; i++) scanf("%d", &f[i]);}void print(){ char ch[2]; ch[0] = '+'; ch[1] = '-' 阅读全文
posted @ 2011-07-25 13:55
undefined2024
阅读(207)
评论(0)
推荐(0)
摘要:
题意:把时间转换为公制,给普通的出年月日时分秒,然后从2000/1/1开始是公制的时间起始点,每天有10小时,每小时有100分,每分有100秒计算,问给出的普通的时间点,在公制中对应的时间点的公制表示是多少。分析:难点在于给出年月日,统计过了多少天。本题以2000年为起点恰为闰年。我们可以先将2000年刨除,从2001年开始,2001年是一个崭新的400年的开头,所以就恰好符合除法规律,例如2008年是2001年开始的第8年,8/4=2,2001~2008出现过2个闰年,2009年,9/4=2,出现过两个闰年。所以从2001年起(包括2001年)到n年(包括n年),所包含的闰年数可以直接通过除 阅读全文
posted @ 2011-07-25 12:50
undefined2024
阅读(376)
评论(0)
推荐(0)
摘要:
题意:给定一些单词,如果一个单词的尾字母与另一个的首字母相同则可以连接。问是否可以每个单词用一次,将所有单词连接,可以则输出字典序最小的序列。分析:把每个字母作为一个结点。每个单词作为一条边。这样就可以把问题转化为欧拉路径。现判断欧拉路径是否存在。若存在则找到欧拉路径,找的方法是,先找到出度>入度(无欧拉回路)的结点,从起点开始,dfs(v,e),v是当前结点,e是到v的边。用vis数组记录某条边是否被访问过,从v开始继续搜索未访问过的边。每层dfs结束时把该层的边入栈。dfs整个结束后,把边依次出栈,得到的就是欧拉路径。void dfs(int v, int e){ vis[e] = 阅读全文
posted @ 2011-07-25 10:30
undefined2024
阅读(1290)
评论(0)
推荐(3)