1011 Kindergarten Physics
这场的签到还是很签到的,由于所给的重量和时间都小于等于100,所以减少的距离精度一定小于1e-6,所以直接在原距离上减个更小的精度即可;
#include<iostream>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--){
double a,b,d,t;
cin>>a>>b>>d>>t;
printf("%.10lf\n",d-1e-10);
}
return 0;
}
1002 Blow up the Enemy
由于n才2000,所以直接暴力搞,也算是签到;
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int mod = 1e9+7;
const int N = 1e5+7;
int a[N],b[N];
double fun(int i,int j){
int x = ceil(100.0/a[i])*b[i]-b[i];
int y = ceil(100.0/a[j])*b[j]-b[j];
if(x==y) return 0.5;
else if(x<y) return 1.0;
else return 0.0;
}
int main()
{
int T; scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
double ans = 0;
for(int i=1;i<=n;i++){
double num=0;
for(int j=1;j<=n;j++){ //也可以先O(n)找到最优的武器,再计算胜率
num += fun(i,j);
}
ans = max(num/n,ans);
}
printf("%.8lf\n",ans);
}
return 0;
}
1005 Equal Sentences
题意:给一句话S,包含n个单词,求与其相似的句子T的个数,包含自己。相似满足两个条件:①单词的集合相同②一个单词在S中出现的第i个词在T中出现第i个词的索引相差不超过1。
思路: 令 f[i] 为前 i 个单词组成的相似字符串的个数,可知规律:如果相邻两单词相同,则交换后不改变,则f[i+1]=f[i];
如果不相等,则交换,那么f[i] = f[i-1] + f[i-2];一直到f[n]时算出结果。
#include<bits/stdc++.h>
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
using namespace std;
typedef long long LL;
const int mod = 1e9+7;
const int N = 1e5+7;
int dp[N];
int main()
{
IO;
int T; cin>>T;
string s[N];
while(T--){
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>s[i],dp[i]=0;
dp[0]=dp[1] = 1;
for(int i=2;i<=n;i++){
if(s[i]==s[i-1]) dp[i] = dp[i-1];
else dp[i] = (dp[i-1]+dp[i-2])%mod;
}
cout<<dp[n]<<"\n";
}
return 0;
}
1004 Deliver the Cake
在这里插入代码片