Codeforces Round #673 (Div. 2)

A题

 思路:取出最小值,所有数加到最小值的最大倍数使得不超过k 记录次数即可

#include <bits/stdc++.h>
using namespace std;
int main () {
	int T;
	cin >> T;
	while(T--) {
		int n, k;
		cin >> n >> k;
		vector<int> a(n);
		int minn = 0x3f3f3f3f;
		int sum = 0;
		for(int i = 0; i < n; ++i) {
			cin >> a[i];
			sum += a[i];
			minn = min(minn, a[i]);
		}
		int ans = 0;
		for(int i = 0; i < n; ++i) {
			ans += (k - a[i]) / minn; 
		}
		ans -= (k - minn) / minn;
		cout << ans << endl;
	}
} 

 B题

 思路:分成三种情况。小于最大值的一半,等于最大值的一半,大于最大值的一般。依次标记即可

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main () {
	int T;
	cin >> T;
	while(T--) {
		ll n, T;
		cin >> n >> T;
		vector<int> a(n);
		for(int i = 0; i < n; ++i) {
			cin >> a[i];
		}
		int temp = 1;
		for(int i = 0; i < n; ++i) {
			if(a[i] < T / 2 || a[i] == T / 2 && T & 1) {
				cout << 0 << " ";
			}
			else if(!(T & 1) && a[i] == T / 2){
				if(temp & 1) {
					cout << 0 << " ";
				} 
				else {
					cout << 1 << " ";
				}
				temp++;
			}
			else {
				cout << 1 << " ";
			}
		} 
		cout << endl;
//		int i;
//		for(i = 0; i < n && a[i] < T / 2; i++) {
//			cout << 0 << " ";
//		}
//		int temp = 1;
//		for(; i < n && a[i] == T / 2; ++i) {
//			if(temp & 1) {
//				cout << 0 << " ";
//			}
//			else {
//				cout << 1 << " ";
//			}
//			temp++;
//		}
//		for(; i < n; ++i) {
//			cout << 1 << " ";
//		}
//		cout << endl;
	}
} 
作者:LightAc
出处:https://www.cnblogs.com/lightac/
联系:
Email: dzz@stu.ouc.edu.cn
QQ: 1171613053
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/lightac/p/13748574.html