首页 > 其他分享 >1820BThe BOSS Can Count Pairs[分块]

1820BThe BOSS Can Count Pairs[分块]

时间:2023-09-20 21:14:09浏览次数:52  
标签:Count Pairs 分块 ai aj bj int 1820BThe include

Problem - B - Codeforces

题意是给n个a和b,1<=a,b<=n,问有多少ai*aj==bi+bj,i<j ,2e5的数据规模


看一眼数据规模,a,b都是小于等于n的,意味着如果ai*aj>n那么就对答案无贡献,或者说,对于一个ai,剩下数中可能能对答案产生影响的aj,一定是小于等于n/ai的。

那么我们可以以ai为依据升序排序,先枚举从1到sqrt(n)作为ai,设置一个数组保存bi的数目,然后枚举j,可以很方便地计算ai*aj-bj的数目,如果当前aj==ai的话,说明对应的bi数量++

从小到大排序,避免了第二层循环到j的时候,后面还有可行的ai

现在才知道这玩意叫做“分块”

查看代码

#pragma GCC optimize(2)
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
void solve()
{
	ll n,ans=0;
	cin>>n;
	vector<pair<int,int> >a(n);
	for(int i=0;i<n;i++)
		cin>>a[i].first;
	for(int i=0;i<n;i++)
		cin>>a[i].second;
	sort(a.begin(),a.end());//保证将x=i的y的cnt更新,同时只跑一次避免重复
	for(int i=1;i*i<=2*n;i++)
	{
		vector<int>cnt(n+1);//保存a=i时的b=j时的数量
		for(auto [x,y]:a)
		{
			int bj=x*i-y;
			if(bj>=1&&bj<=n)ans+=cnt[bj];//先加再更新避免自加
			if(x==i)
				cnt[y]++;
		}
	}
	cout<<ans<<"\n";
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	while(t--)solve();
	

标签:Count,Pairs,分块,ai,aj,bj,int,1820BThe,include
From: https://www.cnblogs.com/qbning/p/17718408.html

相关文章

  • CF1767C Count Binary Strings 题解
    CF1767CCountBinaryStrings题解Foreword感谢@樱雪喵、@swiftc两位大佬的耐心指导。Links洛谷CodeforcesDescription有一个长度为\(n\)的01串\(s\)(下标从\(1\)开始)和一些限制\(a_{i,j}(1\lei\lej\len)\)。\(a_{i,j}\)的含义如下:\(a_{i,j}=\)含义......
  • 探索 WPF 的 ITabletManager.GetTabletCount 在 Win11 系统的底层实现
    本文将和大家介绍专为WPF触摸模块提供的ITabletManager的GetTabletCount方法在Windows11系统的底层实现本文属于WPF触摸相关系列博客,偏系统底层介绍,更多触摸博客请看WPF触摸相关大家都知道在Windows7系统,有专门的笔和触摸服务提供触摸消息的支持。而WPF是从V......
  • select count(*) 和 select count(1) 以及 select count(column) 的区别
      1. 一般情况下,SelectCount(*)和SelectCount(1)两者的返回结果是一样的  2. 假如表沒有主键(PK),那么count(1)比count(*)快,如果有主键PK的話,那count(主键)最快,如果你的表只有一个字段的话那count(*)就是最快的  3.count(*)跟count(1)的结果一样,都包括对NU......
  • mysql count()函数
    count(expr)函数的参数expr可以是任意的表达式,该函数用于统计在符合搜索条件的记录总数;count(expr)函数执行效率从低到高排序为:count(非主键字段)<count(主键)<count(1)≈count(*);对于count(1)和count(*),效率相当,建议尽量使用count(*),因为MySQL优化器会选择最小......
  • 【Pandas】groupby连用的count()和size()的区别
    groupby连用的count()和size()的区别count()计算的是value(数值);size()计算的是size(个数)我们有以下表:size()age=df.groupby(by='Nation').size().reset_index()age可以发现,size()计数的是记录的条数,即每个nation对应有多少条count()count=df_try.groupby(by=......
  • 【Azure Batch】在中国区批处理服务(Mooncake Batch Account)上实验自动池(Auto Pool)
    问题描述在AzureBatch的介绍文档中,提出了自动池的概念,它可以在任务完成后,自动删除Pool资源,详细介绍:https://docs.azure.cn/zh-cn/batch/nodes-and-pools#autopools & https://learn.microsoft.com/zh-cn/rest/api/batchservice/job/add?tabs=HTTP#autopoolspecification自动池......
  • 不要使用count(列名)或count(常量)来替代count(*),count(*)就是SQL92定义的标准统计行
    慢SQL治理经验总结https://mp.weixin.qq.com/s/LZRSQJufGRpRw6u4h_Uyww慢SQL治理经验总结原创 药糖 大淘宝技术 2023-09-1816:20 发表于浙江 在过去两年的工作中,我们团队曾负责大淘宝技术的慢SQL治理工作,作为横向的数据安全治理平台,如何快速准确地发现部门内所有应用......
  • 关于 Spartacus My Account 菜单的数据源 - NavigationNode
    有朋友询问Spartacus的MyAccount菜单里,Mycompany菜单项的数据源是什么?Spartacus启动时,我们观察到这个OCCAPI:/occ/v2/powertools-spa/cms/pages?lang=en&curr=USD在其响应数据里,观察到navigationnode里包含了一个叫做MyCompany的菜单项:Backoffice是SAPCom......
  • odoo to account move
    allmodel:stock_valuation_layers._check_company()self._check_company()stock.valuation.layer=>account.movestock_valuation_layers._validate_accounting_entries()account.move=>postaccount_moves=self.env['account.move'].sudo().create(......
  • scrap -> accountmove 参考
    defaction_validate(self):self.ensure_one()iffloat_is_zero(self.scrap_qty,precision_rounding=self.product_uom_id.rounding):raiseUserError(_('Youcanonlyenterpositivequantities.')......