07 2012 档案

摘要:题意:把一个中英文混合字符串里的英文标点全部改成中文标点。Analyse:注意到假若是“"(出一个是中文的,后一个是英文的),则应改成“”。中文字符在C中的储存是一个字占两个char,即在字符串中两个连续的char才表示到一个中文,这两个要连续输出才能正确输出成中文字符。而且要判断字符串中的某个中文字符是不是你想要的字符,要拿出整个连续的两个char(即是一个字符串)来比较。View Code 1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 char str[30000],temp[3]; 阅读全文
posted @ 2012-07-24 16:28 Hogg 阅读(202) 评论(0) 推荐(0)
摘要:题意:Gardon买了巧克力一堆,路上遇n人,每人都给一半另加半个,最后自己就没有了。现在Gardon没有遇到最后拿光自己巧克力的那个人(共遇n人),求开始时有多少巧克力。Analyse:假如Gardon跟朋友全遇上了,他一块也不剩,所以到最后一个人的时候他刚好有一块巧克力。设a[n]为遇到第n个人时他有的巧克力数,有关系式:a[1]/2+0.5+a[2]/2+0.5+……+a[n]/2+0.5=a[1]-1,a[n-1]/2-0.5=a[n]得出a[1]=pow(2,n+1)-1。注意到n<=1000,所以这是个大数问题。View Code 1 #include<stdio.h& 阅读全文
posted @ 2012-07-23 22:47 Hogg 阅读(153) 评论(0) 推荐(0)
摘要:题意:数出一个字符串中的回文子串数。Analyse:水题,分奇数长度与偶数长度的子串来数即可。View Code 1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 char str[5005]; 6 int i,j,head,tail; 7 int counter; 8 while(gets(str)) 9 {10 head=0;11 tail=strlen(str)-1;12 counter=0;13 //奇数长度14... 阅读全文
posted @ 2012-07-22 23:57 Hogg 阅读(178) 评论(0) 推荐(0)
摘要:题意:输出[a,b]之间的所有回文素数。Analyse:回文的判断不复杂,时间主要耗在整理素数表上,素数打表比较快的方法是“筛选法”,但这样还是会超时,只好无赖地预先打表。View Code 1 #include<stdio.h> 2 int pr[779]={ 3 5,7,11,101,131,151,181,191,313,353,373,383,727,757,787,797,919,929,10301,10501, 4 10601,11311,11411,12421,12721,12821,13331,13831,13931,14341,14741,15451,15551, 阅读全文
posted @ 2012-07-22 23:38 Hogg 阅读(364) 评论(0) 推荐(0)
摘要:题意:0,1,2......(n-1)一共n个洞环绕一个小岛,狼从0开始每m个洞搜寻一个,问是否存在狼搜不到的洞。Analyse:m=xd,n=yd,所以有ym=xn,表示一个搜索周期会经过xn个洞,若n与m的最大公约数d为1,则一个周期经过的洞数为mn(即m圈),因为每一圈搜的洞数为n/m,全部洞搜完的圈数为n/(n/m)=m,这就表示已经把所有洞搜遍。所以gcd(m,n)=1是搜遍所有洞的充要条件。View Code 1 #include<stdio.h> 2 int gcd(int a,int b) 3 { 4 int temp; 5 if(a<b) 6 { 7... 阅读全文
posted @ 2012-07-21 16:16 Hogg 阅读(199) 评论(0) 推荐(0)
摘要:题意:求N!%2009(起初以为是求N!,搞死人)Analyse:2009=7*7*41,N>=41时,N!因式分解一定含7*7*41,即N!%2009=0.所以只要计算0<=N<=40时的答案就OK。设N!=m+2009*n,N!%2009=m,(N+1)!%2009=[(N+1)*(m+2009*n)]%2009=[m*(N+1)]%2009,有了这个就可以轻易递推求解了。View Code 1 #include<stdio.h> 2 int main() 3 { 4 int a[41]; 5 int i; 6 a[0]=1; 7 for(i=1;i<4 阅读全文
posted @ 2012-07-19 16:15 Hogg 阅读(146) 评论(0) 推荐(0)
摘要:题目:As we all know the Train Problem I, the boss of the Ignatius Train Station want to know if all the trains come in strict-increasing order, how many orders that all the trains can get out of the railway.Analyse:用动态规划的思想,dp[n]为n列火车能排成的排列数,从结果看,如果火车1前面有x列火车,则这x列火车为火车2到火车x+1,而这x列火车的排列数为dp[x],火车1后面的n- 阅读全文
posted @ 2012-07-17 10:24 Hogg 阅读(437) 评论(0) 推荐(0)
摘要:FatMouse's Speed题意:找出最长一个最长的序列来反驳“老鼠越大只越跑得快”,要求一个最长的体重递增,速度递减的子序列。Analyse:找最长子序列,先把老鼠按体重递增排列,然后分析每只老鼠放在序列最后时可以得到的最长子序列dp[i](因为子序列能否每增加一只老鼠的决定因素,是最后一只老鼠的数据),dp[i]=max(dp[j]+1(第j只老鼠的速度要小于第i只))(j<i),再在这些子序列里比较找出最长的子序列就OK。View Code 1 #include<stdio.h> 2 struct Mouse 3 { 4 int w; 5 int s; 6 阅读全文
posted @ 2012-07-13 16:47 Hogg 阅读(290) 评论(0) 推荐(0)