0710_day5

A

拉票,两种方式:

1、花钱买

2、mi人投之后会跟风

有点像背包问题?

贪心应该也可以

dp吧。占坑

多想想,别一不会就是dp,其实简单的dp应该也能写出来
贪心+stl

这个思路好神奇,太厉害了

priority_queue<int, vector<int>, greater<int>> Q;
		for(int i = n; i >= 0; i--){//i指需要的票数
			int len = v[i].size();
			for(int j = 0; j < len; j++){
				Q.push(v[i][j]);//把需要这些票数的人都加进优先队列
				//之前的都已经投票
			}
			while(Q.size() > n - i){
				ans += Q.top();
				Q.pop();
			}


————————————————
版权声明:本文为CSDN博主「error311」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/error311/article/details/102757350
B

可以交换相邻的奇偶性不同的两个数

求最小结果

贪心:相同属性数字之间的顺序没法变

水题

无语了

char写成了int

数组换成vector也不行

无语了,字符数组变成字符串对象就好了

莫名其妙

mmp

C

重复两次就是坏了

水题

不解释

D

发薪水,使中位数最大

又是背包问题?

贪心应该是不行

又是dp?
//水平洼,看啥不会的都是dp

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);
	}

————————————————
版权声明:本文为CSDN博主「猝死在学ACM的路上」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41997978/article/details/102829654

E

篱笆,红色一个,最长,之前递减,之后递增

计算能做的某个周长的篱笆个数

NTT(Number Theoretic Transform)
占坑

F

好几个01串,任意交换,求能得到的回文串的最大数;

想吃串了

可以无限交换,那视为把x个1,y个0分配就行,贪心算法,优先满足短的。需要奇数个数,尽量破坏x,y中的的奇数,因为偶数可以随意分成奇数,但剩下一个1,一个0不能凑偶数

无语了,睡多了吧!贪心都搞不定了

if (s1 % 2 == 0 && s1 >= 2) {if (num1 % 2 == 0 && num0 % 2 == 0) ans = n;if (num1 % 2 == 1 && num0 % 2 == 1) ans = n;if ((num1 % 2 == 0 && num0 % 2 == 1) || (num1 % 2 == 1 && num0 % 2 == 0)) ans = n - 1;} else {if (num1 % 2 == 0 && num0 % 2 == 0) ans = n - 1;if (num1 % 2 == 1 && num0 % 2 == 1) ans = n - 1;if ((num1 % 2 == 0 && num0 % 2 == 1) || (num1 % 2 == 1 && num0 % 2 == 0)) ans = n;}

竟然去推规律,唉

利用贪心来模拟啊

如果只有1个奇数串,则只能有一种数字是奇数-

如果奇数串的数量是奇数而且大于1,那么只有在只有1种字符数量为奇数的时候可行

如果没有奇数串那么两种数字都不能出现奇数

如果奇数串的数量不为1且大于0, 那么只要两种数字的数量都是偶数就行

G

hard version

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值