0%

2020杭电多校-4补题

2020 Multi-University Training Contest 4部分补题

1002 Blow up the Enemy

Blow up the Enemy

题意

张三和儿子选择武器与之对战,张三对每样武器的选择概率同等,求儿子胜出的概率

思路

儿子选择武器肯定选择价值最大的武器,张三如果不选择一样的武器那么在相同次数内就会输,那么有k个最快的武器,则儿子输的概略为k/(2n),儿子赢的概率为1-k/(2n);

AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<math.h>
using namespace std;
int sum[100010];
int main()
{
int t,n,i,a,b;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d%d",&a,&b);
sum[i]=(100-a)/a*b;
if(100%a)
sum[i]+=b;
}
sort(sum+1,sum+1+n);
int ma=sum[1];
int k=1;
for(i=2;i<=n;i++)
{
if(sum[i]==ma)
k++;
}
double cnt=1-1.0*k/(2*n);
printf("%lf\n",cnt);
}
return 0;
}

1005 Equal Sentences

Equal Sentences

题意

对于句子s中的单词,向前移一位或向后移一位或没交换得到的两个句子几乎相等,求不同句子的几乎等于s的个数。

思路

将第i个元素进行交换或者不交换,如果交换的字符串相等,即还为原来的值,否则dp[i]=dp[i]+dp[i-2];

AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//使用杭电提交语言选择g++,c++显示编译错误
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
int dp[100010];
string s[100010];
int main()
{
int t,i;
cin>>t;
while(t--)
{
int n;
cin>>n;
memset(dp,0,sizeof(dp));
for(i=1;i<=n;i++)
{
cin>>s[i];
}
dp[0]=1;
dp[1]=1;
for(i=2;i<=n;i++)
{
dp[i]=dp[i-1];
if(s[i]!=s[i-1])
{
dp[i]=(dp[i]+dp[i-2])%1000000007;
}
}
cout<<dp[n]<<endl;
}
return 0;
}

1011 Kindergarten Physics

Kindergarten Physics

题意

有两个重a,b千克的物体,初始距离为d,在只受重力的影响下,求他们之间距离。

思路

可知距离不变,直接输出初始距离即可

AC代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>

int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a,b,d,t0;
scanf("%d%d%d%d",&a,&b,&d,&t0);
printf("%d\n",d);
}
return 0;
}