首页 > 其他分享 >整数分块

整数分块

时间:2023-04-09 17:00:42浏览次数:43  
标签:typedef long 分块 int dfs 整数 区块

CF1263C Everyone is a Winner!

整数分块的入门题。

求取n/k向下取整可以得到的值。

12:1∼1,6:2∼2,4:3∼3,3:4∼4,2:5∼6,1:7∼12,0:k≥13

通过枚举我们发现,有很多的区块拥有相同的区块值。

设区块左右端点为l,r,则有区块值value=n/l。

同时我们发现r=n/value,且下一个区块的l=当前r+1。

所以我们可以通过该区块的l跳到下一个区块的l,也就是说我们可以O1枚举每个区间,而不用经过l到r之间的数。

这样算法的时间复杂度从O(n)优化到了O(sqrt(n))。

该题ac代码

#include<bits/stdc++.h>

using namespace std;

#define endl '\n'
typedef long long LL;
typedef pair<int,int> PII;
const int INF=0x3f3f3f3f;

int n;

void dfs(LL l,int cnt){
    if(l>n){
        cout<<cnt+1<<endl;
        cout<<0<<' ';
        return;
    }
    LL r=n/(n/l);
    dfs(r+1,cnt+1);
    cout<<n/l<<' ';
}

void solve(){
    cin>>n;
//为了符合顺序采用了递归 dfs(1,0); cout<<endl; } int main(){ ios::sync_with_stdio(false); cin.tie(0); int T; cin>>T; while(T--){ solve(); } return 0; }

 

标签:typedef,long,分块,int,dfs,整数,区块
From: https://www.cnblogs.com/F-beginner/p/17300572.html

相关文章

  • 1237. 找出给定方程的正整数解
    题目链接:1237.找出给定方程的正整数解方法一:二分查找解题思路枚举\(x\),然后对\(y\)进行二分查找,确定满足\(customfunction.f(x,y)==z\)的数对\((x,y)\),将其加入\(ans\)中,最终返回\(ans\)。代码/**//Thisisthecustomfunctioninterface.*//Youshou......
  • 极值分析:分块极大值BLOCK-MAXIMA、阈值超额法、广义帕累托分布GPD拟合降雨数据时间序
    全文链接:http://tecdat.cn/?p=25348最近我们被客户要求撰写关于极值分析的研究报告,包括一些图形和统计输出。你们可能知道,实际极值分析有两种常用方法:分块极大值Block-maxima、阈值超额法thresholdexcess今天,我们将分别介绍这两种方法。分块极大值Block-maxima分块样本极大......
  • 剑指 Offer 16. 数值的整数次方
    题解链接:剑指Offer16.数值的整数次方方法一:迭代实现快速幂解题思路通过迭代的方法,自下向上实现快速幂求解过程,初始化结果\(res=1\),底数\(t=x\),幂次为\(n\)。当\(n\)为奇数时,\(res=res*t\),先乘上一个\(t\),此时还有\(n-1\)个\(t\)相乘,即相当于计算\((t*......
  • 整数的划分 NC16695
    原题链接思路本题目数据量较弱,所以可以考虑直接用dfs代码#include<iostream>usingnamespacestd;intans;voiddfs(intn,intd,intk){if(k==0){if(n==0)ans++;return;}for(inti=d;i<=n;i++)dfs(n-i,......
  • [每天例题] 查找输入整数二进制中1的个数
    查找输入整个二进制中1的个数题目 题目分析计算它在二进制下的1的个数。注意多组输入输出!!!!!! 数据范围:1≤n≤2^31 −1 思路分析1.多组数据的输入方法:1.EOF法因为在线评测系统的输入数据存放在一个文件中,因此可以通过文件是否结束的方式判断输入的数据是否结束。scanf......
  • Python源码笔记——Python中的整数对象
    1.整数对象在Python3.11.2中,整数结构体叫做PyLongObject。#ifPYLONG_BITS_IN_DIGIT==30typedefuint32_tdigit;...#elifPYLONG_BITS_IN_DIGIT==15typedefunsignedshortdigit;...#else#error"PYLONG_BITS_IN_DIGITshouldbe15or30"#endiftypedefstruc......
  • day 38 62.不同路径 | 63. 不同路径 II | 343. 整数拆分
    一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径? 输入:m=3,n=7输出:28想要求dp[i][j],只能有两个方向来推导出来,即d......
  • 输入数据有多组,每组测试数据有 2 行,第 1 行为 1 个正整数,表示所生成的随机数的个数:N
    #include<iostream>#include<string>usingnamespacestd;voidsort(strings){chartmp[100];intlen=s.size();intcount=0,i,j;for(i=0;i<len;i++){for(j=i+1;j<len;j++){i......
  • P8712 [蓝桥杯 2020 省 B1] 整数拼接
    P8712[蓝桥杯2020省B1]整数拼接https://www.luogu.com.cn/problem/P8712这题想多了一步。。不需要求逆元,因为最多9位数,所以直接\(O(10n)\)记录乘积的模值注意不能用map#include<bits/stdc++.h>#definelllonglongusingnamespacestd;constintN=1e5+5;ll......
  • 蓝桥杯——整数拼接
    整数拼接   测试用例:421234题解:#include<bits/stdc++.h>usingnamespacestd;longlonga[100010];longlongf[11][100010];//余数数组,表示a[i]*10^r%k的个数longlongres;intmain(){longlongn,k;cin>>n>>k;for(inti=0;i<......