「杂题乱刷2」CF1301C
1.「杂题乱刷」AT_abc020_c2.「杂题乱刷」CF1846E1 & CF1846E23.「杂题乱刷」CF786C4.「杂题乱刷」Zheng Rui 327 【2018普转提day17专题】洗5.「杂题乱刷」CF1759F6.「杂题乱刷」CF1979C7.「杂题乱刷」CF1985F8.「杂题乱刷」P13969.「杂题乱刷」AT_abc360_d10.「杂题乱刷2」CF1454F Array Partition11.「杂题乱刷2」CF1996F12.「杂题乱刷2」CF1486C1 & CF1486C213.「杂题乱刷2」CF1360H14.「杂题乱刷2」CF862D
15.「杂题乱刷2」CF1301C
16.「杂题乱刷2」CF2036G17.「杂题乱刷2」P1126718.「杂题乱刷2」CF1370F219.「杂题乱刷2」AT_abc140_e20.「杂题乱刷2」CF601B21.「杂题乱刷2」CF2069D22.「杂题乱刷2」P11830 [省选联考 2025] 幸运数字23.「杂题乱刷2」P11843 [USACO25FEB] The Best Subsequence G怎么没有二分的题解啊,写一篇。
题目链接
解题思路
发现我们可以将问题转化成将
容易发现要使得这样的贡献最小,你选择的不同的每份数字和的个数一定不超过
因此你可以通过简单的数学来计算出这两种数字的取值,至于两种数字的数量可以直接二分。
单组测试时间复杂度
参考代码
#include<bits/stdc++.h>
using namespace std;
//#define map unordered_map
#define re register
#define ll long long
#define forl(i,a,b) for(re ll i=a;i<=b;i++)
#define forr(i,a,b) for(re ll i=a;i>=b;i--)
#define forll(i,a,b,c) for(re ll i=a;i<=b;i+=c)
#define forrr(i,a,b,c) for(re ll i=a;i>=b;i-=c)
#define pii pair<ll,ll>
#define mid ((l+r)>>1)
#define lowbit(x) (x&-x)
#define pb push_back
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
#define endl '\n'
#define QwQ return 0;
ll _t_;
void _clear(){}
ll n,m;
ll ans;
void solve()
{
ans=0;
_clear();
cin>>n>>m;
if(m==0)
{
cout<<0<<endl;
return ;
}
if(n==m)
{
cout<<(n+1)*n/2<<endl;
return ;
}
ll last=n-m;
ll num=last/(m+1);
// cout<<"number:"<<num<<endl;
ll L=0,R=m+1;
while(L<R)
{
ll Mid=(L+R+1)/2;
if(Mid*num<=last)
L=Mid;
else
R=Mid-1;
}
ll _0=L,_1=last-L*num;
_0-=_1;
// cout<<L<<":"<<_0<<' '<<_1<<endl;
cout<<(n+1)*n/2 - (_0*(num+1)*num/2 + _1*(num+2)*(num+1)/2)<<endl;
}
int main()
{
IOS;
_t_=1;
cin>>_t_;
while(_t_--)
solve();
QwQ;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效