摘要:
UVA_10041这个题目是一个贪心的题目。如果设按升序排列的si的数组为s[],那么Vito的位置一定为s[(r-1)/2]。对于这一点,我们分两种情况进行讨论:①如果si的数量为奇数,那么Vito的位置一定取数组s[]中间的那个值s[(r-1)/2]。因为如果周围的值和s[(r-1)/2]相同的话,Vito的位置左右移动不会产生影响,但如果周围的某个值s[i]不和s[(r-1)/2]相同,倘若Vito的位置移到了这个值上面,可以计算得出,总距离至少增加了abs(s[i]-s[(r-1)/2])(如果s[i]不和s[(r-1)/2]紧邻的话,会增加的更多)。 ②如果si的数量为偶数,那么Vi 阅读全文
posted @ 2011-09-21 22:17
Staginner
阅读(559)
评论(0)
推荐(0)
摘要:
UVA_10340 这个题目只要依次查找s中的字符是否按顺序在t中出现过即可,此外,这个题目如果s和t完全相同的话,也要输出Yes,尽管这样貌似算是没加密过……但毕竟没和题意产生冲突。#include<stdio.h>#include<string.h>char s[100000],t[100000];int main(){ int i,j,k1,k2; while(scanf("%s%s",s,t)==2) { k1=strlen(s); k2=strlen(t); if(k1>=k2) { pr... 阅读全文
posted @ 2011-09-21 13:47
Staginner
阅读(1251)
评论(0)
推荐(0)
摘要:
UVA_10026这个是一个贪心的题目首先按照fine/time降序排列,值相同的再按序号升序排列。对于为什么贪心策略是这个样子的,我们不妨拿相邻的两个事件a、b来说明一下。由于a、b之后的事件是固定的,所以我们无论排成ab还是排成ba后面部分的损失都是固定的,那么损失的差别主要来源于究竟是排成ab还是排b成a。排ab的损失为ta*fb,排ba的损失为tb*fa,那么如果ta*fb<tb*fa,我们就排成ab,这样可以得到fa/ta>fb/tb,推而广之,就得到了我们的贪心策略。#include<stdio.h>#include<string.h>#incl 阅读全文
posted @ 2011-09-21 12:26
Staginner
阅读(633)
评论(0)
推荐(0)
浙公网安备 33010602011771号