acm-icpc竞赛时光记
总结算法竞赛题目题解,从新菜鸟到老菜鸟的成长之路...
GejinZ
We are all Procrastinators. Just Take Action and Be Serious.
展开
-
uva 1368 - DNA Consensus String
题目上给的样例input格式存在一定问题,行末多空格。在这上面纠结了几次……#include#include#includeconst int maxn = 1100;int A[maxn];int C[maxn];int G[maxn];int T[maxn];char ans[maxn];int ans_;int m,n;void judge(int pos)原创 2014-07-19 16:54:23 · 951 阅读 · 0 评论 -
uva 1588 Kickdown
#include#includeint main(){ char a[100],b[100],temp[100]; int i,j,l,la,lb,c; while(scanf("%s",a)!=EOF) { scanf("%s",b); la=strlen(a); lb=strlen(b);原创 2014-07-20 02:17:11 · 1220 阅读 · 0 评论 -
UVA 1339 - Ancient Cipher
就是刘汝佳书上所说的方法……没想原创 2014-07-20 02:38:17 · 638 阅读 · 0 评论 -
uva 213 - Message Decoding (我觉得我的方法要比书上少很多代码,不保证好……)
#include#include#includechar s[250];char a[10][250];int a1[4];int a2[250];char ch;int init(int len){ int tt=0; for(int i=1;i<=7;i++) { for(int j=0;j<(int)pow(2,i)-1;j++)原创 2014-07-20 05:24:32 · 1187 阅读 · 0 评论 -
uva 12096 - The SetStack Computer(STL 的运用)
这道题目貌似就是在不停地用STL中的内容,对STL熟练运用的大神估计坐起来会比较easy。。不过对于我这种看着代码还是需要上网查函数运用的菜鸟来说,若让我自己做这道题,肯定不会使用STL。。就当对STL的学习了。#include#include#include#include#include#include#include#include#include//set_un原创 2014-07-21 08:56:17 · 1601 阅读 · 0 评论 -
uva 201 - Squares(自己的方法,同学有更好一点点的方法)
#include#include#include#include#includeusing namespace std;int h[20][20];int v[20][20];int size_[20];int n,m;int flag;void judge(int x,int y)//这是关键部分的代码,用来判读那是否能构成square;{ int a1=n-x原创 2014-07-21 08:59:51 · 1161 阅读 · 1 评论 -
uva 815 - Flooded!(点名要做的思路题~我觉得方法挺好)
#include#include#include#includeusing namespace std;double a[100000];double vol[100000];int m,n;double v1,v2;bool cmp(double aa,double bb){ if(aa>bb) return true;}int main(){ int原创 2014-07-21 09:00:34 · 1856 阅读 · 0 评论 -
uva 120 - Stacks of Flapjacks
#include#include#include#includeusing namespace std;int a[31];int b[31];int c[31];int a1;char ch;int ans[31];int tt=0;void work(int tar,int pos,int n){ for(int i=0; i<=n; i++) {原创 2014-07-23 16:34:50 · 629 阅读 · 0 评论 -
uva 11134 - Fabled Rooks(主要在贪心方法及其实现)
#用到了贪心方法。#这个贪心刚开始想错了方法,后来想到了新的方法,AC#include#include#include#includeusing namespace std;struct note{ int x1,x2,y1,y2,x,y; int num;} a[5010];int vis[5010];bool cmp1(note aa,note原创 2014-07-24 11:36:46 · 808 阅读 · 0 评论 -
uva 11572 - Unique Snowflakes(与书上方法略有不同)
刘汝佳书上用的是set,通过集合来查找.count()和删除.erase().这个方法比我的要好,用时更短。我觉得map也能完成这个任务,但是其删除并不方便,需要先查找find()下标,然后删除此下标对应的元素但是map有map的用法,下面的方法就是比较容易实现的一种方法。我本想着这个一边读完就计算出了ans,应该更快一点的,但是事实上还不如先读再用set处理来得快。#incl原创 2014-07-24 15:40:30 · 910 阅读 · 0 评论 -
uva 12627 - Erratic Expansion(递归求解)
递归的边界条件写的多了……没必要写呢么多的。。不明白可共同探讨~#include#include#includeusing namespace std;long long dp(int kk,int pos){ int n=kk;int temp=(int)pow(2,n);// printf("%d %d\n",kk,pos); if(kk==0&&原创 2014-07-24 19:22:41 · 911 阅读 · 1 评论 -
uva 11988 - Broken Keyboard (a.k.a. Beiju Text)(双端队列deque)
#include#include#include#include#include#include#includeusing namespace std;string s;char ch;int main(){ while(getline(cin,s)) { deque deq,deq1; stringstream ss(s)原创 2014-07-25 20:09:35 · 580 阅读 · 0 评论 -
uva 12657 - Boxes in a Line(AC和TLE的区别,为什么说STL慢..)
用STL中的list写的,TLE#include#include#include#include#includeusing namespace std;list l;list::iterator it1,it2,it3,it4,it5,it;void work(int a,int a1=1,int a2=1){ it1=find(l.begin(),l.end(原创 2014-07-26 15:11:49 · 1513 阅读 · 0 评论 -
uva 122 - Trees on the level(一棵看着书都写不利索的树……)
#include#include#include#include#include#includeusing namespace std;const int maxn = 1000;char s[maxn];bool failed;vector ans;struct node{ bool have_value; int v; node *left,*原创 2014-07-26 17:25:38 · 980 阅读 · 0 评论 -
uva 1103 - Ancient Messages(象!形!文!字! dfs遍历计数)
我今天做的这叫什么题……今天这个题直接跪了,一看十六进制直接懵了。。然后在csdn上竟然发现了身边直系学长写的解题报告,然后问了一下解题的思路。然后写出来的代码,想要测试数据吗吧哈哈给一组最基本的~5 3ffff0fffff0ffff输出应该是KAC代码如下:#include#include#include#includeusing name原创 2014-07-26 20:54:34 · 3596 阅读 · 1 评论 -
uva 816 - Abbott's Revenge(有一点难度的bfs迷宫题目)
就是典型的bfs,但这道题目的难点在于其条件的读取和判断并不简单,需要想办法来读取条件,也需要想办法来判断在每个点处能不能满足向下继续走的条件。#include#include#include#include#include#includeusing namespace std;struct note{ int r; int c; int dir;}原创 2014-07-27 17:12:14 · 2053 阅读 · 0 评论 -
HDU 2289 Cup(二分可以,但是除了二分呢?)
这道题目,算数学题吗?算二分题吗?充其量算个水题吧...首先,没有用二分,但是发现了一种新的解法来代替二分。若果按照i从0,每次增加0.00000001来一直枚举到h的话,绝逼超时。枚举量太大了但是可以分成两步来呀:#include#include#define pai acos(-1.0)double r1,r2,h,v;double get_v(double temp原创 2014-07-30 15:06:42 · 855 阅读 · 0 评论 -
uva 11212 - Editing a Book(迭代加深搜索 IDA*) 迭代加深搜索
迭代加深搜索自己看的时候diyibiangengbenjiukanbu原创 2014-07-31 01:35:15 · 1318 阅读 · 0 评论 -
uva 1610 - Party Games(细节上的处理是关键,思路比较简单)
下面的代码是按照不同情况条理来分析的,不需要多解释,z原创 2014-08-01 10:44:12 · 1780 阅读 · 0 评论 -
uva 12545 - Bits Equalizer(比特变化器)
好在原来做题的思路不知道何时就养成了这种思路原创 2014-08-01 14:50:14 · 1369 阅读 · 0 评论 -
uva 116 - Unidirectional TSP (动态规划)
第一次做动规题目,以下均为个人理解以及个人方法,状态转移方程以及状态的定义也是根据个人理解,请过路大神指教。状态:每一列的每一个数[ i ][ j ]都是一个状态;然后定义状态[ i ][ j ]的指标函数d[ i ][ j ]为从[ i ][ j ]向右出发的可以得到的最小的整数和;状态转移方程:d[ i ][ j ]=min(d[ i+1 ][ j+1 ][ i-1 ][ j+1原创 2014-08-04 18:31:11 · 913 阅读 · 0 评论 -
uva11464 - Even Parity
应该是属于暴力枚举类型的题目然后这个问题和开关灯的问题的解决办法很类似然后这两个题目我都没有什么解决办法……这种矩阵里面计数或者是寻求最少改变数字类型的题目,往往就U懵掉,只是去找规律去寻求自己所谓的正确的解法会计算,会找规律,会递推,会多加一次然后想到再除以2……总之等等等等方法可能都已经想过,在我的认知中却没有什么思路可以解题。也不是没有想到过逐一枚举,但是那要怎么枚举呢,原创 2014-08-05 09:23:27 · 719 阅读 · 0 评论 -
uva 1625 - Color Length(dp 里面 L C S 问题解决方式变形)
LCS属线性结构上的动态规划,应该是动规里面很简单的一种类型。最长公共子序列问题,一旦明确了状态,找到状态转移方程还是很简单的。但是对于本题来说,难点之一就是会很难想到该如何定义状态。作为一只菜鸟,兹认为此题很复杂。首先我是想不到每一步都把没到终点的字母全加上1,以及这种效果与你去找开始和结束的效果是一样的。甚至,若不是在做动规的专题,我根本想不到这样的题目,会用动规来解决。再原创 2014-08-07 16:07:40 · 1720 阅读 · 0 评论 -
uva 1347 - Tour
#include#include#include#include#includeusing namespace std;const int maxn = 1010;double d[maxn][maxn];int n;struct node{ double x,y;}a[maxn];double dist(int p1,int p2){ double原创 2014-08-07 16:24:38 · 1042 阅读 · 0 评论 -
uva 12563 - Jin Ge Jin Qu hao(动态规划~劲!歌!金!曲!)
错的我真是无语。。。还是状态的把握不准确。。起始状态转移方程是很重要,但是只推出了方程是不够的对边界状态的处理,对特殊状态的处理,这些都很重要,错了任何一个小地方,都会导致WA....细节!更清晰的思路,更全面的考虑!#include#include#includeusing namespace std;int n,t;int v[55];int d[55][1000原创 2014-08-07 16:29:00 · 1672 阅读 · 0 评论 -
uva 437 The Tower of Babylon(动态规划 嵌套矩形问题最长路)
有思路就去做,要相信自己多处理更复杂的情况,你就不觉得现在复杂了#include#include#includeusing namespace std;typedef long long ll;struct soli{ ll a,b,c;}s[40];int n;ll d[40][3];int vis[40][3];ll answer[40][3];ll原创 2014-08-07 16:39:44 · 1100 阅读 · 0 评论 -
uva 11400 - Lighting System Design(动态规划 最长上升子序列问题变型)
本题难处好像是在于 可以把一些灯泡换成电压更高的灯泡以节省电源的钱 ,所以也才有了对最优方案的探求好的处理方法是按照电压从小到大排序,只能让前面的换成后面的,也就满足了把一些灯泡换成电压更高的灯泡的要求;一种电压的灯泡,要么不换,要换则应该全换:换,说明用当前的电源不值;而既然不值则应该全部换掉以避免使用当前电源,不然即增加了灯泡费用又没节省电源费用,亏大了。。。状态转移详见代码原创 2014-08-07 17:22:41 · 1075 阅读 · 0 评论 -
uva 10918 - Tri Tiling这是数学
[+]题意有一个3xn的矩形,装2x1的矩形,有多少种方案。思路显然,当n为奇数的时候不可能实现。考虑加入第n列的时候。如果把第n列和第n-1列孤立出来放矩形,可以放3种(这个不难数,这样f(n)=3∗f(n−2)但是加入第n列,n - 1和n - 2列也可以放矩形了(本来不可以如图所示所以目前f(n)=3f(n−转载 2014-08-08 12:59:57 · 767 阅读 · 0 评论 -
11582 - Colossal Fibonacci Numbers!
f (0) = 0 and f (1) = 1f (i+2) = f (i+1) + f (i) for every i ≥ 0Sample inputthree integers a,b,n where 0 ≤ a,b 64 (a and b will not both be zero) and 1 ≤ n ≤ 1000.Ta b n原创 2014-08-11 10:59:18 · 933 阅读 · 0 评论 -
10375 - Choose and divide(唯一分解定理的运用 eratosthenes构造素数表)
我觉得数学类的题目,每一道都有很好的解决方法,都很有保存的意义和价值。这道题目里面,巧妙地运用了 唯一分解定理,辅以素数的eratosthenes筛法构造,很好地解决了题目。值得思考和深入的学习。#include#include#include#include#includeusing namespace std;vector primes;const int ma原创 2014-08-11 16:18:28 · 745 阅读 · 0 评论 -
uva 1335 Beijing Guards
巧妙之处在于当人数是奇数时,其选择方案是第一个人尽量靠左选,以后编号为偶数的人尽量靠左选,编号为奇数的人尽量靠右选。然后二分枚举可能的礼物数量,看最后是否满足题目要求——第一个人和最后一个人不选重。细节问题总结:重定义全局变量会导致错误,切不好检查出来,应谨慎。#include#include#includeusing namespace std;const int maxn原创 2014-08-12 09:16:45 · 811 阅读 · 0 评论 -
uva 10791 Minimum Sum LCM ( 唯一分解定理 )
使用唯一分解定理的时候不一定要打出素数表,这句话是相对上一篇来讲的。做这道题目之前我对唯一分解定理方法的理解不完全。现在多想到了一些唯一分解,将当前需要分解的n用因子将其分解表达。需要试因子。因子的枚举应该是从2开始(从1开始没有意义),当当前数字n可以整除当前因子i时,就使其不断除以i,直到不能整除。这个步骤实际上已经在根本上避免了出现像4、6这种因子在唯一分解式中的出现——之前原创 2014-08-12 10:18:42 · 788 阅读 · 0 评论 -
uva 10820 - Send a Table(欧拉phi函数的应用)
本题的意思是:输入n,原创 2014-08-12 16:20:34 · 626 阅读 · 0 评论 -
uva 1636 - Headshot(简单概率问题)
直接扣一枪没有子弹 是条件概率 转一下再扣一枪 是简单事件发生的概率前者用00的个数除以00和01子串的总数后者用0的个数除以所有数字的个数然后换算一下运算方式比较即可#include#includeconst int maxn = 105;char s[105];int cnt0,cnt1,cnt2,cnt3;int main(){ while(scan原创 2014-08-12 17:14:55 · 1880 阅读 · 0 评论 -
uva 11181 - Probability|Given
条件概率公式:P( A|B ) = P( AB ) / P( B )表示在事件B发生的前提下,事件A发生的概率;对本道题:设事件E:r个人买了东西;事件Ei:第i个人买了东西;则要求的是P( Ei | E );计算P( E ) 用全概率公式即可,采用递归枚举出所有r个人买东西的情况,然后计算出其总的概率;计算P( Ei ) 就是在上面递归枚举的过程中将选上第i个人的情况原创 2014-08-12 19:11:32 · 727 阅读 · 0 评论 -
uva 580 - Critical Mass(递推法!)
我不大会推啊……原创 2014-08-12 20:50:58 · 682 阅读 · 0 评论 -
uva 12230 - Crossing Rivers(求数学期望)
利用了数学期望的线性性质:有线个随机变量之和的数学期望的关于每个随机变量的期望之和;由于过每条河的时间为L / V和3L / V的均匀分布,因此期望过河时间为2L / V.#include#include#includeusing namespace std;int n;double d;int main(){ int kase=0; while(scanf(原创 2014-08-14 10:40:52 · 789 阅读 · 0 评论 -
10288 - Coupons(赠券收集问题)(概率)
roblem FCouponsInput: standard inputOutput: standard outputTime Limit: 2 secondsMemory Limit: 32 MB Coupons in cereal boxes are numbered 1 to n, and a set of one of each is原创 2014-08-14 13:51:27 · 2366 阅读 · 0 评论 -
1637 - Double Patience(状态转移+求成功概率)
用九元组表示当前状态,即每队牌剩的张数,状态总数为5^9=1953125.设d[ i ]表示状态i对应的成功概率,则根据全概率公式,d[ i ]为后继成功概率的平均值,按照动态规划的写法计算即可。这个动态规划我不会写,帅哥思路真的很清晰很好啊。但是学会还是很高兴的#include#include#include#includeusing namespace std;#de原创 2014-08-14 15:38:25 · 1100 阅读 · 2 评论 -
uva 1626 Brackets Sequence ❀(动态规划)
状态表示方法:d[ i ][ j ]表示的是一条序列的开始和结束;状态定义:d[ i ][ j ]表示字串s[ i~j ] 需要添加的数量。#include#include#includeusing namespace std;int n;char s[105];int d[105][105];bool match(char ch1,char ch2){ if(原创 2014-08-14 15:49:14 · 1670 阅读 · 0 评论