当前位置: 首页 > news >正文

2020WHU校赛 I - Interesting Matrix Problem(规律+整除分块)

传送门


先放出题解的PPT:
在这里插入图片描述
考虑二分答案。因为小于等于 k k k的数他们的因子一定出现在坐标 ( i , j ) (i,j) (i,j)中,设 f ( x ) f(x) f(x) x x x的因子个数,因为是成对出现的,实际上在矩阵中 x x x的个数就是因子的个数。那么就是求 ∑ i = 1 k f ( i ) \sum_{i=1}^kf(i) i=1kf(i),不难发现这个式子其实就是整除分块,那么就套个板子求就行了,题解上说有边界需要处理,但是不处理也能过,可能和 k ≤ m a x ( n , m ) k\leq max(n,m) kmax(n,m)有关

#include <set>
#include <map>
#include <stack>
#include <queue>
#include <math.h>
#include <cstdio>
#include <string>
#include <bitset>
#include <cstring>
#include <sstream>
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ins insert
#define Vector Point
#define lowbit(x) (x&(-x))
#define mkp(x,y) make_pair(x,y)
#define mem(a,x) memset(a,x,sizeof a);
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<double,double> pdd;
const double eps=1e-8;
const double pi=acos(-1.0);
const int inf=0x3f3f3f3f;
const double dinf=1e300;
const ll INF=1e18;
const int Mod=998244353;
const int maxn=2e5+10;

ll n,m,q,k;

bool check(ll x){
    ll ans=0;
    for(ll l=1,r;l<=min(n,x);l=r+1){
        r=x/(x/l);
        ans+=(x/l)*(r-l+1);  //不少人这里写的是min(x/l,m),但x/l不可能大于m的好吧
    }
    return ans>=k;
}

int main(){
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

    cin>>n>>m>>q;
    n=min(n,m);
    m=max(n,m);
    while(q--){
        cin>>k;
        ll l=1,r=m,ans;
        while(l<=r){
            ll mid=(l+r)>>1;
            if(check(mid)){
                r=mid-1;
                ans=mid;
            }else l=mid+1;
        }
        cout<<ans<<endl;
    }
    return 0;
}

相关文章:

  • UVA1025 A Spy in the Metro (dp)
  • 欢迎大家来这里学习
  • UVA437 The Tower of Babylon(记忆化搜索)
  • MySQL启多个实例
  • UVA116 Unidirectional TSP(dp/多段图的最短路)
  • 忍受未知很重要
  • 背包九讲(1)——01背包
  • 两大重要活动议程
  • 背包九讲(2)——完全背包
  • Winforms: 把Label显示为多行
  • Codeforces Round #639 (Div. 2)
  • XXX项目鉴定总结!
  • UVA12563 Jin Ge Jin Qu hao(01背包)
  • 关于CPU步进
  • 滑动窗口的最大值(经典单调队列问题)
  • [ JavaScript ] 数据结构与算法 —— 链表
  • css属性的继承、初识值、计算值、当前值、应用值
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • Elasticsearch 参考指南(升级前重新索引)
  • express如何解决request entity too large问题
  • JAVA并发编程--1.基础概念
  • JSONP原理
  • Linux各目录及每个目录的详细介绍
  • React16时代,该用什么姿势写 React ?
  • 从0实现一个tiny react(三)生命周期
  • 构建二叉树进行数值数组的去重及优化
  • 基于web的全景—— Pannellum小试
  • 前端临床手札——文件上传
  • 三分钟教你同步 Visual Studio Code 设置
  • 微信小程序--------语音识别(前端自己也能玩)
  • 我有几个粽子,和一个故事
  • 一个SAP顾问在美国的这些年
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 白色的风信子
  • #1014 : Trie树
  • #宝哥教你#查看jquery绑定的事件函数
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (三)docker:Dockerfile构建容器运行jar包
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (四)库存超卖案例实战——优化redis分布式锁
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .NET MVC、 WebAPI、 WebService【ws】、NVVM、WCF、Remoting
  • .Net面试题4
  • @AliasFor注解
  • @Autowired注解的实现原理
  • []Telit UC864E 拨号上网
  • [20170713] 无法访问SQL Server
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色
  • [android] 手机卫士黑名单功能(ListView优化)
  • [Excel] vlookup函数
  • [HXPCTF 2021]includer‘s revenge
  • [iOS]让Xcode 4.2生成的app支持老的iOS设备(armv6)
  • [java]删除数组中的某一个元素