各大OJ刷题系列
这是我自己刷各大OJ的集锦,每个题都是自己独立的想法,提供了题意和解题思路及AC代码,希望各位大神有心的来交流~
seen_in_hw
希望我能变厉害!!!成为大师!!!我放弃了很多看似很炫的技术而去探寻技术的本质,技术是用来提供服务的,所有的技术都离不开思想,而思想是最难掌握的,我们应该把更多的精力放在对于思想的探寻上
展开
-
ZOJ2388解题报告
题意: input a b 输入的是两个数的和和差,其中a为和,b为差,如果a#include <iostream>using namespace std;int main(){ int N; cin>>N; while(N--){ int a,b; cin>>a>>b; if(a<b | (a-b)%2!=0) co原创 2015-09-01 22:03:28 · 674 阅读 · 0 评论 -
ZOJ2405解题报告
题意:这道题的意思是找四位数,其中他的10进制,12进制,16进制的各位数相加的和都相同就把这个四位数输出这里要提醒的是:根本没必要把他的12进制,16进制求出来,只需要把他的对应进制的各位和相加即可,这里给出求各进制各位和的函数int getsum(int n, int base) { int sum=0; while(n) //这个函数写的很是精髓,要发现这样写的原创 2015-09-02 16:01:34 · 580 阅读 · 0 评论 -
ZOJ水题分类
简单题#1001 -____-b A+B。#1110 Dick and Jane 胡乱枚举收缩一下情况就可以了。(这题脑筋还是要转一个弯的,不然做不出)#1115 a[i+1] = a[i] 的全部数位上的加起来,直到剩下一个,直接模拟。#1414 太弱太弱,按照模 4 分类讨论一下即可。#1713 简单的字符串截取和字符计数。#1716 简单的二维数组区间求和,作累加,转载 2015-10-17 17:02:04 · 3685 阅读 · 0 评论 -
ZOJ 3767
不好说什么了,实在是非常的简单,一下子就过了。。。 直接给代码吧// POJ 3767#include <iostream>using namespace std;int main(){ int n; cin>>n; while(n--){ int p,max_wt,num,sum=0; cin>>p>>max_wt;原创 2015-10-17 21:12:40 · 537 阅读 · 0 评论 -
ZOJ 3202
题意找出数组中最大值的下标(注意是从1开始的),和第二大值功能关于找最大值下标用类似选择排序即可 关于第二大值要通过排序,然后倒数第二个即为所求值AC代码// POJ3202#include <iostream>#include <algorithm>using namespace std;int main(){ int n; cin>>n; while(n--){原创 2015-10-17 21:36:12 · 666 阅读 · 0 评论 -
ZOJ2478
题意给出一串字符串,连续的N个相同字符K写成 NK形式, 特别的,N==1时,N不写出来代码太简单了,直接贴带代码了#include <iostream>#include <string>using namespace std;bool trek[100];int main(){ int n,count=1; cin>>n; string s; while原创 2015-10-18 16:48:32 · 623 阅读 · 0 评论 -
ZOJ 2481
题意给出一串数字, 俺从小到大的顺序排好,相同的数字只输出一次解题按照题意去解就可以了,关键是要注意presentation 最后一个数后不能有空格代码//ZOJ 2481#include <iostream>#include <algorithm>using namespace std;int a[120];int main(){ int n,i; while(cin>原创 2015-10-18 20:43:19 · 721 阅读 · 0 评论 -
ZOJ 2417
题意给出一个十进制数,找出其二进制数,找到其中从低位开始,第一个为1的数,然后把从这个数到最低位组成的二进制数的十进制数写出来思路尊重十进制数到二进制数的换算方法,然后判断一下是否是到了第一个为1的数 从二进制数换算成十进制数利用常规方法,参考我的一篇日志: 参考内容关于十进制转换为二进制数的介绍:你以十进制的数除以你所要转换的进制数,把每次除得的余数记在旁边,所得的商数继续除以进制数,直到余数原创 2015-10-18 21:13:09 · 641 阅读 · 0 评论 -
ZOJ 2987
题意给字符串指定删除字符,然后输出 考差了string中的erase函数 巨简单 =_= …代码#include <iostream>#include <string>using namespace std;int main(){ int n,count=1; cin>>n; while(n--){ int pos; string s原创 2015-10-18 22:17:00 · 428 阅读 · 0 评论 -
ZOJ 2807
菜的抠脚的一道题。。。没啥好说的。。。// ZOJ2807#include <iostream>using namespace std;int main(){ int n; cin>>n; while(n--){ int k; cin>>k; int sum=0,temp,count=k; while(k-原创 2015-10-26 20:11:40 · 466 阅读 · 0 评论 -
ZOJ 2812
题意仔细看下面例子 ACM: 1*1 + 2*3 + 3*13 = 46MID CENTRAL: 1*13 + 2*9 + 3*4 + 4*0 + 5*3 + 6*5 + 7*14 + 8*20 + 9*18 + 10*1 + 11*12 = 650A代表1,B代表2,空格代表0,这些代表的数分别和下标加1相乘,和伪输出代码注意坑爹的地方是 给出255个数据,你就一定要留出256个空间,原创 2015-10-26 20:31:37 · 1089 阅读 · 0 评论 -
ZOJ 2830
题意有n人,三人一组每次淘汰两人,问最少多少次能淘汰的只剩一人解答: n为偶数,n/2 n为奇数,(n+1)/2代码#include<stdio.h>int main(){ int n; while(scanf("%d",&n)!=EOF && n) { printf("%d\n",n/2); }}原创 2015-10-26 20:38:39 · 603 阅读 · 0 评论 -
POJ 1003解题报告
题意:输入一个数a,然后用1/2+1/3+…+1/n的和与其比较,求出最大的那个n,使的和 <= 输入的数a,其中输入的数以0.00结束,代码很简单,如下:#include <iostream>using namespace std;int main(){ float a;float sum=0; while(cin>>a &&a!=0.00){ float原创 2015-09-04 16:21:23 · 557 阅读 · 0 评论 -
POJ 1004解题报告
题意:求12个月工资平均数,注意保留两位小数这道题在ZOJ里面做过,貌似更简单了,也没什么好说的,注意保留小数点就是。源码:#include <iostream>#include <iomanip> //C++格式输出的头文件float num[12];using namespace std;int main(){ float sum=0; for(int i=0;原创 2015-09-04 16:30:29 · 770 阅读 · 0 评论 -
POJ1005解题报告
题意: 输入N N为接下来要输入多少次数据的次数 输入A,B A,B为坐标然后就是坐标系以半圆扩张,每年扩张50,求多少年能扩张到输入A,B的坐标那里去解法: 求出以A,B为圆半径的半圆面积 ,然后用它除以50取整+1可得 结果最后要注意的是要注意格式问题。附上源码:#include <iostream>#define原创 2015-09-04 17:03:37 · 512 阅读 · 0 评论 -
POJ1007解题报告
题意:一个字符串有它的特征值,把特征值小的字符串放前面难点:如何存储多个字符串,并且存储其特征值?解决方法就是利用结构体附上源代码及相关解释:#include <iostream>#include <string>using namespace std;struct DNA{ string s; //s存储字符串 int value; //value存储特征值原创 2015-09-04 19:04:37 · 505 阅读 · 0 评论 -
POJ1118解题报告
题意input:先输入要输入的坐标个数,再输入坐标output:输出最多有多少个点在一条直线上思路做循环,利用两点确定一条直线,然后判断第三个点是否在此直线上,在的话就让统计的变量加一。然后用每次循环得到的统计变量和之前的想比,如果比之前大,就把之前的最大值取代。关键点作循环时一定要让两点无重复的计数,这点很重要代码#include <iostream>using namespace原创 2015-09-07 14:44:44 · 696 阅读 · 0 评论 -
POJ1207解题报告
题意这个题的意思是 :有一个数,按那个规则,最后能够转换到1,算出这个序列的长度然后输入两个数,在这两个数构成的闭区间中,每个数都有其序列长度,求这个序列中最长的一个。思路 先写出一个函数,求一个数的序列长度,然后对区间做循环,求长度最大值难点 似乎也没什么难点,只是有很多细节需要考虑一下,详见代码 我改了三次才AC,就是因为输出那块出了些问题。。。代码#include <iostream原创 2015-09-07 15:43:52 · 1315 阅读 · 0 评论 -
POJ3673解题报告
题意 就是按那个规则去算数,把每位拆开了做乘法然后加起来解法循环遍历一边即可,只是在做的时候最好使用字符串数组代码#include <iostream>using namespace std;void number(char num1[],char num2[]){ //用字符串处理 int len1 = strlen(num1); int len2 = strlen(原创 2015-09-07 18:32:38 · 447 阅读 · 0 评论 -
POJ3672解题报告
吐槽 想不到数组开小了 导致了 runtime error,我改了好几次,还以为是代码错了,结果是数组小了题意: 一个人想跑步,上坡有单元时间U,下坡有单元时间D,平路有单元时间F,但是她是往返跑,所以有U就有D,有D就U,有F就有F(想象跑步的时候),然后题目给定了依次经过的路段,问她能够跑完几个路段?M是总的跑步时间解法 对每次跑的路进行判断,然后进行时间上加和,如果>输入的M,就结束代原创 2015-09-07 19:28:50 · 796 阅读 · 0 评论 -
POJ3650解题报告
吐槽说实话,我都没搞明白,它居然给我AC了。。。我也是醉了 出的问题在于输完一行后要按几次enter键才能出结果。。而它居然给我AC了,好吧,那就这样吧,不过思路是没错的题意输入一串句子,输入#结束,对一串句子中的某些字符进行特殊处理思路输入句子,然后对单个字符写个处理函数。难点如何输入句子,string s;cin>>s 这样遇到空格就会断掉,需要用getline来读代码#include <i原创 2015-09-07 20:28:40 · 524 阅读 · 0 评论 -
POJ1250解题报告补
参考我前一篇文章有详细解析上篇我写的文章关于本篇在这篇里,我对POJ1250想到了新的解题方法,同时在使用新方法的时候调试了许多有意思的bug,与诸君分享新方法思路我用specialized二值数组去接看出现的字符是否为第一次出现,如果第一次出现,就把specialized[s[i]-'A']置为true,(这里用了技巧,用大写字符减去‘A’得到唯一的一个数字)然后再判断是否房间空,房间不空就把原创 2015-09-14 13:50:06 · 495 阅读 · 0 评论 -
POJ3602解题报告
题意输入一串字符串,求问有多少种字符,重复出现的不算,限定条件为: ff,fi,fl,ffi,ffl,”,“这7种每种各算一种字符。解题思路先把字符串存起来,这里是难点,要注意题目中说的是空格和换行不存,这里就需要一个个的敲进去字符,然后存进字符串里面然后对每个字符进行判断,是7种之一就把7种的矩阵置为1是普通的就把普通的矩阵置为1,最后判断为真的数组有多少个,就是结果代码#include<原创 2015-09-14 18:01:43 · 702 阅读 · 0 评论 -
POJ3589 Number-guessing Game
题意这个题的意思是说: 求问给出两个四位数,问相同位置相同的有几位,不同位置相同的有几位,最后用*A*B的形式打印出来思路用字符数组去接几个数字,这样不用分离各位,然后得到各位数字的方法如下: char s[4]; int num[4]; for(int i=0;i<4;i++) num[i]=s[i]-‘0’; ASCII值的方法最后把两个数的各位做一次二重循环比较即可代码#in原创 2015-09-14 20:59:25 · 490 阅读 · 0 评论 -
POJ3536Beer Refrigerator
不想说啥了,又是if else 范围出错,要很明确的确定if 对的是不是else 否则就用if … else if 结构我要吐血了… 用了个scanf 和 cout的混合输入输出。。。查了两个多小时啊。。。欲哭无泪啊!服了服了附代码:#include <iostream>using namespace std;int f[30]; //这个数组要尽量开大点int main(){ in原创 2015-09-15 17:06:58 · 538 阅读 · 0 评论 -
POJ水题集2
北京大学POJ系统(poj.org)搜集到的一些比较水的题 此类的题目都是刚学C语言不久刚接触ACM的时候做的。。完全没算法。。最多有点小技巧。。题型很杂。。评述的话主要是自己以后找起题来方便。。大牛们忽略就好。。1000 纯属适应题1003 做的时候花了很久,现在看好像也不难1004 适应题,求下平均就行1005 要读转载 2015-09-16 00:10:05 · 491 阅读 · 0 评论 -
【POJ1032】把一个数分解为不重复的数的和使其乘积最大
题意求N1+N2+…+Nn=N. 使N1 ,N2…Nn都不相等且他们的乘积最大? 做法就是求出以2起始的最大连续自然数序列之和sum,使得sum的值不超过输入数n, 然后分情况讨论: 设此最大序列为2、3、……、w,则: 1。若剩余值(n-sum)等于w,则最后输出序列为:3、4、……、w、w+2,即将原最大序列每项加1,再将最后剩余的一个1加到最后一项上。(这一项结果很显然) 2。若剩余值(n原创 2015-09-18 17:33:18 · 2119 阅读 · 0 评论 -
【面试题】:海盗分钻石问题(典型倒推)
5 个海盗抢到了100颗宝石,每一颗都一样大小且价值连城。他们决定这么分: (1)抽签决定自己的号码(1~4); (2)首先,由1号提出分配方案,然后大家表决,当且仅当超过半数的人同意时,按照他的方案进行分配,否则将被扔进大海喂鲨鱼; (3)如果1号死后,再由2号提出分配方案,然后剩下的4个人进行表决,当且仅当超过半数的人同意时,按照他的方案进行分配,否则将被扔入大海喂鲨鱼;原创 2015-12-28 21:50:58 · 6407 阅读 · 1 评论 -
【POJ3749】:破译密码
题意题目大意很简单,很容易找出对应字母的ASCII码值的关系,但是有一点需要注意,请看代码: 读字符串必须要用getline函数 输入ENDOFINPUT终结代码/// 解密#include <iostream>#include <string>#include <cstdio>using namespace std;int Ischar(char a){ if(a>='A'原创 2015-09-23 23:35:28 · 728 阅读 · 0 评论 -
【POJ】:POJ3386 Halloween Holidays
题意不得不说服了这道题了,前面讲了好大一串没有用的,南瓜简直毛线用都没有好不!!!题意超级简单,就是问一个大环能不能切出两个环形(注意不是圆) 情况容易考虑不全~有两个环并排的情况直接给代码代码#include <iostream>using namespace std;int main(){ int A,a,B,b,P; cin>>A>>a>>B>>b>>P; if原创 2015-09-24 19:55:40 · 535 阅读 · 0 评论 -
【POJ解题】:POJ3507 Judging Olympia
题意输入6个数,找出最大最小的去掉,其余的求平均数。输入 0 0 0 0 0 0 结束思路思路1:用Bool矩阵记录,找出最大最小的去掉,然后对其他的四个进行求平均数(我的失误点在于没有正确的初始化)思路2:给6个数排序,把第二个到第五个加和然后求平均数~代码// author:seen// time:2015-09-24// POJ 3507#include <iostream>using原创 2015-09-24 18:56:02 · 689 阅读 · 0 评论 -
【POJ1504】:Adding Reversed Numbers
题意给出两个数,将两个数反序 比如说1324变成4231 ,然后将两个反序的数加和,将和反序输出解题思路关键是如何将一个数反序 用一个函数做到,仔细看int fan(int num){ long int sum=0; while(num){ sum = sum*10+n%10; n/=10; } return sum;}这个函数在我原创 2015-10-07 23:03:13 · 613 阅读 · 0 评论 -
【POJ1517】:u Calculate e
题意计算e,具体参加那个公式技巧关于那个奇葩的输出,,,就只能通过单个if进行判断然后进行输出了 关于最后定向输出小数点后的方法,请参见 iomanip 头文件代码#include <iostream>using namespace std;#include <iomanip>int main(){ double sum = 2.5; cout<<"n e"<<end原创 2015-10-07 23:06:18 · 739 阅读 · 0 评论 -
【POJ】:POJ 1528Perfection
题意给出一个数n,然后计算n的所有因字数之和 与 2*n 的大小关系比2*n大 输出 ABUNDANT 比2*n小 输出 DEFICIENT 和2*n相等 输出 PERFECT技巧计算因子和 参见我写的一篇技巧文章 关于一个数的因子和还有就是输出格式的技巧也要用到 输出格式的头文件 iomanip代码#include <iostream>#include <iomanip>usi原创 2015-10-07 23:13:25 · 543 阅读 · 0 评论 -
【POJ1543】:Perfect Cubes
题意题目意思就是输入n , 求a,x,y,z,使的 a<=n,a>=1; x>1 且 z>=y>=x a的立方 = x的立方 + y的立方 +z的立方技巧简单枚举即可,超级大水题。。。我错了是因为我一行写太多了。。。代码#include <iostream>using namespace std;void C_out(int a,int b,int c,int d){ cou原创 2015-10-07 23:22:05 · 652 阅读 · 0 评论 -
【POJ1552】:Doubles
题意题意很简单呐,给出一串数字,算出其中互为2倍的数字有多少对。技巧利用选择排序的那种思想就能搞定这个 还有关于那个输出的那种结构需要自己动动脑子想一下代码#include <iostream>using namespace std;int num[20];void func(int count){ //判断为2倍的数有多少对,输出对数 int total=0; for(原创 2015-10-07 23:41:58 · 807 阅读 · 0 评论 -
【POJ】:POJ 1575元辅音
题意判断一个字符串是否满足下面三个规则: 1.至少有一个元音(a,e,o,i,u) 2.不能出现三个及以上的连续元音或辅音 3.不能出现连续两个相同字母,但ee,oo除外。如果都满足,就输出accept(按详细格式) 否则输出 not accpet(按详细格式)解法没什么特殊的,就是自己写控制函数对字符串进行判断而已。。。 我又错在初始化错了地方啊!!!!!!很经典的一个地方 int原创 2015-10-08 00:45:54 · 514 阅读 · 0 评论 -
【POJ1061】:青蛙的故事(未AC版)
题目Description两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为原创 2015-10-12 13:45:48 · 514 阅读 · 0 评论 -
【POJ】:POJ 3100解题报告
题意兼解析输入两个数字B和N。要求找一个A,使得A^N最接近B。一开始想到的是暴力,不过想想或许可以换个方式来做这道题的。充分利用math.h里的pow(),先对B开n次方,就是用pow(b, 1.0/n).得到一个值right,然后分别对这个值取上整high和下整low,然后再计算pow(high,n),pow(low, n),比较这两个值中最小的那个就是答案。代码#include <iostre原创 2015-10-13 12:56:44 · 831 阅读 · 0 评论 -
【POJ】:POJ 3117 World Cup
吐槽呵呵呵呵,一下子想到了方法,然后对其进行了实现,但是后来居然仍然没有被AC,最后上网找了些许答案,发现他们跟我的一样,不知道是怎么AC的,最后试了很多最后终于AC了题意一场足球赛中,若果双方 平手 的话,那么双方各得一分,否则,赢的一方得3分,输的一方不得分。 输入比赛的数量 t 和 各队的得分,求出结果为平局的比赛的数量。解题思路如果用其他方法肯定不太好使,数学方法巨简单。。。 先求出各队得原创 2015-10-13 13:39:16 · 533 阅读 · 0 评论