IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 代码源每日一题div1 Ayoub‘s function -> 正文阅读

[数据结构与算法]代码源每日一题div1 Ayoub‘s function

Daimayuan Online Judge

思路:思维
我们从问题的反面考虑,就是要求所有的子串减去只含 0 0 0的子串,那问题转化成如何让只含 0 0 0的子串尽可能的少,结论是将 1 1 1尽可能的均匀的分布在这个字符串中
显然我们有 m m m 1 1 1就会分割出 m + 1 m+1 m+1个只含 0 0 0的区间,那我们只要用总的子串个数减去这些只含 0 0 0的区间的子串即可
一个长度为 l l l的字符串的子串个数为: l ? ( l + 1 ) / 2 l*(l+1)/2 l?(l+1)/2
现在我们来证明一下这个结论,为了方便我们只考虑整除的情况,即这些 1 1 1划分的 0 0 0区间长度相同
我们定义字符串长度 n n n 1 1 1的个数 m m m,那么只含 0 0 0的区间个数为 m + 1 m+1 m+1,这些区间的长度为 k = n ? m m + 1 k=\frac{n-m}{m+1} k=m+1n?m?,那么只含 0 0 0的子串个数 c n t = ( m + 1 ) ? 1 2 ? k ? ( k + 1 ) cnt=(m+1)*\frac{1}{2}*k*(k+1) cnt=(m+1)?21??k?(k+1),现在我们将其中一个 1 1 1向一侧移动一个位置,那么会导致两侧的两个 0 0 0长度分别 ? 1 -1 ?1 + 1 +1 +1,那么子串个数变为 c n t ’ = ( m ? 1 ) ? 1 2 ? k ? ( k + 1 ) + 1 2 ? ( k + 1 ) ? ( k + 2 ) + 1 2 ? ( k ? 1 ) ? k cnt’=(m-1)*\frac{1}{2}*k*(k+1)+\frac{1}{2}*(k+1)*(k+2)+\frac{1}{2}*(k-1)*k cnt=(m?1)?21??k?(k+1)+21??(k+1)?(k+2)+21??(k?1)?k,做差比较: c n t ? c n t ′ = 1 2 ( 2 ? k ? ( k + 1 ) ? ( k + 1 ) ? ( k + 2 ) ? k ? ( k ? 1 ) ) = ? 1 < 0 cnt-cnt'=\frac{1}{2}\Big(2*k*(k+1)-(k+1)*(k+2)-k*(k-1)\Big)=-1<0 cnt?cnt=21?(2?k?(k+1)?(k+1)?(k+2)?k?(k?1))=?1<0,因此 c n t < c n t ′ cnt<cnt' cnt<cnt得证

Code:

#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
#define endl '\n';
typedef long long ll;
typedef pair<ll,ll> PII;
const int N=1e6+10;
ll n,m,t;
int main(){
	IOS;
	cin>>t;
	while(t--){
		cin>>n>>m;
		ll ans=n*(n+1)/2,x=(n-m)/(m+1),y=(n-m)%(m+1);
		if((n-m)%(m+1)==0) ans-=(m+1)*x*(x+1)/2;
		else ans-=((m+1-y)*x*(x+1)/2+y*(x+1)*(x+2)/2);
		cout<<ans<<endl;
	}
	return 0;
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:56:50  更:2022-04-07 22:59:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:52:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码