很水很水的签到题
文章平均质量分 53
catfishbear
acmer
展开
-
uva 729 - The Hamming Distance Problem
题意大概就是给出01串,让你输出全排列。 可以用next_permutation水过。 用dfs的时候注意添加0或者1的时候判断是否重复和注意不要重复递归。 #include #include const int MAXN=20; int P[MAXN],A[MAXN]; void dfs(int cur,int n){ if(cur==n){ for(int i=0原创 2014-03-03 18:59:39 · 449 阅读 · 0 评论 -
uva 10110 - Light, more light
判断最后一盏灯,而一个数因式分解,必为两个不同数相乘,(除非完全平方数),则必为一开一关。 只用判断最后一个数是否为完全平方数即可。 注意2^32已经爆int。。。这原因WA了好多次。 #include #include #define ll long long int main(){ // freopen("in.txt","r",stdin); ll i,m;原创 2014-03-04 19:15:50 · 406 阅读 · 0 评论 -
uva 10152 - ShellSort
名字叫希尔排序,不过好像没什么关系~。 给你一堆龟壳,龟壳上面有一字符串,然后再给定指定顺序的龟壳,用最少的操作次数达到这个顺序,每次操作只能将一个龟壳抽出,放到最上面。 将原来的顺序和指定顺序从下往上比较,若原来顺序的字符串在指定顺序的字符串上面则匹配,就是抽出别的时候会自动掉下来了,最后按照未匹配的指定字符串输出即可。 #include #include #include #includ原创 2014-03-05 15:16:41 · 427 阅读 · 0 评论 -
uva 272 - TeX Quotes
水题…… #include int main(){ //freopen("in.txt","r",stdin); char c; bool q = true; while(~scanf("%c",&c)){ if(c=='"'){ printf("%s",q?"``":"''"); q = !q;原创 2014-03-01 09:12:00 · 479 阅读 · 0 评论 -
uva 579 - ClockHands
英文一堆真心难得看懂。。 就是给一时间,求时间和分针的夹角(小于180度的)。 注意一点,就是分针动的时候时针会动。。找个钟看下。。 #include #include #include int main() { //freopen("in.txt","r",stdin); char a[10]; while(gets(a)){ if(strcmp(a原创 2014-03-02 21:29:03 · 369 阅读 · 0 评论 -
uva 623 - 500!
求阶乘。 最多1000; 必须先把每个阶乘用字符串存好,要不然会超时。。 用高精度乘法从一开始算出每个值。然后询问直接输出 #include #include #include using namespace std; const int MAXN=3000; const int M=1000+10; string sol[M]; char fact[MAXN]; int len; voi原创 2014-03-02 21:34:35 · 1243 阅读 · 0 评论 -
uva 10161 - Ant on a Chessboard
观察奇数的平方在第一列上,偶数的平方在第一行上交替。 #include #include int main() { //freopen("in.txt","r",stdin); int a; while(scanf("%d",&a)!=EOF){ if(a==0) break; int b=sqrt(a); int temp原创 2014-03-05 15:22:55 · 405 阅读 · 0 评论 -
uva 10361 - Automatic Poetry
字符串操作的。 将两个 #include #include const int MAXN=100+10; int main(){ //freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); int T; char a[MAXN],b[2][MAXN],c[2][MAXN]; scanf(原创 2014-03-05 15:29:14 · 408 阅读 · 0 评论 -
uva 301 - Transportation
dfs+回朔 怎么样接受订单收益最大。 第一个数字是列车最大的容量,第二个是B的站点,第三个数字是订单的数量。 然后每个人每站路一元钱。所以要尽可能多的让人上车,但又不能超过最大容量。 用回朔法,从第一个订单开始接受,然后使要到达订单终点站和起点站之间的车站人数全部都加订单上的人数。 若超过容量,则直接返回。 #include #include const int MAXN=30; i原创 2014-03-01 09:33:19 · 458 阅读 · 0 评论 -
uva 465
水题。大数相加。 两个数相加,判断哪个数和和是否为大数。 #include #include #include const int MAXN=10000; const int inf=pow(2,31)-1; char a[3][MAXN]; int main(){ //freopen("in.txt","r",stdin); while(scanf("%s%s%s",a[0]原创 2014-03-01 14:19:39 · 391 阅读 · 0 评论 -
uva 350 - Pseudo-Random Numbers
计算给定的算法中能均匀出现多少个数字。 注意要处理有可能种子不在循环里面。 #include #include const int MAXN=1e4+10; bool used[MAXN]; int main() { //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int Z,I,M,L,c原创 2014-03-01 09:50:33 · 385 阅读 · 0 评论 -
uva 621 - Secret Research
水题~ 按照题意判断4种情况就行了 #include #include int main() { int n; //freopen("in.txt","r",stdin); char a[100]; scanf("%d",&n); while(n--){ scanf("%s",a); if(strcmp(a,"1")==0原创 2014-03-02 21:31:59 · 455 阅读 · 0 评论 -
uva 10025 - The 1 2 ... n = k problem
就是给出一个数,最少能用多少个数表示。 每个数前面为正号或者负号。 可以只考虑正数(输入的负数当正数也行。算出正数的符号全变就行,数字不会改变); 先把前n项和的值存入数组,直到大于1e9,题目给的最大值。 然后判断所给的数字在前k与k+1项的和之间,然后判断与小的那个差,若为奇数,则最少数+1,直到为偶数。 因为每次将一个负号变成正号的时候,是减去两倍的这个数,必为偶数。 还有,注意原创 2014-03-04 19:01:31 · 466 阅读 · 0 评论 -
uva 129 - Krypton Factor
刘汝佳《算法竞赛入门经典》的一道例题。 困难的串,没有连续的重复字符串 AA ABAB这种。。 输出第n个由前L个大写字母组成的字符串 和全排列有点像,一个字母一个字母往后面放,若满足条件,为困难的串,则继续递归。 #include #include const int MAXN=100; char a[MAXN]; int n,L,cnt; bool dfs(int cur){原创 2014-02-28 16:11:22 · 1411 阅读 · 0 评论 -
uva 297 - Quadtrees
四叉树,p代表后面4个字符代表下面四个子结点的状态,f则为黑,e则为白。 题目中说深度不超过5层,不知道算了根结点没,我觉得按照32*32应该是6层。 我的方法是不管如果是f和e则将它下面的结点(假象存在)全部标记,最后两个相加的时候只用判断是否有任意一个这个点为黑即可。 若为p则判断下一个字符。 #include #include const int MAXN=3000; char a[原创 2014-03-01 09:20:05 · 507 阅读 · 0 评论 -
uva 539 - The Settlers of Catan
给出n个结点,m条边。 求出最长的路径,每条边只能用一次。 用回朔法,直到没有一点可以走。则为最大值。 #include #include const int MAXN=30; int vis[MAXN][MAXN]; int cnt,n,m; void dfs(int cur,int start){ if(cur>cnt) cnt=cur; for(int j=0;j<n;原创 2014-03-01 14:41:22 · 415 阅读 · 0 评论 -
uva 10098 - Generating Fast
全排列,就是给一个字符串,输出全排列。。 用next_permutation水过了。。 #include #include #include using namespace std; const int MAXN=15; char a[MAXN]; int main(){ // freopen("in.txt","r",stdin); int T; scanf("%d",原创 2014-03-04 19:09:56 · 405 阅读 · 0 评论 -
uva 10935 - Throwing cards away I
队列的一道题,题目就是给定1到n个数字,每次从最前面丢一个,然后把下一个放到最后面,直到只剩下一个。 #include #include using namespace std; int main() { // freopen("in.txt","r",stdin); queueq; int n; while(~scanf("%d",&n)){ if原创 2014-03-05 15:43:46 · 576 阅读 · 0 评论 -
uva 113 - Power of Cryptography
求一个大数开n次方,本来以为要用高精度的,结果拿double水过了,不知道为啥……好像用高精度蛮麻烦。。 #include #include int main(){ // freopen("in.txt","r",stdin); double n,p; while(~scanf("%lf%lf",&n,&p)){ double k = pow(p,1/n);原创 2014-02-28 15:55:23 · 375 阅读 · 0 评论 -
uva 409 - Excuses, Excuses!
给定n个关键词,和m句借口。 找出哪句借口中有最多的关键词。不论大小写。 我先关键词存入一个string数组中,再把每句话中出现的单词存入一个string数组中。然后依次比较,统计出现过的次数。 #include #include #include #include #include using namespace std; const int MAXN=30; int counter[MA原创 2014-03-01 10:03:42 · 398 阅读 · 0 评论 -
uva 572 - Oil Deposits
搜索水题。bfs。 求有多少块油田,在周围算在一起,八个方向宽搜即可。 #include #include const int MAXN=105; int vis[MAXN][MAXN]; char maze[MAXN][MAXN]; int dx[]={1,1,1,0,0,-1,-1,-1}; int dy[]={-1,0,1,-1,1,-1,0,1}; void dfs(int x,int原创 2014-03-02 21:19:32 · 770 阅读 · 0 评论 -
uva 550 - Multiplying by Rotation
给出三个数,第一个数为几进制情况下,第二个数为最后一个数,第三个数为乘数 求出最少要多少位的数才能够使最后一个数变为前一个数。即数a就是把数b的最后一位移到了最前面 模拟乘法这个过程即可。 #include int main() { //freopen("in.txt","r",stdin); int a,b,c,i; while(~scanf("%d%d%d",原创 2014-03-06 17:45:29 · 432 阅读 · 0 评论 -
uva 455
水题,求字符串中的最小周期串 #include #include int main() { //freopen("in.txt","r",stdin); int N; scanf("%d",&N); while(N--){ char a[100]; scanf("%s",a); int la = strlen(a);原创 2014-03-01 14:18:05 · 541 阅读 · 0 评论 -
uva 575 - Skew Binary
关于进制。。好像也没什么关系。 注意题目中的那个式子,拆开来看,会发现和2进制一样算(系数有2直接相乘)然后减去每一项的系数。 直接相乘,然后把系数和记录,最后相减即可。 #include #include int main() { //freopen("in.txt","r",stdin); char a[40]; while(~scanf("%s",a)){原创 2014-03-02 21:25:57 · 383 阅读 · 0 评论 -
uva 639 - Don't Get Rooked
dfs 。用回朔 和八皇后差不多。不过多了木块格挡。即可以将两颗棋子放到木块的两侧。 每次放完一个棋子后,4个方向向前方标记,直到遇到格挡或者出棋盘。然后递归下一个可以放的。 记得递归出来后回朔,注意这个地方不能直接赋值为1作为标记,有可能两个棋子都可以攻击到这里。 所以每一个都加1,若为0的时候,则可以放。 #include #include const int MAXN=5; cha原创 2014-03-02 21:40:53 · 429 阅读 · 0 评论 -
uva 10474 - Where is the Marble
就是找一个数字n在前面给的m个数中是第几大的。 如果有一样的话,取第一次出现的。 数据量很小,直接排序,然后二分查找即可。 不过如果是10^7的数据量,则不能直接排序然后查找。 手写快速排序查看划分区域和要查找的数的大小,然后只进行一边的递归即可。(这题不用这样) #include #include #include using namespace std; const int MAXN原创 2014-03-05 15:39:24 · 415 阅读 · 0 评论 -
uva 327 - Evaluating Simple C Expressions
模拟。这个不知道。。 a,b,……到z 依次为1到26,然后给你一表达式 前置++和前置-- 都先运算, 后置++和后置--都后运算,然后判断表达式的值。和最后各个字母的值 作法比较奇怪。。 先把表达式中的空格和回车全部去掉,弄成一没有间隔的表达式 用一个数组存储各个字母的改变量。最后输出字母再运算。 然后将后置++ 变成 +0。。把 前置++变成+1.。 把后置-- 变成-0。把前置原创 2014-03-01 09:41:55 · 395 阅读 · 0 评论 -
uva 439 - Knight Moves
给定起点和终点,最少需要几步才能走到。骑士按照马的走法。 简单的bfs。 #include #include #include using namespace std; const int MAXN=128; typedef struct{ char a[3]; int time; }solve; solve d1,d2; int dx[]={-1,-2,-2,-1,1,1,2原创 2014-03-01 10:33:53 · 365 阅读 · 0 评论 -
uva 524 - Prime Ring Problem
素数环,将n数字内的数字通过一定顺序连接,使每个数字与周围数字之和均为素数。 输出可以的排列。 注意不要忘了判断最后一个数字和第一个数字。 用dfs+回朔,若有一个不为素数,则回来判断下一个 #include #include const int MAXN=100; int a[MAXN],n; bool isp[MAXN],vis[MAXN]; void is_prime(){原创 2014-03-01 14:28:47 · 506 阅读 · 0 评论 -
uva 568 - Just the Facts
求n的阶乘的最后一个非0数,因为是10000以内的。 先把每个阶乘存到一个数组内。 #include #include const int MAXN=1e4+10; int store[MAXN]; int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); memset(sto原创 2014-03-02 21:16:48 · 422 阅读 · 0 评论 -
uva 424 - Integer Inquiry
大数相加 #include #include const int MAXN=100+10; char a[MAXN]={0}; int b[MAXN]={0}; int main(){ //freopen("in.txt","r",stdin); while(gets(a)){ //读取每行数字,直到为0; if(s原创 2014-03-01 10:30:58 · 374 阅读 · 0 评论 -
uva 408 - Uniform Generator
给定一个数和一个M,按照题意操作能否得出M以内所有数 #include #include const int MAXN=1e7+10; bool used[MAXN]; int main() { //freopen("in.txt","r",stdin); int S,M; while(~scanf("%d%d",&S,&M)){ int s=0,coun原创 2014-03-01 09:54:21 · 349 阅读 · 0 评论 -
uva 146 - ID Codes
给你一串字符串,输出它的下一个排列,若无,则输出no successor。 直接用next_permutation水过。。 #include #include #include using namespace std; const int MAXN=60; char a[MAXN]; int main(){ //freopen("in.txt","r",stdin); whil原创 2014-03-01 08:53:36 · 407 阅读 · 0 评论 -
uva 514
看能否按照指定顺序将列车输出。 车站只能从上面进去上面出去,和栈一样。 先按照初始顺序进去,如果和指定出站的顺序相同则直接出栈,若不同先入栈,到最后进去完后再出来,若与指定顺序不同,则不能满足题意。 #include #include using namespace std; const int MAXN=1e3+10; int a[MAXN]; int main() { //fre原创 2014-03-01 14:24:00 · 410 阅读 · 0 评论 -
uva 10035 - Primary Arithmetic
水题。求两个数相加进了多少次位,模拟加法过程即可。 #include int main() { //freopen("in.txt","r",stdin); int a,b; while(~scanf("%d%d",&a,&b)){ if(!a && !b) break; int temp1=0,temp2=0,sum=0,counter=原创 2014-03-04 19:06:15 · 433 阅读 · 0 评论 -
uva 263 - Number Chains
给一串数字,将它的数字升序排列得到一个新数,降序排列得到一个新数,然后用降序的减去升序的得到一个新数。 之后循环这个操作。直到新数在之前已经出现过。 输出这个链的长度和过程。 #include #include #include using namespace std; const int MAXN=1000+10; int sol[MAXN]; char c[12]; bool cmp(c原创 2014-03-01 09:10:40 · 964 阅读 · 0 评论 -
uva 784 - Maze Exploration
图的dfs水题。 就是从一个点开始,看可以给哪些地方涂色。 直接深搜即可。 #include #include const int MAXN=100; char a[35][MAXN]; int dx[]={-1,0,0,1}; int dy[]={0,1,-1,0}; void dfs(int x,int y){ a[x][y]='#'; for(int i=0;i<4;i原创 2014-03-03 19:02:07 · 469 阅读 · 0 评论 -
uva 10905 - Children's Game
贪心。 给你n个数字让你输出他们合起来的最大数字,任意排列。 就是让尽可能让每一位都最大。比如9和90应该让9排在前面。 用STL和重载。不过重载的cmp注意不能写成如果两个数前面相等,然后比较那个长的数后面和那个短的数。 如: A1A2A3A4A5A6B1B2B3B4 B1B2B3B4A1A2A3A4A5A6 我刚开始做,比较完前4个之后,然后用A5和B1(即又重复比B)直到比完A原创 2014-03-06 18:01:58 · 448 阅读 · 0 评论 -
uva 112 - Tree Summing
数据结构。 给一颗树,求根到各个最下面的结点和。有则yes,无则no。 主要是输入的 时候不是一行,有空格和回车。 我用栈把树的结点值求存入,然后到最后判断,判断完拿出来,不过貌似处理蛮麻烦的。 #include #include #include using namespace std; int main(){ //freopen("in.txt","r",stdin);原创 2014-02-28 15:50:39 · 426 阅读 · 0 评论 -
uva 216 - Getting in Line
给出n个结点的横纵坐标,将它们连成一条线,怎么样使他们的的距离最小。 用回朔法,以任意一个为起点,先连到最后一个,然后回朔。 若比当前最小值小,则用数组记录路线。 #include #include #include const int MAXN=10; double dis(int x1,int y1,int x2,int y2){ return sqrt((x1-x2)*(x1-原创 2014-03-01 09:02:38 · 406 阅读 · 0 评论