
ACM 水题
文章平均质量分 55
嚜寒
盖士人读书,第一要有志,第二要有识,第三要有恒。
有志则不甘为下流;
有识则知学问无尽,不敢以一得自足,如河伯之观海,如井蛙之窥天,皆无识者也;
有恒则断无不成之事。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode 3.无重复字符串 (滑动+map)
#include <iostream>#include <map>using namespace std;/** 很久不敲代码,这次写,暴露了几处思维上的不足: 1. 一次遍历数组,根据每个元素进行两种情况的处理时, 要注意两种情况是否都要对当前元素进行处理 2. 注意0个元素,1个元素,以及子串最后一个元素即为整个传入的字符串数组最后一个元素的情况 3. 注意相减时是否要+1,如 next-pr.原创 2021-01-12 10:38:34 · 191 阅读 · 0 评论 -
UVa133救济金的发放-约瑟夫环-自顶向下-双向循环巧用对接
应该算是比较水的模拟题,但刚开始做比较困难,用比较傻纯模拟还没做出来老是BUG,看了题解发现同样是模拟,应该先由顶向下分块,然后将需要的函数拿出来写会让整体结构更清晰。其次,是关于怎样1到10到辩解以后回到1,以及10到1到边界以后回到10的问题,题解中巧用了p=(p+d+n-1)%n+1,的方法,其实还是没搞明白为什么这样,下一次可能还是做不出来,但估计是这样的循环对接(自己起的)就是有这样原创 2015-10-29 16:03:57 · 1897 阅读 · 1 评论 -
UVa213 Message Decoding
1自定义函数的使用,可以让代码更清晰条理有效2“跨行读取字符”的函数,本题中的readchar()3本题主要在于二进制数的转换,用到了位移字符<<,(1<<i)是指2的i次方,可以巧妙利用这个,来将十进制转为二进制数;二进制数到十进制,可以每一位数乘以2的相应地次方就可以。4在合适的地方用某些输出函数或者输出语句,来输出一些关键信息检测函数运行情况,如代码中注释掉的地方。5memst(数组名,0,sizeof(数组名)),其头文件为<string.h>,要及时清空数组。题目中没有说给几组数据,则将原创 2015-10-31 17:21:18 · 1326 阅读 · 0 评论 -
UVa489刽子手的游戏
竟然停了一周的时间再写,对时间的利用效率太低了。 —————————————————————————————————————————————————————————————————————————————这个代码之前写过,但不知道为什么在UVa提交给wa了,因为已经做过上两篇博客的题(主要是自己思路做的),编码能力确实有很大提高,感觉重写以后的程序可读性更强,但是还是WA了,就想原创 2015-11-07 14:55:47 · 895 阅读 · 0 评论 -
uva512追踪电子表格
1 做完以后提交要么Time limit,要么Runtime error,然后用重定向文件输入输出和计时器(time.h,clock),将运行时间和运行结果都导入到文件中,并没有发现超时,于是重新审题!发现书上代码里操作次数设置的超大(100000)而每个操作名字长度( 结果提示WA,再重新审题!发现书中代码在多个实例中输出了一行空白,幡然醒悟,因为这个原创 2015-11-07 17:52:28 · 1357 阅读 · 0 评论 -
code1078 最小生成树(Prim算法/普里姆算法)
最小生成树有两种算法,Prim算法和Kruskal算法。Prim算法^1是从任意选取的一个点出发,将该点放到数组vex中,然后将这个点到其他点(1到n)的距离存放到数组tem中,再选取距离最短(权值最小)的边,并将该边所连接到的点放入vex中。^2把该点到其他点(除了vex中的点以外的&&1 到n的n个点)的距离与tem中存储的到每个点的距离相比,更新到每个点的最短距离,然后再选取距离原创 2015-11-22 18:09:48 · 716 阅读 · 0 评论 -
uva201_Squares
1太坑了!测试数据过,上传总是WA,像这种思路比较直白的模拟题我真心要抓狂了,最后比着思路一样但是已经AC的代码,一点一点替换代码,上传测试,最后终于发现是输出格式的问题。前前后后起码WA了我20来次......UVa没有Presentation Error,PE格式错误啊!什么都来个WA,坑啊--2不过时间也没有白费,这个格式错误确实比较隐蔽,长经验值了。题目的Outpu原创 2015-11-26 17:00:39 · 744 阅读 · 0 评论 -
UVa220 黑白棋游戏
本地运行过,但就是WA,又调了很久,还是没找到错误,从网上找了篇AC代码想对比一下,但是细节变动有点大对比难度让人抓狂,不过很明显的是,两篇代码都还有很多值得优化的地方,索性合在一起大面积改动了一下,AC了,改动后的代码最大的特点就是思路更加清晰!说明模拟题,一要审好题意,二一定要把思路写清,重复的部分就拿出来合在一起,思路就会变得更清晰,代码也更简洁。代码:#include using原创 2015-11-29 18:01:32 · 458 阅读 · 0 评论 -
UVa253 - Cube painting
找规律#include using namespace std;int xuhao[6][6]={{0,1,2,3,4,5},{5,1,3,2,4,0},{1,5,2,3,0,4},{4,0,2,3,5,1},{2,1,5,0,4,3},{3,1,0,5,4,2}};//设想这个立方体上的编号是固定的写在上面的,而画颜色的顺序(字符串中字母顺序)则是固定的,就是按题中的顺序const i原创 2015-12-05 12:06:18 · 394 阅读 · 0 评论 -
UVA392 模拟(多项式输出),水
1 题意,输入一个多项式,输出它。2 分析。注意模拟题思路和代码都要按部就班、步骤条理清晰,一个姿势过不了,如果觉得有更清晰的思路,就不要纠结过不了代码,而是换个姿势重新来一发。多想想题目边界、自己代码分类的边界、以及0和1等特殊情况。3#include #include #include #include #include using namespace std;c原创 2016-11-09 20:45:16 · 321 阅读 · 0 评论 -
poj2260
1 题目 水题2 分析3#include #include #include #include using namespace std;int mat[110][110];int row[110];int col[110];int main(){ int n; while(~scanf("%d",&n)&&n!=0){ ///in原创 2016-11-09 21:29:18 · 342 阅读 · 0 评论 -
SPOJ INUM Interesting Numbers 简单细节题
1 题意给N个数,问有多少个无序数对(i,j)(其中,i点击打开链接2 分析注意细节,以及书写要条理一点。如51 1 1 1 151 1 12 23#include #include #include #include #include using namespace std;typedef long long ll;int n;con原创 2016-12-25 22:44:13 · 566 阅读 · 0 评论 -
SPOJ PHT Pigeonhole Tower 预处理+二分 || 找规律
1 题意。看了好一会儿,才看懂。。给出木柴棒的个数,求最高搭几层。2 分析。找规律做的,赛后发现别人用的预处理+二分。学习了。3a.预处理+二分 ,也很快、100ms+#include #include #include #include #include #include using namespace std;typedef long long ll;原创 2016-12-25 22:34:41 · 536 阅读 · 0 评论 -
POJ2126 多项式分解定理
1 题意询问多项式能否分解,如果可以输出“NO”,不可以输出“YES”。2 分析当最高次幂当最高次幂>2,多项式一定可以分解,(先不看是否一定全部为实根,只看是否能分解)当最高次幂==2,相当于判断ax^2+bx+c是否有根,b^2>=4ac可以分解,输出NO3#include #include using namespace std;int a[1010];原创 2016-11-14 17:05:26 · 772 阅读 · 0 评论 -
POJ1008 日期转换(5)
1 题意2 分析唯一需要注意的,是Haab日历,每个月都是从0开始的,所以算sumday,在最后一个月除了+day_h,还要+1。3#include #include #include #include using namespace std;char Haab_month_name[20][10]={"","pop","no","zip", "zotz","tzec"原创 2016-11-13 20:56:13 · 365 阅读 · 0 评论 -
POJ2246 水
1题意。2注意,char bs; int temp = bs-65; 而不是,bs-'65'。3#include #include #include #include #include using namespace std;const int maxn=1100;struct Matrix{ int row,col;}matrix[maxn];s原创 2016-11-10 17:19:17 · 386 阅读 · 0 评论 -
UVA11000 水,注意输入范围&&提前打表看一下数组范围
1 题意。2 分析。①看到2^32,那么数组会不会不够长?这个辗转相加的增长速度足够大吗?提前打表看一下,是不是可以,发现可以,然后再写。②注意看清,N==0也是有判断的。#include#include #include #include using namespace std;typedef long long ll;const int maxn=100;ll原创 2016-10-30 11:50:54 · 358 阅读 · 0 评论 -
POJ1316 水,Runtime了,注意确定下标不越界再给数组赋值
1 题意。2 分析。第一个Fun函数, OJ返回Runtime Error,我以为是递归溢出了,写了第二个Fun,发现前者也有可能是数组越界,后来证明,是数组越界。So,如果要判断,就在数组赋值前进行判断,防止越界。#include#include #include #include using namespace std;const int maxn=1e4;int原创 2016-10-30 11:34:02 · 215 阅读 · 0 评论 -
POJ3299 (借助改变的初始变量,得知进入哪种情况)
#include #include #include using namespace std;int main(){ //freopen("out.txt","w",stdout); char a,b; double num1,num2; double T,D,H; double h,e; scanf("%c",&a); char原创 2016-10-29 15:39:53 · 287 阅读 · 0 评论 -
UVA1008 Piotr‘s Ants
找规律,模拟。强行模拟会超时。观察易发现,蚂蚁位置相对不变,只改变对应序号而已,不过要注意按照输入蚂蚁的顺序输出相对应蚂蚁的结果。另,仔细看条件,这次的空白行是每个测试案例之后,而非测试案例中间。#include using namespace std;const int maxn=10003;struct ant{ int a; int pre;原创 2015-12-30 00:28:30 · 339 阅读 · 0 评论 -
UVa 401 - Palindromes
注意一个字符时要判断是否是镜像的情况。#include #define MAXN 22using namespace std;char const *ch = "AEHIJLMOSTUVWXYZ12358";char const *re = "A3HILJMO2TUVWXY51SEZ8";bool bijiao(char a1,char b1){ for(int i=0;i<原创 2016-01-31 11:47:44 · 304 阅读 · 0 评论 -
hdu1312 Red and Black(DFS深搜,入门题目)
1)注意刚开始是输入列数n,行数m#include #include using namespace std;const int maxx=23;int dir[4][2]={-1,0,1,0,0,1,0,-1};//上下左右int step;int m,n;char room[maxx][maxx];bool bj[maxx][maxx];void DFS(int x,in原创 2016-02-18 17:19:57 · 1319 阅读 · 0 评论 -
UVA712 (好好读题)
0)①敲题之前没理解清题意,输入的x1 x2 x3 是有用的...,要做相应的映射。②(0int i=0;int res;res=pow(2,0); //res==1,没错res=i③自己试验时代码敲了freopen(),Submit前一定要去掉...1)#include #include #include #include using namespac原创 2016-06-12 20:35:21 · 686 阅读 · 0 评论 -
HDU1216 练习一下打表(模拟题)
模拟题要好好看清题意这很重要,然后可以举几个简单例子及其过程,按着写。0 打表代码:#include using namespace std;const int maxn=1000100; int gg[maxn];int main(){ int star=2; for(int i=2;i<=maxn;i++){ gg[i]=i; }原创 2016-07-18 22:44:14 · 1653 阅读 · 0 评论 -
UVA11988 模拟题,水
1#include #include #include using namespace std;int main(){ string shuru; string text; string temp; stack pos; int visted[100010]; while(cin>>shuru){ memset(vi原创 2016-07-20 21:19:16 · 951 阅读 · 0 评论 -
UVA713 高精度(1)+相加+去前导0/后缀0
1题意假设没有前导0和后缀0,简单相加,再去除前面的和后面的0,输出。2分析本题好像对0要求不严格,学习一下代码一中的去前导0和后缀0,以及合理用二维数组的方式。3代码一#include #include #include #include using namespace std;const int maxn=1010;int num[4][maxn];原创 2016-11-07 18:34:09 · 670 阅读 · 0 评论 -
UVA639 递归+回溯
1 题意:给出一张地图, 'X'是墙,'.'是可放的位置,求棋盘上最多放多少个车(中国象棋)。2 分析:回溯注意:在进入下一层的判断,如果符合某个约束条件,则进入下一层第一个递归实例,不符合或者退出一第一个递归实例后,都应该进入第二个递归实例,不然怎么回溯;另外注意不要忘记在最后一层的递归中,return。3#include #include #include using n原创 2016-11-06 11:09:36 · 257 阅读 · 0 评论 -
POJ1040 递归搜索(取还是不取)+ 注意特判输入
1 题意。城市0号到m号,给出一些订单,每个订单包括出发站、目的站、乘载人数,每个订单的收益等于人数*经过的站的个数,给出一个n,是火车运载人数上限,求如何取舍可以让收益最大。2分析。①如果角度跟随这趟列车,那么每个状态要处理的细节就很麻烦,不论是按上车先后订单顺序来处理,还是依次按站点来处理,都有很多细节不好处理。然而,如果我们忽略细节,而是回到问题的主干:取哪些订单使得收益最大?原创 2016-11-05 22:21:51 · 485 阅读 · 0 评论 -
UVA539 递归+搜索路径+注意对无向边做标记时两个方向都要标记
1 题意,每条路径(两个相邻点)只能走一次,每个点可以经过无数次,求最长的路。2 分析。①无向边,可能有环,所以Floyd不合适,而数据较小,递归搜索。②因为路径经过一次,所以visted[]作为是否进入下一个递归实例不合适,用visted_load[][]来标记和判断。③注意是无向边,所以每走过一条边,要 visted_load[cur][i]=1; visted_load[i]原创 2016-11-05 16:53:42 · 315 阅读 · 0 评论 -
UVA 167 八皇后·(1) 递归、暴搜
1 8×8的棋盘上,选择合适的位置放皇后,使得互相不攻击(皇后可以攻击所在点的该行、该列、该对角线),并且使得所在位置的数相加之和最大。2 分析。①学习到的:判断先后下的点是否在同一行、同一列、同一对角线时,用这一行来判断: if(col[col_id]==col[j]||col_id+col[col_id]==j+col[j]||col_id-col[col_id]==j-c原创 2016-11-02 17:35:17 · 388 阅读 · 0 评论 -
UVA439 水,枚举+BFS
0)1这个题因为是方形的棋盘,所以x和y区分不是很重要。如果是矩形要注意输入的行和列与枚举的八个方向是否是一一对应的。2根据ASC码得到序号,注意不是 变量名-'97' ,是下面这两种:char a='a';cout<<a-'a'<<endl;cout<<a-97<<endl;char b='0';cout3注意使用queue或者stack,用完.front()之后,要及时原创 2016-06-07 22:03:02 · 380 阅读 · 0 评论 -
UVA536 水,根据先序和中序得到二叉树的后续遍历
0)根据先序和中序建树,然后再后续遍历应该也可以。大体看了看其他人的代码行数,决定找规律做:根据先序往后走,返回当前字符所在中序中的位置,如果前后都没有入栈(前后都入栈或者是边界则出栈)则入栈,将先序所有字符走过一遍后,如果栈不为空,再POP,直到栈为空。1)#include #include #include #include using namespace std;原创 2016-06-07 21:55:38 · 825 阅读 · 1 评论 -
hdu2674-水题-大数取模-打表找规律
1)首先应该想到,当n>=2009,得到的数都可以整除2009,所以取模2009以后都应该输出为0其次,n#include ?///打表发现,当n为41,就能整除2009,取模就会为0,之后的数自然都为0#include using namespace std;int main(){ long long int n=42,sum=1; for(int i=1;i原创 2016-02-28 15:50:38 · 465 阅读 · 0 评论 -
hdu1548(BFS广搜入门)
1)#include #include #include using namespace std;char grid[13][13];int mapp[13][13];int main(){ int row,col,ent; while(cin>>row>>col&&row!=0){ cin>>ent; //memset(jilu原创 2016-03-01 23:32:39 · 907 阅读 · 0 评论 -
UVA122二叉树BFS广搜入门
1)AC代码#include #include #include #include #include using namespace std;const int maxn=3000;char str[maxn];bool failed;vector ans;struct Node{ Node *left,*right; int v; bool h原创 2016-03-02 20:19:00 · 531 阅读 · 0 评论 -
HDU2212
1)名字叫dfs,然而并不是用dfs。水的不得了,不应该浪费太多时间去想复杂算法,名字是来迷惑的;首先将0!~9!打表方便多次调用;实际上只要看到最大值:9!=362880,那么假设十个数都是9!那么所能到达的最大和也就是3628800,那么循环只要检测到1~3628800即可;这种看到不需要输入的题,也可以先用程序将所有答案暴力搜出,然后写个输出程序将找到的答案输出即可。#include原创 2016-03-24 14:03:34 · 467 阅读 · 0 评论 -
POJ1028 模拟,水
0)题意:模拟栈的操作。水。考验编码速度。1)#include #include #include #include #include using namespace std;int main(){ stack houtui; stack qianjin; string command; string url; strin原创 2016-05-17 00:21:10 · 367 阅读 · 0 评论 -
HDU1205 鸽巢原理/找规律
1)利用鸽巢原理,很简单做。让所有相同种类的糖果分开,我们让最大数目的糖果作为挡板,放在其他糖果间。而为了让最大数目的糖果自己不会连续出现,所以确保每一个之间一定要有别的糖果,所以求得其他糖果数量之和,如果和大于等于(最大数目的糖果数目-1),问题就会得到解决。不用担心其他糖果会连续出现,如果有一种糖果连续出现,那么这种糖果的数量一定大于最大糖果,与假设不符,遂不成立。#include原创 2016-05-30 20:17:27 · 690 阅读 · 0 评论 -
SDNU1332 矩阵交换
1)只交换行或列的标号。#include #include #include #include using namespace std;//int x[110][110];//int y[110][110];int x_bian[110];int y_bian[110];int matrix[110][110];struct Node{ int one,sec;原创 2016-05-30 20:52:34 · 498 阅读 · 0 评论 -
UVA673 水,模拟栈
0)注意,对于%c的输入,用的scanf。如果cin>> ,char 有坑。1)#include #include #include #include using namespace std;int main(){ int kase; cin>>kase; char temp=getchar(); while(kase--){原创 2016-06-07 21:50:50 · 331 阅读 · 0 评论