做题小结

前言
这几天回来干活,休息下,还有挑配件装,哇这次装给我的体会也很多 很了解了14pm的构成,当然了下次一定要注意铲玻璃如果铲通了不能继续铲了会伤到排线
然后我的音量排线就寄了,重新买了,现在需要把多余的配件出掉,重新买了前摄,剩下的配件也是一笔不小的钱哈哈,还有我想给博客改个名字了。那就改吧!

https://codeforces.com/contest/2019/problem/C

这个题没写出来
我看了dqjm视频 他说和那个优先队列的最大与次大消气球很像 像在判断能不能消除的方式上
这个O1的判断委实说 我还是不会的
1 要和为偶数 2 要sum-maxn>=maxn
这道题其实就是要满足第二个式子 不同的是 我们要变通
要tot+k>=maxn*组的大小 这样更显然是可以构成的 所以要枚举组的大小
如果满足式子 那我们还要分类讨论
如果是+k满足 那肯定没余数 不需要管余数 如果不是+k 但是tot就行 那我们要看余数 毕竟要弄满 如果组大小-余数小于等于k那就ok的
所以这个题就这么写完了

	for (int i = 1; i <= n; i++) {
		if (tot + k >= i * a[n]) {
			//i为组内的大小
			if (tot < i * a[n]) {
				ans = max(ans, i);
			} else {
				int rem = tot % i;
//				cout<<rem<<endl;
				if (i - rem <= k||rem==0) {
					//或者%i
					ans = max(ans, i);
				}
			}
		}
	}
	cout << ans << endl;
//和小球互相删除唯一共同点我认为就是tot + k >= i * a[n]
	//o1判断

https://www.luogu.com.cn/problem/CF2020B

这个题其实要知道一个数学结论
n以内的完全平方数有根号n个(整形) 这个就是关闭的个数
所以就是
n - sqrt n =k

那么我们二分就可以写了
注意右边范围开大点 比k大个一倍就行 临界是n+sqrtn


	int l=1;int r=2*k;
	int ans=0;
	while(l<=r)
	{
		int mid=l+r>>1;
		int b=sqrt(mid);
		int temp=mid-b;
//		cout<<mid<<" "<<b<<endl;
		if(temp<k)l=mid+1;
		else {ans=mid;r=mid-1;}
	}

明天继续写吧 组装的事情要过几天了 本来今天就能完成(前提是前摄不是坏的)当然拆玻璃我也不怪自己割了排线 根本没料到

posted @ 2025-01-08 01:14  LteShuai  阅读(20)  评论(0)    收藏  举报