编程题解
文章平均质量分 62
水刃
I am on the way to find my way!
展开
-
ZOJ 1010
这道题是考察计算几何的,主要有两个点。一是根据有序输入的多边形的顶点求出任意多边形的面积,二是判断不相邻的边是否相交,如果相交则不构成多边形。计算任意多边形的面积需要线性代数的知识,我也没接触过,详细的推导过程可以自行百度,介绍的很详细。大体上就是将多边形切分成多个三角形,然后用各个三角形的矢量面积求和得出多边形面积。最后,得出一个普适的公式,即,这里P(k)和P(k+原创 2015-04-18 00:18:31 · 889 阅读 · 0 评论 -
ZOJ 1009
解码的题目,首先你要弄明白转子旋转怎么模拟!旋转一次之后,每个字母对应的节点转了一位,与此同时,每个节点对应的密文也旋转了一次,如果听不明白就自己好好研究以下的三幅图!三个转子的关系就像秒针,分针,时针一样!然后模拟就行了,我是用数字处理的,把字母都转换成数字处理,最后再转回来。#include#include#includeint m,n;int原创 2015-04-07 16:23:07 · 415 阅读 · 0 评论 -
ZOJ 1008
这道题也是搜索,使用深度优先搜索就可以。当然,还是要注意一些小技巧的使用,来防止你的程序超时!在注释中我标注了我使用的办法。#includetypedef struct{ int up; int right; int down; int left;}node;typedef struct{ node data; int num;}原创 2015-04-06 20:41:05 · 391 阅读 · 0 评论 -
ZOJ 1003
这也是一个搜索的问题,搜索两人分数的所有分解方法。当两者的所有分解方式中,都必须使用到某个或某几个相同的因子时,说明报高分的人在撒谎。换句话说,如果两人的分数能够在不占用对方因子的情况下成功分解,那么报高分的人没有撒谎!注意考虑特殊情况,如果较低分数本身不可能被1到100内的整数分解,那么高分赢,因为在这时,挑战者自己就把自己的分数算错了!#includevoid factor原创 2015-04-05 12:57:13 · 470 阅读 · 0 评论 -
ZOJ 1006
就是利用公式反向求解,主要是mod的处理!#include#includeint get_plaincode(int ciphercode,int i);int main(){ int k; scanf("%d",&k); while(k!=0) { char str[71],string[71]; int len,i,j; int ciphercode,pla原创 2015-04-05 14:37:00 · 555 阅读 · 0 评论 -
ZOJ 1005
还是搜索的问题,只是每次的选择有四种,要根据情况判断!#include #define PATOB 1#define PBTOA 2#define FA 3#define FB 4#define EA 5#define EB 6typedef struct { int act; int former; int a; int b;}node;int a,b,n;原创 2015-04-05 14:20:37 · 532 阅读 · 0 评论 -
ZOJ 1004
因为操作只有2种,每次不是i就是o。根据这个展开搜索,i要判断是否还有元素可以进栈,o要判断栈顶元素与待比较的元素是否相等!同时还要用数组记录操作。记住,每次递归都要新开一个栈和记录操作的数组!将传进来的栈和数组复制一遍在使用新开的,不然数据就混乱了...不要忘记对于递归结束的处理!#include#include#includetypedef struct{原创 2015-04-05 14:19:27 · 472 阅读 · 0 评论 -
ZOJ 1007
这道题涉及到一些高数的内容。因为我们知道x=1时函数值近似为1,所以就以1为基准。1/k(k+x) - 1/k(k+1),我们只算前n项,其余的用(1-x)/k^3 来代替,而1/k^3 又要用上式积分来计算!这里误差是指1/k(k+x) - 1/k(k+1) - (1-x)/k^3 从n到无穷求和,这个求和又要用上式积分近似,从而求出误差,根据误差范围算出n值,计算过程中很多原创 2015-04-05 15:06:08 · 469 阅读 · 0 评论 -
ZOJ 1001
最简单地a+b,几乎是每个oj的第一道题。#includeint main(){ int a,b; while(scanf("%d%d",&a,&b)!=EOF) //用来判断输入是否结束 printf("%d\n",a+b); return 0;}原创 2015-04-03 21:27:55 · 334 阅读 · 0 评论 -
ZOJ 1002
整体思路就是dfs,我觉得就是从第一个位置开始尝试放置火力点,如果可以放就继续向下深搜,搜索完毕后回溯!如果不可以就直接递归的判断下一个位置,就这样不断递归下去就能考虑到所有情况,而且还要比穷举快很多!#include#include#define SIZE 4int n;int max;int ret(char str[][SIZE],int k);void wor原创 2015-04-03 21:44:57 · 290 阅读 · 0 评论 -
ZOJ 1011 NTA
刚开始用c做, 各种链表队列,分配内存......然后就懵逼了,而且是用的从上往下遍历树的,做的有些麻烦,加之这个题的测试数据中存在非法数据,就是说如果k = 3, 本应该是只有a, b, c, 但是测试数据中存在超出k的转换元素,例如存在d....这对于限制严格,一切由程序员控制的c语言来说,就毫无疑问的段错误了,数组越界没得跑,毕竟我是malloc的内存,没有多余的地方。而且对于这种非法转换元素原创 2016-04-08 17:27:18 · 448 阅读 · 0 评论