1002
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6803
这题是我队友写的,无法给出详细解释。
官方给出的题解:观察题目性质,由于两人的初始血量都为 100,所以对于每种武器i,都能算出击杀对方的时间,具体来说100/ai(向上取整)
1002
1005
1011
就是霯要的攻击次数,那么(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 }
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 }
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 }