AmazingCounters.com

2013 年 acm 长春现场赛

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 }
View Code

 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 }
View Code

 G - Mosaic

二维线段树,解题在:http://www.cnblogs.com/philippica/p/4279969.html

posted @ 2015-02-05 22:38  philippica  阅读(176)  评论(0编辑  收藏  举报