04 2012 档案

摘要:if(x==n&&y==m)return 1;注意这里,前几次一直写成||的关系,其实是不对的,因为即使是在边界由于有距离的限制,所以不一定只有一条路径。 阅读全文
posted @ 2012-04-20 20:25 朝圣の路 阅读(136) 评论(0) 推荐(0)
摘要:记忆化搜索,别的不多说:代码如下:#include"stdio.h"#include"string.h"int dis[150][150],count[150][150],vis[150][150];int n,m;int dfs(int x,int y){ int i,j,ans=0; if(x==n&&y==m) return 1; if(vis[x][y]!=0) return count[x][y]; for(i=0;i<=dis[x][y]&&i<=n;i++) { for(j=0;j<=dis 阅读全文
posted @ 2012-04-20 20:22 朝圣の路 阅读(220) 评论(0) 推荐(0)
摘要:感觉这题好典型啊。。。第一点要注意的是求前N个数立方和的公式,第二点要注意输出格。一定要好好看哦。。。这个输出我还是第一次学到、、代码如下:#include"stdio.h"int main( ){ __int64 ans,n; while(~scanf("%I64d",&n)) { ans=((n*(n+1)/2)%10000)*((n*(n+1)/2)%10000)%10000; printf("%04I64d\n",ans); } return 0;} 阅读全文
posted @ 2012-04-20 01:27 朝圣の路 阅读(277) 评论(0) 推荐(0)
摘要:唉,直到今天我才把这题的题意读明白,也不知道出题人是怎么出题的,把一道小题出的这么难以理解真是蛋疼,别的不多说,就是输入的数据可以理解为每个硬币的理论概率。然后随机随机抽取硬币问是否能使正面的概率和反面的概率相等。代码如下:#include"stdio.h"int main( ){ int x1,y1,x2,y2,x3,y3; int t,count=1,num; scanf("%d",&t); while(t--) { num=0; scanf("%d%d%d%d%d%d",&x1,&y1,&x2,& 阅读全文
posted @ 2012-04-16 22:41 朝圣の路 阅读(167) 评论(0) 推荐(0)
摘要:这题不能用dp啊,真是蛋疼。#include"stdio.h"int a[1005],sum[1005],s[1005];int cal(int x){ return x>0?x:-x;}int main( ){ int t,n,i,min,j,sum,count=1; scanf("%d",&t); while(t--) { scanf("%d",&n); min=0xffffff; sum=0; for(i=1;i<=n;i++) scanf("%d",&a[i]); ... 阅读全文
posted @ 2012-04-16 17:20 朝圣の路 阅读(124) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4217这题是在比赛的过程中完成的,是一道线段树问题,我当时写了好久,感觉跟普通的线段树不一样,因为本来自己对线段树的理解就不是很透彻,所以写起来很困难,不过我最后还是把这个问题解决了,使自己对线段树的理解又加深了一层。代码如下:#include"stdio.h"__int64 sum;struct ln{ int left,right,num;}nod[800000];void create(int u,int l,int r){ int mid; nod[u].left=l;nod[u] 阅读全文
posted @ 2012-04-15 22:34 朝圣の路 阅读(191) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4221还是读题的问题,第一遍读题时,没太明白,以为是求最小的总得罚款数。但是第二组simple对不上,所以又重读一遍题,原来是求每任务让最大罚款尽可能的小,这样的话就很明了了,通过依次排序,就得到结果了。对了,还要注意这题int型装不下,要用——int64.代码如下:#include"stdio.h"#include"stdlib.h"typedef struct course{ int c,d;}node;int cmp(const void *a,const voi 阅读全文
posted @ 2012-04-15 22:30 朝圣の路 阅读(115) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4218恩。。。这题当时比赛的时候题意弄得稀里糊涂,不过赛后好好研究一下还是把题意弄得差不多了,其实这题没是用什么算法,只是简单的判断距离。不过这题在输出时的空格上不符合常理的降低了难度,允许输出后面的空格,刚开始不知道就PE了N次,不过最后多次改动之后终于过了。代码如下:#include"stdio.h"#include"string.h"int main( ){ int t,r,i,j,min,count=1; int a[50][50],num[50]; scanf 阅读全文
posted @ 2012-04-15 22:26 朝圣の路 阅读(102) 评论(0) 推荐(0)
摘要:此题第一次做时没考虑0+0的情况,导致wa了一次,下次一定要记住类似此种的极限情况。 阅读全文
posted @ 2012-04-12 21:51 朝圣の路 阅读(156) 评论(0) 推荐(0)
摘要:时钟的三个指针问题。。。连秒针也要看成是连续变化的。。。求出相对速度。。然后求周期 阅读全文
posted @ 2012-04-12 21:22 朝圣の路 阅读(214) 评论(0) 推荐(0)
摘要:#include"stdio.h"#include"string.h"char a[1000010], b[10010] ;int next[10010] = {-1} ;void getnext(char p[],int leth){ int i,j=-1; for(i=1;i<leth;i++) { while(j!=-1&&p[i]!=p[j+1])j=next[j]; if(p[i]==p[j+1])j++; next[i]=j; }}int kmp(char t[],char p[],int leth1,int let.. 阅读全文
posted @ 2012-04-12 21:19 朝圣の路 阅读(4545) 评论(0) 推荐(0)
摘要:#include"stdio.h" int gcd(int m,int n) { int t,a,b,c; if(m<n) {t=m;m=n;n=t;} a=m;b=n;c=m%n; while(c!=0) {a=b;b=c;c=a%b;} return b; }int lcm(int m,int n) { return m/gcd(m,n)*n;//n必须后乘否则溢出。。我操。。这一个毛病让我wa了无数次了} int main( ) { int m,t,N,i; int s; while(~scanf("%d",&t)) { while( 阅读全文
posted @ 2012-04-08 16:09 朝圣の路 阅读(177) 评论(0) 推荐(0)
摘要:位数的计算方法是(int)log10(x)+1 这个是计算x的位数的log10(n!)=log10(1)+log10(2)+log10(3)+...+log10(n) #include<stdio.h>#include<math.h>int main() { int n,t; double sum; scanf("%d",&t); while(t--) { sum=0; scanf("%d",&n); if(n==0) { printf("1\n"); ... 阅读全文
posted @ 2012-04-08 15:46 朝圣の路 阅读(261) 评论(0) 推荐(0)
摘要:# include <stdio.h># include <string.h> # define REP(i,a,b) for(i = a ; i<= b ; i++) typedef long long ll ; ll MOD = 0x7fffffff ; int n ; char graph[1010][1010] ; int vis[1010][1010] ; ll dp[1010][1010] ; int q[1010*1010][2] ; int tab[4][2] = {{0,-1},{0,1},{-1,0},{1,0}} ; void bfs() { 阅读全文
posted @ 2012-04-07 23:35 朝圣の路 阅读(293) 评论(0) 推荐(0)