Codeforces Round #392 (Div. 2)

这场真的是xjb乱做

A

#include <cstdio>
#include <cctype>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <string>
#include <vector>
#include <sstream>
using namespace std;

typedef long long ll;
const int qq = 1e6 + 10;
int num[qq];
int n, m, k;

int main(){
	ll sum = 0;
	scanf("%d", &n);
	for(int i = 0; i < n; ++i)	scanf("%d", num + i);
	sort(num, num + n);
	for(int i = 0; i < n - 1; ++i)
		sum += (num[n - 1] - num[i]);
	printf("%lld\n", sum);
	return 0;
}

B

#include <cstdio>
#include <cctype>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <string>
#include <vector>
#include <sstream>
using namespace std;

typedef long long ll;
const int qq = 1e5 + 10;
int num[qq];
int n, m, k;
int vis[10];
int used[300];
int countc[300];
char color[4] = {'R', 'B', 'Y', 'G'};

int main(){
	string x; cin >> x;
	memset(used, 0, sizeof(used));
	memset(vis, 0, sizeof(vis));
	int a, b, c, d;
	a = b = c = d = 0;
	for(int i = 0; i < 4; i++){
		int p = i;
		while(x[p] == '!' && p < (int)x.size()){
			p += 4;
		}
		if(p < (int)x.size()){
			vis[i] = x[p];
			used[x[p]] = 1;
		}
	}
	for(int i = 0; i < 4; ++i){
		if(!vis[i]){
			for(int j = 0; j < 4; ++j){
				if(!used[color[j]]){
					vis[i] = color[j];
					used[color[j]] = 1;
                    break;
				}
			}
		}
	}
	for(int i = 0; i < (int)x.size(); ++i){
		if(x[i] == '!')	countc[vis[i % 4]]++;
	}
	printf("%d %d %d %d\n", countc['R'], countc['B'], countc['Y'], countc['G']);
	return 0;
}

C


#include <cstdio>
#include <cctype>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <string>
#include <vector>
#include <sstream>
using namespace std;

typedef long long ll;
const int qq = 1e5 + 10;
int num[qq];
ll n, m, k, x, y;

int main(){
	scanf("%lld%lld%lld%lld%lld", &n, &m, &k, &x, &y);
	if(n * m == k){
		printf("1 1 1\n");
		return 0;
	}
	if(n * m > k){
		printf("1 0 %d\n", k >= (x - 1) * m + y ? 1 : 0);
		return 0;
	}
	if(n == 1){
		printf("%lld %lld %lld\n", k / m + (k % m == 0 ? 0 : 1), k / m, k / m + (y > (k % m) ? 0 : 1));
		return 0;
	}
	if(n == 2){
		int p = 0;
		if(k % (2 * m) >= (x - 1) * m + y)	p = 1;
		printf("%lld %lld %lld\n", k / (2 * m) + (k % (2 * m) == 0 ? 0 : 1), k / (2 * m), k / (2 * m) + p);
		return 0;
	}
	k = k - n * m;
	ll maxn = 1 + k / ((n * m) - m) + (k % (n * m - m) == 0 ? 0 : 1);
	ll minx = 1 + (k / ((n * m) - m)) / 2;
	ll res;
	if(x == 1){
		res = 1 + (k / (n * m - m) + 1) / 2;
	}else if(x == n){
		res = 1 + (k / (n * m - m)) / 2;
	}else{
		res = 1 + (k / (n * m - m));
	}
	int c = k % (n * m - m);
	if((k / (n * m - m)) % 2 == 0){
			for(int i = n - 1; i >= 1 && c; --i)
				for(int j = 1; j <= m && c; ++j){
					if(i == x && j == y)	res++;
					c--;
				}
		}else{
			for(int i = 2; i <= n && c; ++i)
				for(int j = 1; j <= m && c; ++j){
					if(x == i && y == j)	res++;
					c--;
				}
	}
	printf("%lld %lld %lld\n", maxn, minx, res);
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值