Codeforces Round #619 (Div. 2)

contest

A

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
string a, b , c;
void work()
{
	for(int i = 0;i < a.size();i ++)
	{
		if(c[i] != a[i] && c[i] != b[i])
		{
			cout << "NO" << endl;
			return;
		}
	}
	cout << "YES" << endl;
}
int main()
{
	int t = 0;
	cin >> t;
	while(t--)
	{
		cin >> a >> b >> c;
		work();
	}
	return 0;
}

B

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
using namespace std;
const int N = 100005;
int arr[N], n;

void work()
{
	int base = 0;
	vector<int> v;
	for(int i = 0;i < n - 1;i ++)
	{
		if(arr[i] == -1 && arr[i + 1] != -1)v.push_back(arr[i + 1]);
		else if(arr[i] != -1 && arr[i + 1] == -1)v.push_back(arr[i]);
		else if(arr[i] != -1 && arr[i + 1] != -1)base = max(base,abs(arr[i] - arr[i + 1]));
	}	
	if(v.empty())
	{
		printf("0 0\n");
		return;
	}
	sort(v.begin(),v.end());
	int k = (v.back() + *v.begin()) / 2;
	printf("%d %d\n",max({v.back() - k, k - v[0], base}),k);
	return;
}
int main()
{
	int t = 0;
	cin >> t;
	while(t--)
	{
		cin >> n;
		for(int i = 0;i < n;i ++)
		{
			scanf("%d",&arr[i]);
		}
		work();
	}
	return 0;
}

C

排列组合 隔板法 尝试让0的分布尽可能均匀而不是只考虑1

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>

using namespace std;
typedef long long ll;
ll n , m;
void work()
{
	ll ans = (n + 1) * n / 2,cnt = (n - m)/(m + 1);
	ans -= cnt * (cnt+1)/2*(m+1-(n-m)%(m+1)) + (cnt+1)*(cnt+2)/2*((n-m)%(m+1));
	cout << ans << endl;
}
int main()
{
	int t;
	cin >> t;
	while(t--)
	{
		scanf("%lld %lld",&n,&m);
		work();
	}
	return 0;
}
posted @ 2020-02-15 11:26  _starsky  阅读(129)  评论(0编辑  收藏  举报