CodeForces Round 427 div2

A題,計算兩個人的延遲,比較就好

#include <bits/stdc++.h>
using namespace std;
const int maxn=1005;

int main(int argc, char const *argv[])
{
	int s,v1,v2,t1,t2;
	while(cin>>s>>v1>>v2>>t1>>t2){
		int ans1=s*v1+2*t1,ans2=s*v2+2*t2;
		if(ans1<ans2){
			printf("First\n");
		}
		else if(ans1>ans2){
			printf("Second\n");
		}
		else{
			printf("Friendship\n");
		}
	}
	return 0;
}

B題,稍微水了一些,一開始那個n嚇到我了

#include <bits/stdc++.h>
using namespace std;
const int maxn=1005;
typedef long long ll;

bool cmp(const ll &a,const ll &b){
	return a>b;
}

int main(int argc, char const *argv[])
{
	ll k;
	string num;
	while(cin>>k>>num){
		ll ans=0;
		bool flag=0;
		vector<int>vec;
		for(int i=0;i<num.length();i++){
			vec.push_back(9-num[i]+'0');
			ans=ans+(num[i]-'0');
			if(ans>=k){
				flag=1;
				break;
			}
		}
		if(flag){
			printf("0\n");
		}
		else{
			sort(vec.begin(),vec.end(),cmp);
			int cnt=0;
			// for(int i=0;i<vec.size();i++){
			// 	// cout<<vec[i]<<endl;
			// }
			for(int i=0;i<vec.size();i++){
				// cout<<vec[i]<<endl;
				ans+=(ll)vec[i];
				cnt++;
				if(ans>=k) break;
			}
			printf("%d\n",cnt);
		}
	}	
	return 0;
}

C題,直接暴力會超時,然後發現是有循環節的,所以前綴和直接優化

#include<iostream>
#include<cstdio>
using namespace std;
int a[201][201][21];
int x,y,x1,y1,s;
int main()
{
	int n,q,c;
	int i,j,k;
	
	scanf("%d%d%d",&n,&q,&c);
	for(i=1;i<=n;i++)
	{
		scanf("%d%d%d",&x,&y,&s);
		for(j=0;j<=c;j++)
			a[x][y][j]+=(s+j)%(c+1);
	}
	for(i=1;i<=100;i++)
		for(j=1;j<=100;j++)
			for(k=0;k<=c;k++)
				a[i][j][k]+=a[i][j-1][k]+a[i-1][j][k]-a[i-1][j-1][k];
	for(i=1;i<=q;i++)
	{
		scanf("%d%d%d%d%d",&s,&x,&y,&x1,&y1);
		s%=(c+1);
		printf("%d\n",a[x1][y1][s]-a[x-1][y1][s]-a[x1][y-1][s]+a[x-1][y-1][s]);
	}
}

D題,DP不會,先把代碼貼着

#include <bits/stdc++.h>
using namespace std;
#define test TEST 
const int maxn=5005;
char s[maxn];
int dp[maxn][maxn],ans[maxn];

int main(int argc, char const *argv[])
{
	while(~scanf("%s",s)){
		int len=strlen(s);
		ans[1]=len;
		for(int i=0;i<len;i++){
			dp[i][i]=1;
			for(int l=i-1,r=i+1;l>=0&&r<len&&s[l]==s[r];l--,r++){
				dp[l][r]=1;
			}
			for(int l=i,r=i+1;l>=0&&r<len&&s[l]==s[r];l--,r++){
				dp[l][r]=1;
			}
		}
		for(int d=2;d<=len;d++){
			int g=d>>1;
			for(int l=len-d;l>=0;l--){
				int r=l+d-1;
				if(dp[l][r]==0) continue;
				dp[l][r]=max(dp[l][r],min(dp[l][l+g-1],dp[r-g+1][r])+1);
				ans[dp[l][r]]++;
			}
		}
		for(int i=len-1;i>=1;i--){
			ans[i]+=ans[i+1];
		}
		for(int i=1;i<=len;i++){
			printf("%d%c",ans[i],i==len?'\n':' ');
		}
	}	
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章