Codeforces 1251总结

传送门
A. Broken Keyboard
题目大意:现在键盘上有一些坏了的键,坏了的键按键后会出现两个相同的字母,现给你一串用此键盘打出来的字符串,让你判断哪个键坏了
水题,直接判断哪个字母连续出现了两次即可。
B. Binary Palindromes
题目大意:给出n个二进制字符串,可以交换任意一对字符任意次数(可能为零),问同时生成回文的最大字符串数是多少。
这个题当时没做出来,后来看了题解,非回文的情况只有一种:字符串中有奇数个1和奇数个0;但是这种情况中需要排除掉出现奇数长度的字符串。
所以只需要判断1的个数和0的个数是否都为奇数就行了及是否含有奇数长度的字符串即可。
C. Minimize The Integer
题目大意:给出一个字符串,可以交换两个相邻且奇偶性不同的两个数,求交换后最小字典序的字符串。
这个题我真是******,又错在了scanf,又是把ios::sync_with_stdio(false)和scanf与printf写一起了,自己运行感觉没毛病,上去就WA,有时候真是一顺手就在代码最前面写了ios那玩意,后面又一不注意就写了printf,然后一不注意就WA,我真服了我自己了。
这个题因为奇数和奇数的相对位置不变,偶数和偶数的相对位置不变,开两个数组,分别储存奇数与偶数,每次输出较小的那个数即可。
D. Salary Changing
大致题意:你是一位老板,你需要用总数为s的钱n个人发工资,每个人有一个要求的工资范围,现在要求你满足员工的要求的同时使中位数最大,求这个中位数。
感觉这个题有点像区间dp,题解是将区间以左端点大小进行排序,大致将员工分为三类,右端点小于中位数的发的工资为左端点数值,左端点大于中位数的发的工资等于左端点,其余人按照排序的顺序,如果工资大于等于中位数的人大于等于人数的一半,则这部分人发工资数值等于中位数,否则发左端点数值。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
typedef long long ll;
int t;
ll L[maxn],R[maxn],n,s;
struct node{
	ll l,r;
	node(ll li = 0,ll ri = 0) {
		l = li;
		r = ri;
	}
	bool operator < (const node & rhs) const {
		if(l == rhs.l) return r > rhs.r;
		return l > rhs.l; 
	}
}a[maxn];
int main() {
	scanf("%d",&t);
	while(t--) {
		scanf("%lld%lld",&n,&s);
		for(int i = 1; i <= n; i++) {
			scanf("%lld%lld",&a[i].l,&a[i].r);
		}
		sort(a + 1,a + n + 1);
		ll l = 0,r = s + 1;
		while(l < r) {
			ll mid = l + r >> 1;
			ll tmp = 0,cnt = 0;
			for(int i = 1; i <= n; i++) {
				if(mid < a[i].l){
					tmp += a[i].l;
					cnt++;
				} else if(a[i].l <= mid && mid <= a[i].r) {
					if(cnt < (n + 1) / 2) tmp += mid,cnt++;
					else tmp += a[i].l;
				} else if(a[i].r < mid) tmp += a[i].l; 
			}
			if(cnt >= (n + 1) / 2 && tmp <= s) l = mid + 1;
			else r = mid;
		}
		printf("%lld\n",l - 1);
	}
	return 0;
}

E. Voting
大致题意:有n个人,你可以花费pi让第i个人投票,若有mi个人为你投票,这个人就会免费为你投票。现在你想让给出的n个人都为你投票,最少需要花费多少钱。

F. Red-White Fence
大致题意:给你一堆红色或者白色的木条,现在你需要把这些木条拼到一起,满足其长度先递增后递减,问在红色木条长度最长的情况下使得这个拼凑出来的多边形的周长为给出数值共多少种方案。
又是失败的一天,ac了一个题,本来应该可以做出来两个的,可能还是水平不行,感觉越学越倒退了,非常不顺心,真的感觉有点被打击到了,就争取化悲愤为力量,好好反思,最近状态确实很一般,该提起自己的精神头,好好干,继续努力吧,反正不能放弃,那就一直努力坚持,明天继续。

猜你喜欢

转载自blog.csdn.net/weixin_46434074/article/details/107259995