2020 Multi-University Training Contest 4

1011 Kindergarten Physics

这场的签到还是很签到的,由于所给的重量和时间都小于等于100,所以减少的距离精度一定小于1e-6,所以直接在原距离上减个更小的精度即可;

#include
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
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
#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

在这里插入代码片

你可能感兴趣的:(HDU)