摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=56 1 #include<stdio.h> 2 int main() 3 { 4 int i,j,k,m,n,s; 5 scanf("%d",&s); 6 while(s--) 7 { 8 scanf("%d%d",&n,&m); 9 for(i=m,j=0;i<=n;i++)10 for(k=i;!(k%m);j++)11 k=k/m;12 printf("%d\n",j);1...
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=473 1 #include <stdio.h> 2 int main() 3 { 4 int a,b; 5 int i; 6 while(scanf("%d%d",&a,&b)!=EOF) 7 { 8 if(b==0) 9 printf("1\n");10 else 11 {12 a%=10;13 b=b%4+4;14 int s=a;15 for(i=1;i<b;i++)16 ...
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=604 1 #include <stdio.h> 2 int main() 3 { 4 char ch,str[101]; 5 int n,i; 6 scanf("%d",&n); 7 getchar(); 8 while(n--) 9 {10 gets(str);11 for(i = 0; str[i] != '\0'; i++)12 {13 if((i % 2 == 0...
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=599 1 #include <stdio.h> 2 int main() 3 { 4 int n,H; 5 scanf("%d",&n); 6 while(n--) 7 { 8 scanf("%d",&H); 9 if(H<=10)10 printf("1\n");11 else if(H%5==0)12 printf("%d\n",(H-10)/5+1);13 else14
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=596 1 #include<stdio.h> 2 int main() 3 { 4 int n,i,max,a,b; 5 while(scanf("%d",&n),n) 6 { 7 max=0; 8 for(i=0;i<n;i++) 9 {10 scanf("%d%d",&a,&b);11 if(a+b>max)12 max=a+b;13 }14 ...
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=276 1 #include<stdio.h> 2 int main() 3 { 4 char a,b; 5 int i; 6 scanf("%d",&i); 7 getchar(); 8 while(i--) 9 {10 scanf("%c",&a);11 getchar();12 scanf("%c",&b);13 if(a!=b)14 {15 ...
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=148 1 #include<stdio.h> 2 void fun(int a1[][2],int a2[][2]) 3 { 4 int c[2][2],i,j,k; 5 for(i=0;i<2;i++) 6 for(j=0;j<2;j++) 7 { 8 c[i][j]=0; 9 for(k=0;k<2;k++)10 c[i][j]=(c[i][j]+a1[i][k]*a2[k][j...
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=451思路:组合数+全错位全错排列问题,最早是由欧拉给出的答案.我们不妨设N个人的拿法为f(N),则f(N)=(N-1)[f(N-1)+f(N-2)].f(0)=0,f(1)=1.这个递推公式是很容易证明的.证明如下:设N个人为a,b,c,d...,N张卡为A,B,C,D...若a拿b的卡B,b也拿a的卡A,则显然只剩下N-2个人拿卡,自然是f(N-2)种了.若a拿b的卡B,b没拿a的卡A(与"b没拿b的卡B"相同),则显然与N-1个人拿卡一样,自然是f(N-1)种了.而
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=469思路:动态规划dp题目分析:由于第一个只能是1,则第二个数只能是2,3当第二个数是2时,则相当于是对2-n的排列,相当于对1-(n-1)的排列,即s[n-1];当第二个数是3时,第三个数只能是2,4,5此时,当第三个数为2时,则是对3-n的排列,相当于对1-(n-3)的排列,即s[n-3] 当第三个数为4时,此时,第四个数只能是2,除了n等于4时,对于n大于4的排列,都不符合要求, 而n为4时,与第三个数为5时的排列相同,所以, 可认为第三个数为4时不符合要求, 当第三个数...
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=91思路:贪心,最大到最小依次加~~代码如下: 1 #include<stdio.h> 2 #include<string.h> 3 int main() 4 { 5 int m,n,i,aim; 6 int a[11]; 7 memset(a,0,sizeof(a)); 8 a[1]=1; 9 for(i=2;i<=10;i++) //计算阶乘 10 a[i]=a[i-1]*i;11 scanf("%d",&m);12 ...
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=79思路:同NYOJ 17 单调递增最长子序列(经典dp)而本题区别是求最长递减子序列的长度,只需要改动a[i]与a[j]大小方向即可 动态规划法:O(n^2) 设f(i)表示L中以ai为末元素的最长递增子序列的长度。则有如下的递推方程: f(i)=max(f(i+1),f(i+2),...,f(L-1),f(L))+1;用一个int dp[i]数组保存当前的f(i)值,可想而知最后 *max_element(dp,dp+L) 便得到了答案 这个递推方程的意思是,在求以ai为末元素的...
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=17题目分析:同NYOJ 79拦截导弹先解释下什么叫子序列。若a序列删去其中若干个元素后与b序列完全相同,则称b是a的子序列。我们假定存在一个单调序列{An}(以递增序列为例),现在在其后面添加一个元素a(n+1),有两种情况:1.a(n+1)>a(n) 。此时,a(n+1)可以添加到An序列的尾部,形成一个新的单调序列,并且此序列长度大于之前An的长度;2.a(n+1)<=a(n)。此时,a(n+1)当然不可以添加到An序列的尾部。经过分析,我们可以得出这样的结论:一个单调序列
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=18思路:dp问题代码如下: 1 #include<iostream> 2 using namespace std; 3 int a[105][105]; 4 int main() 5 { 6 int n,m,i,j; 7 while(cin>>n) 8 { 9 for(i=0;i<n;i++)10 for(j=0;j<=i;j++)11 cin>>a[i][j];12 for(i=n-2;i>=0;i-...
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=484代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 int main() 6 { 7 int n=0,k; 8 string a; 9 while(cin>>a)10 {11 printf("Case %d: ",++n);12 if(a=="I")cout<<
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=171思路:dp问题,不过要注意开始的时候下表要考虑好,我是让d[][] 的四周空出一行,这样就不会出错了代码如下: 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 int i,j,N,M; 5 int map[25][25],d[25][25]; 6 int dp(int N,int M) 7 { 8 memset(d,0,sizeof(d)); 9 for(i=0;i<
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=283题目分析:意思是你已经写好了一个程序,可惜你的程序输出方式老板不喜欢!However, your boss does not like the way the output looks, and instead wants the output to appear more symmetric, with the shorter strings at the top and bottom and the longer strings in the middle.老板希望你能“symme
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=514思路1:有篇博文写的是统计二进制中1的个数和,这篇是统计区间内十进制的1的个数和。先讨论下1到n间的1的个数和。给你一个数如:384,求1~384的1的个数之和。那么我只需求出1~300中1的个数和+1~80中1的个数和+1~4中1的个数和。1~4的1的个数为1,1~80中1的个数为101(十位数)+8*100(个位数)----十位数有10,11,12,13....19(共10个数--其中11后面的1作为个位数看待),个位数为1,11,21,31...71,共有8个1,同理可得1~30
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=105思路:大数求余,同NYOJ 205 求余数 1 #include<stdio.h> 2 #include<string.h> 3 char num[1000100]; 4 int main() 5 { 6 long int i; 7 int n,temp,t; 8 scanf("%d",&n); 9 while(n--)10 {11 scanf("%s",num);12 t=strlen(num);13 ...
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=311思路:dp问题,同NYOJ 289 苹果问题,在此基础上改动即可AC,至于除dp[0]为0外全部初始化为负无穷,不太明白为啥要初始化负无穷。。。在思考。。。代码如下: 1 #include <stdio.h> 2 #include <string.h> 3 #define N 100001 4 int dp[50001]; 5 int c[N],w[N]; 6 int max(int x,int y) 7 { 8 return x>y?x:y; 9 }10
阅读全文
摘要:地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=37思路1:dp动态规划分析:d[i][j]表示从第 i 到第 j 的最优解;if(a[i]==a[j]) d[i][j]=d[i+1][j-1];d[i][j]=max{d[i][j] , d[i+1][j]+1 , d[i][j-1]+1};代码如下: 1 #include<stdio.h> 2 #include<string.h> 3 #define N 1010 4 int d[N][N]; 5 char a[N]; 6 int min(int x,int y
阅读全文