2020杭电多校第四场部分题解(1002/1005/1011)

1002

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6803

这题是我队友写的,无法给出详细解释。
官方给出的题解:观察题目性质,由于两人的初始血量都为 100,所以对于每种武器i,都能算出击杀对方的时间,具体来说100/ai(向上取整)
就是霯要的攻击次数,那么(100/ai-1)*di就是术早击杀对方的时间,显然,你的构优决策是选择击杀时间柴早的那亣种武器,再枚举对方的选择计算胜利的概率即可
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int mod = 1e9+7;
 4 const int N=1e3+5;
 5 #define ll long long
 6 #define pair<int,int>pai
 7 int a,d,t[N];
 8 int main()
 9 {
10     int i,j,T,n;
11     scanf("%d",&T);
12     while(T--){
13         scanf("%d",&n);
14         for(i=1;i<=n;i++){
15             int a,b;
16             scanf("%d%d",&a,&d);
17             t[i]=100/a;
18             if(100%a!=0)t[i]++;
19             t[i]=(t[i]-1)*d;
20         }
21         sort(t+1,t+1+n);
22         int gs=0;
23         for(i=2;i<=n;i++){
24             if(t[i]==t[1])gs++;
25             else break;
26         }
27         double ans;
28         gs++;
29         ans=gs*1.0/n*0.5+(n-gs)*1.0/n;
30         printf("%.6f\n",ans);
31     }
32     return 0;
33 }
1002

1005

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6806

这题卡了很久,其实想通了发现很简单

题意:给定几个单词,相邻单词之间可以交换顺序,最多能写出多少不同的句子

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const long long mod = 1e9+7;
 4 const int N=1e5+5;
 5 #define ll long long
 6 #define pair<int,int>pai
 7 string s[N];
 8 ll f[N];
 9 int main()
10 {
11     int i,j,T,n;
12     cin>>T;
13     while(T--){
14         cin>>n;
15         for(i=1;i<=n;i++){
16             cin>>s[i];
17         }
18         memset(f,0,sizeof f);
19         f[0]=f[1]=1;
20         for(i=2;i<=n;i++){
21             if(s[i]==s[i-1])f[i]=f[i-1];
22             else f[i]=(f[i-1]+f[i-2])%mod;
23         }
24         printf("%lld\n",f[n]);
25     }
26     return 0;
27 }
1005

f[i]=f[i-1]+f[i-2]这个式子可以自己找几个例子求一下,找规律

1011

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6812

题意:质量为a,b的两个小球只受万有引力相向运动,初速度为0,初始距离为d,问t秒后两小球距离多少

思路:这题你要认真写的haul发现还是挺难得,但是看了题解之后心态崩了,

所以这题基本上交了就能过,代码仅供参考

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int mod = 1e9+7;
 4 const int N=1e3+5;
 5 #define ll long long
 6 #define pair<int,int>pai
 7 const double G=6.67430*1e-11;
 8 int main()
 9 {
10     int i,j,T,n;
11     scanf("%d",&T);
12     while(T--){
13         int a,b,D,t;
14         scanf("%d%d%d%d",&a,&b,&D,&t);
15         double va0=0,vb0=0;
16         double d=D;
17         for(i=1;i<=t;i++){
18             double aa=G*b*1.0/d/d;
19             double ab=G*a*1.0/d/d;
20             double va=va0+aa;
21             double vb=vb0+ab;
22             va0=va;vb0=vb;
23             d-=1.0/2*va;
24             d-=1.0/2*vb;
25         }
26         printf("%.12f\n",d);
27     }
28     return 0;
29 }
1011

猜你喜欢

转载自www.cnblogs.com/zenghuan0620/p/13406011.html