随笔分类 -  ACM解题报告

摘要:题意:有两个链表,它们表示逆序的两个非负数。例 (2 -> 4 -> 3)表示342,求两个数字的和,并用同样的方式逆序输出。如342+465 = 807,你需要把结果表达为(7 ->0 ->8)。思路:模拟一下加法的运算过程,从个位开始加,进位保存下来,十位运算的时候把个位的进位加上,依次类推。C... 阅读全文
posted @ 2016-01-06 19:17 andyidea 阅读(726) 评论(0) 推荐(0)
摘要:题意:数组nums中,有两个元素的和是target,找出这两个元素的位置。思路:维护一个map,用数组的元素的值做key,用元素的位置做value。遍历nums,对每个num来说,如果map[target - num] 有值的话,就返回map[target - num]和num的位置,如果没有找到的... 阅读全文
posted @ 2015-12-28 19:54 andyidea 阅读(481) 评论(0) 推荐(0)
摘要:题意:是找到一个最小的正整数Q,使Q的各位数的乘积等于N。思路:从9到2取余。代码: #include <iostream>#include <algorithm>usingnamespace std;bool fun(int x,int*ops,int&num){ if(x==1) return1; for(int i=9;i>=2;i--) { if(x%i==0) { ops[num]=i; num++; return fun(x/i,ops,num); }... 阅读全文
posted @ 2011-06-17 15:22 andyidea 阅读(346) 评论(0) 推荐(0)
摘要:题意:投票者被分成K个组,如果超过半数的组投赞成票,决议就可以通过。每组是投赞成票还是反对票也由每组内部投票决定,若这一组有超过半数的人投赞成票,那么这一组就投赞成票。思路:很水的题。。。代码:#include <iostream>#include <algorithm>usingnamespace std;int a[103];int main(){ int n; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } sort(a,a+n); int m=(n+1)/2; int sum=0; ... 阅读全文
posted @ 2011-06-12 08:53 andyidea 阅读(575) 评论(0) 推荐(0)
摘要:题意:已知每个圆圆心的坐标和半径,求绳的长度。。思路:每个圆心围成的多边形的周长,加上圆的周长。代码:#include <iostream>#include <cmath>#include <iomanip>usingnamespace std;constdouble PI=3.141592;typedef struct{ double x,y;}Point;Point p[103];double a[103];int main(){ int n; double r; cin>>n>>r; cin>>p[0].x>& 阅读全文
posted @ 2011-06-11 12:54 andyidea 阅读(379) 评论(0) 推荐(0)
摘要:题意:把所给出的石头分成两堆,使两堆的差最小。思路:这道题可以用01背包写。。也可以直接暴力。。。题上的数据范围决定了dp的效率没有暴力的高。。代码:#include <iostream>#include <algorithm>#include <cstring>#include <cmath>usingnamespace std;int a[23];int sumAll;int def;void DFS(int sum,int i){ if(i<0) return; int temp=abs(sumAll-2*sum); if(def&g 阅读全文
posted @ 2011-06-09 08:51 andyidea 阅读(296) 评论(1) 推荐(1)
摘要:题意:求出每个数的平方根,然后倒序输出。保留四位小数。思路:我在Ural的第二道题,我的第一篇ural解题报告,为什么第一道题没有写呢。。。。你们懂的。之所以选择Ural,是因为那上面的题都是原创的,质量很高,有很多国内的童鞋也在那里A题。。。我就是想找一个安静的环境不断的A题,所以就选择了这个oj了。代码:#include <iostream>#include <cstdio>#include <iomanip>#include <cmath>usingnamespace std;double d[1000003];int main(){ // 阅读全文
posted @ 2011-06-06 00:09 andyidea 阅读(699) 评论(0) 推荐(1)
摘要:题意:S从1顺时针走,E从n逆时针走。使走到一个位置,他们正好把肉丸给完,而且给的肉丸数量相等。思路:水题,每次让给出的总肉丸数最少的那个人继续给,直到所有人给完。然后判断两个人给的总数是否相同。代码:#include <iostream>#include <cstdio>#include <cstring>using namespace std;int table[33];int main(){ //freopen("input.txt","r",stdin); int n; while(cin>>n,n 阅读全文
posted @ 2011-06-05 11:50 andyidea 阅读(402) 评论(0) 推荐(1)
摘要:题意:给出一个区间,求区间内每一个数按规则(奇数取3n+1,偶数取n/2)变换最后变成1的步数,求最大的一个步数。思路:这道题在poj上很快就是水过了,用的是一般的笨方法,后来看到学校的oj也有这道题,就复制粘贴过去,结果WA了,好诡异。然后改了一些细节,TLE了,顿时无语。然后经过各种优化啊,记忆优化啊,有木有!!优化到不能再优化啊,还是TLE啊。没办法了,只能试试其他的方法了。很简单就能想到打表,把题目要求的数据范围内所有的步数都求出来,然后就可以顺利的水了,水过后看见别人做的,用记忆的过了啊,有木有!!我怎么就没过呢~~更多的还是打表~~我的时间有点慢,不解释。。。。顺便说一下,这道题还 阅读全文
posted @ 2011-06-05 10:59 andyidea 阅读(550) 评论(0) 推荐(0)
摘要:题意:给出n个点的整数坐标(n<=700),求一条直线,使得在这条直线上的点数最多,输出点数。思路:简单几何题。采用几何中三个点是否在一条直线判定定理。代码:#include <iostream>#include <algorithm>#include <cstdio>using namespace std;typedef struct{ int x,y,count;}Point;Point p[203];double a[203];int main(){ //freopen("input.txt","r",st 阅读全文
posted @ 2011-06-05 02:17 andyidea 阅读(307) 评论(0) 推荐(1)
摘要:题意:给出n个点的整数坐标(n<=700),求一条直线,使得在这条直线上的点数最多,输出点数。思路:简单几何题。采用几何中三个点是否在一条直线判定定理。代码:#include <iostream>#include <algorithm>#include <cstdio>using namespace std;typedef struct{ int x,y,count;}Point;Point p[703];double a[703];int main(){ //freopen("input.txt","r",st 阅读全文
posted @ 2011-06-05 02:05 andyidea 阅读(760) 评论(0) 推荐(1)
摘要:题意:前16组是被查找组,然后给出每组数据,从16组数据中找出符合公式 D的最小值。。思路:一道水题。遍历每组数据,暴力解之~~~代码:#include <iostream>#include <cmath>#include <cstdio>using namespace std;typedef struct{ int x1,x2,x3;}Color;Color c[16];int fun(Color cm,int i){ return sqrt((cm.x1-c[i].x1)*(cm.x1-c[i].x1)+(cm.x2-c[i].x2)*(cm.x2-c[ 阅读全文
posted @ 2011-06-04 16:54 andyidea 阅读(376) 评论(0) 推荐(0)
摘要:题意:输入是第一行两个数字,表示每行的长度和总行数然后是n行字符串求出每行字符串的逆序数,按逆序数从小到大的顺序排列所有的字符串。。什么是逆序数呢,在一个排列中,如果前面的数比后面的大就称为逆序.一个排列中的逆序总数称为逆序数。。例如:给出32145求出它的逆序数,从它的第二个数开始,和它前面的数比较大小,如果是从小到大的顺数,则逆序数为0,如果前面有几个比它大的逆序数就是几。。。方法:对于每个字符串求出逆序数,然后根据逆序数对字符串排序输出。#include <iostream>#include <string>#include <algorithm>#i 阅读全文
posted @ 2011-06-01 10:53 andyidea 阅读(454) 评论(0) 推荐(1)
摘要:这道题的大致意思: 圆表示一块面积可扩展的区域,开始时,面积是0,在(0,0)处开始以每年50平方米的速度同样呈半圆扩展,输入一个正整数N,然后输入N对坐标,对于每一对坐标值:求出面积扩展到该点的年数,坐标值单位为米。 理解意思后此题就水很多了。细心的话一次搞定~ #include <iostream>#include <cstdio>#include <cmath>using namespace std;const double PI=3.1415926;int main(){ int n; cin>>n; for(int i=1;i<= 阅读全文
posted @ 2011-05-31 17:51 andyidea 阅读(915) 评论(0) 推荐(1)
摘要:求12个月工资的平均数。这个题的难度和1001差不多吧 1 #include <iostream> 2 using namespace std; 3 4 5 int main() 6 { 7 int n=12; 8 float sum=0.0; 9 float a;10 while(n--)11 {12 cin>>a;13 sum+=a;14 }15 cout<<"$"<<sum/12<<endl;16 17 18 return 0;19 } 阅读全文
posted @ 2011-05-31 17:02 andyidea 阅读(219) 评论(0) 推荐(0)
摘要:题意还是比较容易理解的,题上已经给出了公式。求1/2+1/3+1/4+...+1/(n+1)>=x的最小n的值,稍微注意点的就是浮点型了,貌似很多人都WA过,都是错在浮点数的。。代码实现#include <iostream>using namespace std;int main(){ float f; while(cin>>f,f) { float n=2.0; float sum=0.0; while(1) { sum+=1.0/n; if(sum>=f) break; n+=1.0; } cout<<(int)n-1<<&quo 阅读全文
posted @ 2011-05-31 11:21 andyidea 阅读(312) 评论(0) 推荐(1)
摘要:输入:动物个数n以及k句话,接着输入k行,每一行形式为:d x y, 在输入时可以先判断题目所说的条件2和3,即: 1>若(x>n||y>n):即当前的话中x或y比n大,则假话数目num加1. 2>若(x==2&&x==y):即当前的话表示x吃x,则假话数目num加1. 而不属于这两种情况外的话语要利用并查集进行判断当前的话是否与此前已经说过的话相冲突. struct node { int parent; //p[i].parent表示节点i的父节点 int relation; //p[i].relation表示节点i与其父节点(即p[i].parent 阅读全文
posted @ 2011-04-14 08:41 andyidea 阅读(513) 评论(0) 推荐(1)