做题小结
前言
这几天回来干活,休息下,还有挑配件装,哇这次装给我的体会也很多 很了解了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;}
}
明天继续写吧 组装的事情要过几天了 本来今天就能完成(前提是前摄不是坏的)当然拆玻璃我也不怪自己割了排线 根本没料到

浙公网安备 33010602011771号