acm
文章平均质量分 57
皓首不倦
算法爱好者 码农一枚 欢迎志同道合 技术爱好者加微信CODER-GRH 非技术人员勿扰
展开
-
uva第一道题 11636 Hello World
#include #include int case_count;void func(int n){ double r; r = log((double)n)/log(2.0); if(r-(int)r == 0) printf("Case %d: %.0lf\n", case_count, r); else printf("Case %d: %d\n", case_原创 2013-08-14 21:39:34 · 640 阅读 · 0 评论 -
uva 10879 Code Refactoring
简单到让人不敢相信#include void func(int n){ int i; int a, c; int count; count = 0; for(i=2; i<=n-1; i++) { if(2 == count) break; if(n%i == 0) { if(0 ==count) a = i; else原创 2013-09-29 14:08:40 · 471 阅读 · 0 评论 -
uva 579 ClockHands
简单题,不多说了。#include #include void func(int h, int m){ double h_angle, m_angle; double angle; h = h%12; h_angle = (h*60+m) / double(60*12); m_angle = m/(double)60; angle = fabs(h_angle-m原创 2013-09-29 15:44:02 · 790 阅读 · 0 评论 -
10250 The Other Two Trees
这道题乍看之下有些困难,其实题目的意思是告诉两个点的坐标,以这两个点连线作为直径画一个圆,然后求圆上面另外两个点连线过圆心且连线和前面的直径垂直。我的做法是首先求出两个点的中心点,然后平移中心点坐标到原点,题目告诉的两个点也一样平移,假设移动之后两个点中有一个点的坐标为(a,b),那么所求的点平移之后的坐标就分别为(b,-a)和(-b,a),这个根据两向量垂直其向量内积为零以及向量的长度的公式原创 2013-09-29 15:28:14 · 517 阅读 · 0 评论 -
uva 11729 Commando War
#include #include #define MAX_NUM 11000struct node{ int b; int j;};struct node arr[MAX_NUM];int case_count;int cmp(const void *a, const void *b){ struct node *pa = (struct node*)a;原创 2013-09-14 22:12:46 · 676 阅读 · 0 评论 -
uva 1388 Graveyard
这道题要总共的雕像的移动距离最短,那么只需要把每一个雕像移动到离它最近的位置就行了,在解题之前需要证明两点:1.排在最前面的雕像不用移动(这个是显然的)2.两个雕像移动之后不可能在同一个位置(按照距离最短的原则移动每一个雕像,不可能出现两个雕像移动到同一个位置的情况),用反证法比较好证明,只要两个雕像移动到了同一个位置,最后可以推导出的结果是,增加了 雕像的数量,平均距离反而增加了,这原创 2013-09-15 14:28:51 · 762 阅读 · 0 评论 -
uva 10387 Billiard
分析问题时,可以将速度分为水平方向和垂直方向的分量,简单推导之后,可以发现,最后球回到中点的时候,水平方向和垂直方向的路程分别为m*a和n*b,这样垂直方向和水平方向的速度分量比就是(n*b)/(m*a),这样所求角度的正切值就出来了,注意处理90度的特殊情况,然后用路程处以时间,速度的绝对值就出来了,将水平和垂直方向的速度值算平方和开根就是题目求的速度了。#include #inclu原创 2013-09-30 10:23:03 · 657 阅读 · 0 评论 -
uva 10112 Myacm Triangles
这道题需要用到三角形的面积公式,用二维向量的外积解决,0.5*|a叉乘b| = 0.5×|a|*|b|*sin(ab夹角) = 三角形的面积,判断一个点是不是在三角形里面或是在其边上,判断这个点和这个三角形的三个顶点形成的三个三角形的面积和是不是和大三角形的面积相等就行了,注意浮点数的比较不能用==,要用fabs。书上的基础题目终于做完了,有个别几道题一直wrong answer不知怎么回事,以后原创 2013-09-30 11:50:23 · 458 阅读 · 0 评论 -
uva 11291 Dragon of Loowater
#include #include #define MAX_NUM 21000int a[MAX_NUM]; //dragonint b[MAX_NUM]; //warriorint cmp(const void* a, const void *b){ return *((int*)a) - *((int*)b);}void func(int m, int n){原创 2013-09-14 21:47:21 · 582 阅读 · 0 评论 -
uva 11300 Spreading the Wealth
这道题目需要一些代数推导,解法比较精妙推导过程:假设人从1开始到n编号,Ai表示初始时刻每个人手里面的金币数量,M表示金币的平均数,xi表示从i号位置拿出xi个金币给i-1号位置,这个值有正有负,负数表示反向的给于操作,那么可以得出下面的结论:A1-x1+x2=MA2-x2+x3=MA3-x3+x4=M........A(n-1) - x(n-1) + x(1) = M原创 2013-09-15 14:02:15 · 629 阅读 · 0 评论 -
uva 127 "Accordian" Patience
模拟牌移动的过程就行了,注意要使用嵌套的stl库里面的对象list >,注意输出的时候pile和piles的区别。#include #include #include using namespace std;struct node{ char value; char color;};list > l;void func(){ list >::iterator原创 2013-10-01 11:32:12 · 550 阅读 · 0 评论 -
uva 10152 ShellSort
这道题我是用链表来解决的,首先把字符串的序列抽象成整数的序列,将字符串按照最后要求出现的顺序从1到n编号,然后将号数和字符串的对应关系保存在两个map中,得出一开始在初始情况下的字符串的序号序列a,这样问题就变成了怎么按照题目的移动方式把序列a变成序列(1,2,3,4,5......n),观察一下测试数据中给出的移动方法,可以分析一下移动的过程,首先最后的序列是递增的,所以在进行移动的时候,肯定会原创 2013-10-01 20:37:00 · 461 阅读 · 0 评论 -
uva 673 Parentheses Balance
其实就是括号匹配,用堆栈解决就行了,开始时没有考虑清楚,用两个堆栈分别存储()和[],后来发现这样有bug,因为像([)]这样的字符串判断就会出错。#include #include #include using namespace std;char buffer[1000];stack s;void func(){ int i; while(!s.empty(原创 2013-10-01 21:14:35 · 457 阅读 · 0 评论 -
uva 101 The Blocks Problem
模拟题目,考验写代码的耐心了,代码有点长但是含金量不高,堆栈和键值对的应用#include #include #include #include using namespace std;typedef int BLOCK_INDEX;typedef int POSITION;stack pos[30];map m;char buffer[300];void cle原创 2013-10-01 15:35:19 · 500 阅读 · 0 评论 -
uva 133 The Dole Queue
模拟题目,注意更新下一次数人数开始的位置的时候不能更新到要删除掉的位置上面,开始没有注意这个问题,出了运行时错误。#include #include using namespace std;typedef int INDEX;list l;void func(int N, int k, int m){ int i; int a, b; list::iterator原创 2013-10-01 16:38:54 · 513 阅读 · 0 评论 -
vua 10189 Minesweeper
简单练习题目#include #include #define MAX_NUM 102char a[MAX_NUM][MAX_NUM];char r[MAX_NUM][MAX_NUM];int case_count;void func(int m, int n){ int i, j; memset((void*)r, 0, MAX_NUM*MAX_NUM);原创 2013-09-16 12:15:37 · 636 阅读 · 0 评论 -
uva 100 The 3n + 1 problem
简单题目,不多说了,纯当练习,注意输入的两个数的大小关系式不确定的。#include int get_loop_len(int n){ int count; count = 1; while(1) { if(1 == n) break; if(n % 2) n = n*3+1; else n = n >> 1; count ++; }原创 2013-09-16 10:27:02 · 699 阅读 · 0 评论 -
uva 10137 The Trip
#include #include #define MAX_NUM 1005int a[MAX_NUM];long long sum;int cmp(const void *a, const void *b){ return *((int*)b) - *((int*)a);}void func(int n){ int aver, yu_shu; long lon原创 2013-09-16 17:57:22 · 698 阅读 · 0 评论 -
uva 706 LCD Display
这是一道基本练习题,就是有一点麻烦。#include #include char s[20];struct node{ bool part1; bool part2; bool part3; bool part4; bool part5; bool part6; bool part7;};struct node format[10];void init(原创 2013-09-16 19:53:29 · 656 阅读 · 0 评论 -
uva 10267 Graphical Editor
简单练习题目,注意用广搜会超时,完成填充区域功能的时候用深搜。#include #include using namespace std;#define MAX_LEN 300char image[MAX_LEN][MAX_LEN];int M, N;/*struct pos{ int i; int j;};*/void ins_I(int m, int原创 2013-09-16 23:21:14 · 803 阅读 · 0 评论 -
uva 10315 Poker Hands
一道比较消磨时间的简单题目。#include #include struct node{ int num; char color;};struct node b[5];struct node w[5];int cmp(const void *a, const void *b){ struct node *pa = (struct node*)a; struct n原创 2013-09-17 19:59:31 · 741 阅读 · 0 评论 -
uva 10038 Jolly Jumpers
简单的集合应用题目#include #include using namespace std;#define MAX_LEN 3001int num[MAX_LEN];set s;void func(int n){ int i; int temp; s.clear(); for(i=0; i<n-1; i++) { temp = num[i] -原创 2013-09-17 16:29:42 · 671 阅读 · 0 评论 -
uva 10050 Hartals
简单的集合应用题目#include #include using namespace std;#define DANG_NUM 105int h[DANG_NUM];set s;void func(int n, int p){ int i, j; s.clear(); for(i=0; i<p; i++) { for(j=h[i]; j<=n; j+=h[i原创 2013-09-17 20:26:17 · 479 阅读 · 0 评论 -
uva 10010 Where's Waldorf?
简单的字符串题目原创 2013-09-19 16:01:14 · 728 阅读 · 0 评论 -
uva 10361 Automatic Poetry
简单字符串题目#include #include #define MAX_LEN 150char I1[MAX_LEN];char I2[MAX_LEN];char s1[MAX_LEN];char s2[MAX_LEN];char s3[MAX_LEN];char s4[MAX_LEN];char s5[MAX_LEN];void split(){ cha原创 2013-09-19 16:42:15 · 542 阅读 · 0 评论 -
uva 537 Artificial Intelligence?
简单字符串处理题目#include #include #define MAX_LEN 1000char buffer[MAX_LEN];int case_count;void func(){ double u, i, p; char temp[100]; char *start, *pp; u = i = p = -1.0; start = buffer原创 2013-09-19 17:32:49 · 1082 阅读 · 0 评论 -
uva 409 Excuses, Excuses!
简单字符串题目,有一点集合的小应用#include #include #include #include #include using namespace std;#define EXECUSE_NUM 25#define EXECUSE_LEN 80#define KEY_NUM 25#define KEY_LEN 25char execuse原创 2013-09-19 21:01:38 · 543 阅读 · 0 评论 -
uva 10878 Decode the tape
这到题目有点搞笑,什么条件也没有,输入数据长度也不知道是多少,开始不知道什么意思,其实就是磁带有0的地方代表二进制里面的1位为1,一行数据代表一个ascll码。#include #include char buffer[20];char show_string[5000];char get_char(){ char num; num = 0; if('o' == b原创 2013-09-19 21:31:59 · 474 阅读 · 0 评论 -
uva 10815 Andy's First Dictionary
字符串加集合应用,注意读数据的结束判断和用scanf不同,应该是gets(buffer)!=NULL这样。#include #include #include #include #include #include using namespace std;char buffer[250];set dict;void split(){ int i, len, cou原创 2013-09-19 23:04:07 · 433 阅读 · 0 评论 -
uva 401 Palindromes
简单字符串题目#include #include #include #include using namespace std;map pal_map;char buffer[30];void func(void){ int i, len; bool is_mirror, is_pal; map::iterator it; is_pal = true; is_m原创 2013-09-18 21:21:29 · 440 阅读 · 0 评论 -
uva 644 Immediate Decodability
字符串应用加集合应用,每一次比较的时候只需要判断一个字符串的字典序前面的所有的字符串是不是他的前缀就行了,判前缀的时候使用string类的s1.compare(0, s2.length(), s2)这样的函数就行了。#include #include #include #include #include #include using namespace std;set s;原创 2013-09-20 11:38:13 · 495 阅读 · 0 评论 -
uva 748 Exponentiation
这道题用Java的BigDecimal要好做一些,算次方的时候用二分法优化一下应该就不会有超时发生了。注意输出格式的设置,不能用科学计数法输出,还要去掉前后的零,去掉后面的零用BigDecimal的成员函数stripTrailingZeros(),然后调用String类的toPlainString()函数得到不用科学计数法的字符串,最后自己写个循环去掉前面的零就行了。import ja原创 2013-09-20 16:52:30 · 599 阅读 · 0 评论 -
uva 340 Master-Mind Hints
简单重集和查找应用#include #include #include using namespace std;#define MAX_LEN 1000int code[MAX_LEN];int answer[MAX_LEN];int case_count;void func(int len){ int a, b; int i; multiset s;原创 2013-09-20 18:34:28 · 535 阅读 · 0 评论 -
uva 10420 List of Conquests
set 和 map的嵌套应用,很搞笑的是typedef map> Record;这样在wendows下面编译可以过,但是跑到服务器上面的gnu g++就变异过不了了,要这样:typedef map > Record; (就少了一个空格,也不至于编译报错这么严重吧?),下面是AC代码:#include #include #include #include #include #incl原创 2013-09-20 19:44:41 · 511 阅读 · 0 评论 -
uva 10115 Automatic Editing
字符串题目,代码里面用了一点vector的东西,主要使用string类,以前没怎么用过,总结一下用到的string类的几个成员函数:string::find(string str, int start_pos)在字符串里面找第一个出现子串str的位置,位置从0开始,如果找不到子串,返回string::nposstring::erase(int start_pos, int原创 2013-09-20 14:19:27 · 577 阅读 · 0 评论 -
uva 424 Integer Inquiry
大数操作,直接上Javaimport java.math.BigDecimal;import java.util.Scanner;public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = ""; BigD原创 2013-09-20 15:04:59 · 519 阅读 · 0 评论 -
uva 10106 Product
又是一道简单的大数操作,直接用Javaimport java.math.BigDecimal;import java.util.Scanner;public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = "";原创 2013-09-20 15:12:11 · 476 阅读 · 0 评论 -
uva 465 Overflow
又是一道大数的题目,可以直接用Java解决,用C++处理起来比较麻烦import java.math.BigDecimal;import java.util.Scanner;public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in);原创 2013-09-20 15:45:48 · 942 阅读 · 0 评论 -
uva 10494 If We Were a Child Again
简单的大数题目,用Java解决就行了,不再赘述。import java.math.BigDecimal;import java.math.BigInteger;import java.util.Scanner;public class Main{ public static BigDecimal func(BigDecimal num, int n) { if(n == 1)原创 2013-09-20 18:03:58 · 530 阅读 · 0 评论 -
uva 10474 Where is the Marble?
快排加二分查找#include #include #include #define MAX_LEN 10005int pos[MAX_LEN]; int case_count;int cmp(const void *a, const void *b){ return *((int*)a) - *((int*)b);}//二分法对结果查找int find(int原创 2013-09-20 20:36:07 · 508 阅读 · 0 评论