08 2012 档案

摘要:题意是求七段数码管的显示,可将显示分为五个部分,垂直方向三个,水平方向两个;最后再求五个部分的组合。。。。好麻烦呐,不过思路简单,可能模拟题都这样吧。。。。View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 #include<string.h> 5 6 void printv1(int s,int a) 7 { 8 int i; 9 printf(" "); 10 switch(a) 11 { 12 case 1: case 4: 13 阅读全文
posted @ 2012-08-28 23:09 zhongya 阅读(264) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<math.h> 5 6 7 int main() 8 { 9 int i, t, j, m, ncases;10 int num, k, flag,a[18];11 12 while(scanf("%d",&num) != EOF)13 {14 if(num == 0) break;15 flag = 0;16 for(i=2; i<=16; ... 阅读全文
posted @ 2012-08-28 23:05 zhongya 阅读(255) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 typedef struct 6 { 7 int J, F; 8 double per; 9 }Point;10 Point P[1001];11 12 int cmp(const void *a,const void *b)13 {14 if((*(Point *)a).per < (*(Point *)b).per)15 return 1;16 else17 re... 阅读全文
posted @ 2012-08-21 10:41 zhongya 阅读(236) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define N 10001 5 6 int f[N], value[3]; 7 int main() 8 { 9 int i, j, V, ncases;10 11 scanf("%d", &ncases); 12 while( ncases-- )13 { 14 scanf("%d",&V); 15 value[0] = 150;16 ... 阅读全文
posted @ 2012-08-21 09:42 zhongya 阅读(124) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<math.h> 5 6 int a[125][125]; 7 8 int main() 9 { 10 int n, i, j, k, num; 11 12 while( scanf("%d",&n) != EOF)13 {14 memset(a,0,sizeof(a)); 15 for(i=0; i<=n; i++)16 {17 a[i... 阅读全文
posted @ 2012-08-21 09:11 zhongya 阅读(138) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #include<math.h> 5 #define N 1000000 6 7 long long a[N]; 8 int gcd(int n,int m) 9 {10 if(m == 0)11 return n;12 else13 return gcd(m,n%m); 14 }15 16 int Lcm(int a,int b)17 {18 return a/gcd(a,b)*b;//... 阅读全文
posted @ 2012-08-21 09:10 zhongya 阅读(138) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 char s[1001]; 6 int Roots(int x) 7 { 8 int num=0,i; 9 while( x )10 {11 num += x%10;12 x /= 10;13 } 14 if(num < 10) 15 return num;16 else17 return Roots(num); 18 } 19... 阅读全文
posted @ 2012-08-18 16:56 zhongya 阅读(144) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h> 2 3 int main() 4 { 5 int n; 6 7 while(scanf("%d",&n)!=EOF) 8 { 9 if((n+2)%4 == 0)10 printf("yes\n");11 else12 printf("no\n"); 13 } 14 15 return 0;16 } 首先不能打表,数据量太大即使long long 也无法存下... 阅读全文
posted @ 2012-08-18 16:55 zhongya 阅读(92) 评论(0) 推荐(0)
摘要:一开始一直纠结在Yi + Yj <= L (1 ≤ i < j ≤ m)这句,后来在网上搜了下,恍然大悟啊!原来如此简单,所选取的每个数最多只有一个大于L/2(看到这我想你就会做了,太关键了),只要每次枚举判断小于L/2就把count++,最后不要忘了把大于L/2的最小值和小于L/2的最大值想加判断一下,小于L/2就count++;View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main() 5 { 6 long long n, L, A, B, mod, max, min,x,len; 阅读全文
posted @ 2012-08-18 11:08 zhongya 阅读(131) 评论(0) 推荐(0)
摘要:比赛是木做出来,回头看看,是当时考虑的太复杂了,si = si-1 + dk or si = si-1 - dk , and si-2 < si<= n, 1 <= k <= m, i >= 3相减的不会去取,每次都加上个dView Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main() 5 { 6 int i, k, d, ncases; 7 int n, m, dmin; 8 9 scanf("%d", &ncases); 10 for(k = 阅读全文
posted @ 2012-08-18 11:01 zhongya 阅读(147) 评论(0) 推荐(0)
摘要:在草稿纸上算了半天,结果搜到了公式我了个去啊!搞ACM的数学不好真是太。。。。View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 5 int main() 6 { 7 int i,j,ncases,num,count; 8 double sum; 9 10 scanf("%d",&ncases);11 while( ncases-- )12 { 13 scanf("%d",&num); 14 sum = 0.0; 阅读全文
posted @ 2012-08-17 10:57 zhongya 阅读(139) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main() 5 { 6 int a,b,n,m,count,ncases; 7 int N; 8 scanf("%d",&N); 9 while( N-- )10 {11 ncases = 1; 12 while(scanf("%d%d",&n,&m))13 {14 if(n==0 && m==0) break; 1... 阅读全文
posted @ 2012-08-17 10:51 zhongya 阅读(167) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define N 1005 5 6 typedef struct 7 { 8 char s[15]; 9 int count;10 }Color;11 Color C[N];12 13 int cmp(const void *a,const void *b)14 {15 if( (*(Color *)a).count > (*(Color *)b).count)16 return 1;17 ret... 阅读全文
posted @ 2012-08-17 10:48 zhongya 阅读(181) 评论(0) 推荐(0)
摘要:比赛时这道题没做出来,后来在网上搜了一种简单的方法,把0,1,2,。。。。20,30,。。90存到一个数组里,n1,n2,n3代表每三位的数,刚开始自动匹配,n3开始计算,遇到million,thousand,hundred,再乘以10^n最后把n1,n2,n3加在一起就是所求结果。View Code 1 #include<stdlib.h> 2 #include<stdio.h> 3 #include<string.h> 4 5 char str[28][15]={"zero", "one", "two&q 阅读全文
posted @ 2012-08-17 08:17 zhongya 阅读(159) 评论(0) 推荐(0)
摘要:刚开始题意理解错了,好吧!无情的奉献了一次WA,去网上搜了下,这才把题意完全弄明白,N个人站成一排,每次奇数位或是偶数位出列,直到最后剩下的数的个数小于等于3,求总共有多少种方法View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int find(int n) 5 { 6 if(n < 3 ) return 0; 7 else if(n == 3) return 1; 8 else 9 {10 if(n%2 == 0) 11 return find(n/2)*2;... 阅读全文
posted @ 2012-08-17 08:11 zhongya 阅读(172) 评论(0) 推荐(0)
摘要:一开始的想法很简单,本想求出所有直线的交点,然后判断;结果一开数据量10000,超时啊!好吧,用了逆序对。将每条直线与L和R的的交点求出,分别放在结构体数组的P的下,x和y中,然后根据题意就是求线段的交点个数,也就是求结构体数组的逆序对的个数。View Code 1 #include<stdio.h> 2 #include<math.h> 3 #include<stdlib.h> 4 #define N 10001 5 6 typedef struct 7 { 8 double x,y; 9 }Node;10 Node p[N]; 11 long long 阅读全文
posted @ 2012-08-16 11:11 zhongya 阅读(206) 评论(0) 推荐(0)
摘要:比赛时看着题的太长了,加上又全是英文(英语不太好T_T.....)题意没理解,就放弃了,后来听说是求他的最长上升子序列,我勒个去啊!一个简单的DP搞这么麻烦的题目。。。。要用O(n*logn)方法过。。。。View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define N 40005 5 6 int stack[N]; 7 int main() 8 { 9 int i,temp,ncases;10 int top,n,low,mid,high; 11 12 . 阅读全文
posted @ 2012-08-16 11:04 zhongya 阅读(168) 评论(0) 推荐(0)
摘要:刚开始用的多重背包写的结果果然超时,后来用别人告诉我的把它用二进制压缩一下,这里附上资料:解题思路:题目给价值为1~6的六种大理石的个数若干,要求我们判断是否能够把石头平分成相等的价值。我的思路是这样的:将大理石的重量看成和价值相等,那么总容量等于总价值数sum,那么如果总容量为sum/2时能装的最大价值也为sum/2,那么说明能拆分也两份相等的价值。注意:此题用背包要压缩,否则会超时。背包九讲的第三讲中提到了压缩方法,我贴出来:P03:多重背包问题每种物品有一个固定的次数上限题目有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品 阅读全文
posted @ 2012-08-15 15:26 zhongya 阅读(276) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 int main() 6 { 7 int i,j,k,ncases,n,m,num[110]; 8 int value[110],weight[110],f[110]; 9 10 scanf("%d",&ncases);11 while( ncases-- )12 {13 scanf("%d%d",&n,&m); 14 for(i=1; i< 阅读全文
posted @ 2012-08-13 17:20 zhongya 阅读(126) 评论(0) 推荐(0)
摘要:简化的动态规划方程:for i=1..N for v=0..V f[v]=max{f[v],f[v-c[i]]+w[i]}View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define m 200000000 5 6 int main() 7 { 8 int i,j,v,ncases,f[10005]; 9 int empty,full,V,N,P[505],W[505];10 11 scanf("%d",&ncases);12 w 阅读全文
posted @ 2012-08-13 17:19 zhongya 阅读(123) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 int main() 6 { 7 int i,j,N,V,v,ncases; 8 int f[1005],c[1005],w[1005]; 9 10 scanf("%d",&ncases);11 12 while( ncases-- )13 {14 scanf("%d%d",&N,&V);15 for(i=1; i<=N; i++)16 s 阅读全文
posted @ 2012-08-13 17:17 zhongya 阅读(137) 评论(0) 推荐(0)
摘要:刚看到这题时本想着拿它来练习下DFS来着可是被坑了一下午让我与苦无泪,回来检查代码时,发现自己吧0这个特殊的数忘记考虑了,T_T。。。。思路:用DFS搜索出所有可能的情况然后打表输出。View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define N 1000005 5 6 int fac[11] = {0,1,1,2,6,24,120,720,5040,40320,362880};//这里数组要注意。。fac[0] = 0,fac[1]代表了0的阶乘,fac 阅读全文
posted @ 2012-08-10 18:55 zhongya 阅读(230) 评论(0) 推荐(0)
摘要:弄两个数组a,b,将a数组复制到b,先把b排序,然后从依次减去b数组的数值,小于0的不能走,看指针是否能从1到达n,当第一个满足条件得数出现时即为听别人说此题也可用动态规划,不过我没想出来。。。T_T.....View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 6 int cmp(const void *a,const void *b) 7 { 8 return *(int *)a - *(int *)b; 9 }10 11 int main()12 {13 阅读全文
posted @ 2012-08-10 11:06 zhongya 阅读(197) 评论(0) 推荐(0)
摘要:此题比赛时没有好的方法不会做,最后从别人那里学到了一个好的方法,就是从小到大慢慢数,从11到99开始数数,直到l < 100...1 < r < 9000..9当加到这一步时,输出count就是所求结果,比如 47 1024 首先是两位数的 11 到99 ,47在里面,此时数目是5,再到三位数,101 到 999,此时1024大于他们数目count直接加上9*10(101 到191共10个),接着是四位数,1001 到 9999 ,1024在里面,此事要计算1001到1024首尾相同的数的个数,总共有3个,所以总数就是98个。View Code 1 #include<c 阅读全文
posted @ 2012-08-10 10:58 zhongya 阅读(174) 评论(0) 推荐(0)
摘要:题意叫你求交叉点的个数,转换一下思维,把第一个数看作是i,和它相连接的第二个数看作是ai,当i < j 且 ai > aj时这时才有交叉点,这样就转换为求逆序对的个数;首先,把他x从小到大排序,x相同的按y从大到小排序,排完序后,在使用合并排序,计算逆序对的个数。View Code 1 #include<stdio.h>//从网上搜的都是用树状数组解的,这个我暂时还不会,等以后学了在看吧。 2 #include<stdlib.h> 3 #define MAX 1000005 4 5 typedef struct NODE 6 { 7 int x,y; 8 } 阅读全文
posted @ 2012-08-08 16:23 zhongya 阅读(260) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 #define N 500000 5 6 int a[N],b[N]; 7 long long count; 8 void mergearray(int a[], int first, int mid, int last, int temp[]) 9 { 10 int i = first, j = mid + 1; 11 int m = mid, n = last; 12 int k = 0; 13 ... 阅读全文
posted @ 2012-08-04 17:18 zhongya 阅读(126) 评论(0) 推荐(0)
摘要:题目叙述的有问题,咒语应该是以b开头m结尾的,一开始看题意就是看不懂,搜了别人的代码,才发现题意的坑了,在网上看到了了别的解法貌似构图Floyd算法,不过只是要拿此题练习DFS仅此而已。思路:先找到以b开头的单词在开始搜索,寻找首位相连的单词,输出的时候容易错,有点坑爹。View Code 1 #include<cstdio> 2 #include<iostream> 3 #include<cstdlib> 4 #include<cstring> 5 #define N 1001 6 7 using namespace std; 8 9 stru 阅读全文
posted @ 2012-08-04 11:25 zhongya 阅读(142) 评论(0) 推荐(0)
摘要:一开始被数据规模下到了,后来看了别人的思路,恍然大悟,可以先写普通的程序将每个数打印出来,最后再打表输出。View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int fan(int n) 5 { 6 int i,ans=1; 7 for(i=1; i<=n; i++) 8 { 9 ans = ans*i;10 }11 return ans;12 } 13 14 int main()15 {16 int i,j,ncases,t,m,n;17 int sum... 阅读全文
posted @ 2012-08-04 11:18 zhongya 阅读(244) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 以前用BFS写过,这次改用DFS写发现DFS掌握的不好,挑了好久才过,今下午才AC了两道题,还要加紧练习DFS! 5 int row,col,count,vis[21][21]; 6 char map[21][21]; 7 int dx[] = {0,0,-1,1}; 8 int dy[] = {1,-1,0,0}; 9 void DFS(int x,int y)10 {11 int sx,sy,i;12 vis 阅读全文
posted @ 2012-08-03 17:48 zhongya 阅读(115) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 从第一种开始搜索,搜索完毕后回溯,搜索下一个 4 int n,m,count,sum,val[11],num[11]; 5 void DFS(int x) 6 { 7 int i; 8 if(sum == n) 9 {10 count++; 11 return ;12 }13 if(sum > n || x > m) 14 return ; 15 for(i=1; i<=num[x]... 阅读全文
posted @ 2012-08-03 16:01 zhongya 阅读(246) 评论(0) 推荐(0)
摘要:思路很简单,一开始没有用优先队列,WA了几次后来改了,想一想走迷宫停顿时应该用优先队列。if(u.btime==1) continue;此句不能省略当时间为1时,这一步无法出去,只有重新来过View Code 1 #include<cstdio> 2 #include<cstdlib> 3 #include<iostream> 4 #include<cstring> 5 #include<queue> 6 7 using namespace std; 8 int N,M,map[10][10]; 9 int dx[] = {0,0,- 阅读全文
posted @ 2012-08-03 15:41 zhongya 阅读(179) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h> 2 #include<stdlib.h>//回溯法运用。模拟汉诺塔过程 3 4 int flag; 5 void hanor(int n,int *a,int *b,int *c) 6 { 7 int i; 8 if(!flag) 9 return ;10 if(n == 0)11 {12 flag = 1;13 return ;14 } 15 if(n == b[1])16 {17 f... 阅读全文
posted @ 2012-08-01 23:18 zhongya 阅读(176) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 char s1[1001],s2[1001]; 6 int cmp (const void *a,const void *b) 7 { 8 if( *(char*)a < *(char *)b ) 9 return 1;10 return -1;11 }12 13 int main()14 {15 int i,j,k,len;16 17 while(scanf("%s",s1)... 阅读全文
posted @ 2012-08-01 23:16 zhongya 阅读(149) 评论(0) 推荐(0)
摘要:View Code 1 #include<stdio.h>//二分搜索技术运用。此题在排序后应用减法从右往左。 2 #include<stdlib.h> 3 #include<string.h> 4 5 int a[1001],i,j,k,ncases; 6 int search(int num,int from,int end) 7 { 8 int mid; 9 while(from <= end) 10 { 11 mid = (from+end)/2; 12 if(num == a[mid])13 return... 阅读全文
posted @ 2012-08-01 23:15 zhongya 阅读(181) 评论(0) 推荐(0)