A - Hard Code Hdu 4813
题目大意:给你一坨字符串,让你输出其栅栏密码的解码形式
思路:水题模拟
1 #include<iostream> 2 #include<cstdio> 3 #include <math.h> 4 #include<algorithm> 5 #include<string.h> 6 #include<queue> 7 #define MOD 1000003 8 #define maxn 2009 9 using namespace std; 10 char ch[maxn]; 11 int main() 12 { 13 int n,m,t; 14 scanf("%d",&t); 15 while(t--) 16 { 17 scanf("%d%d",&n,&m); 18 scanf("%s",ch+1); 19 int now=0; 20 for(int i=1;i<=n;i++) 21 { 22 for(int j=1;j<=m;j++) 23 { 24 printf("%c",ch[++now]); 25 } 26 printf("\n"); 27 } 28 } 29 return 0; 30 }
C - Little Tiger vs. Deep Monkey HDU4815
题目大意:有N道题目,每道题目有一定分值,现在猴子同学是乱答的,也就是每道题有50%的机会答对,问至少要答对多少分才能使赢猴子的概率大于P
思路:概率DP,dp[i][mark]表示回答到第i道题,猴子得到mark分的概率,所以转移就是dp[i][mark]=dp[i-1][mark-a[i]]*0.5+dp[i-1][mark]*0.5
1 #include<iostream> 2 #include<cstdio> 3 #include <math.h> 4 #include<algorithm> 5 #include<string.h> 6 #include<queue> 7 #define MOD 1000003 8 #define maxn 2009 9 using namespace std; 10 double dp[50][1001*40]; 11 int a[3009]; 12 int main() 13 { 14 int t; 15 scanf("%d",&t); 16 while(t--) 17 { 18 memset(dp,0,sizeof(dp)); 19 int n,sum=0;double p; 20 scanf("%d%lf",&n,&p); 21 dp[0][0]=1; 22 for(int i=1;i<=n;i++)scanf("%d",&a[i]),sum+=a[i]; 23 for(int i=1;i<=n;i++) 24 { 25 for(int j=0;j<=sum;j++) 26 { 27 if(j<a[i])dp[i][j]=dp[i-1][j]*0.5; 28 else dp[i][j]=dp[i-1][j-a[i]]*0.5+dp[i-1][j]*0.5; 29 } 30 } 31 for(int i=0;i<=sum;i++) 32 { 33 dp[n][i]+=dp[n][i-1]; 34 if(dp[n][i]>=p){printf("%d\n",i);break;} 35 } 36 } 37 return 0; 38 }
G - Mosaic
二维线段树,解题在:http://www.cnblogs.com/philippica/p/4279969.html