链接:https://ac.nowcoder.com/acm/contest/894/B?&headNav=acm
来源:牛客网

华华送奕奕小礼物
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 524288K,其他语言1048576K
64bit IO Format: %lld
题目描述
华华用数组a和数组b合成了矩阵c。其中a数组长度为n,b数组长度为m,c是n行m列的矩阵,且c[i][j]=a[i]*b[j]。定义矩阵的权值为矩阵中所有元素的和。然后他想把矩阵送给奕奕。然而他怕奕奕不喜欢。若矩阵的权值小于L,奕奕会讨厌它,因为奕奕不喜欢太小的数字。若矩阵的权值大于R,奕奕会生气因为奕奕不认识比R大的数字。所以奕奕只喜欢权值大于等于L并且小于等于R的矩阵。还好华华学过acm,他马上想到可以送奕奕一个子矩阵,并且他立马写程序从c矩阵中找出了所有奕奕喜欢的子矩阵。你只需要帮他算算这样的子矩阵有多少个即可。
输入描述:
第一行输入n,m,L,R。
第二行n个数表示a数组
第三行m个数表示b数组
1<=n,m<=1000,1<=L<=R<=1e18
1<=a[i],b[i]<=1e6
输出描述:
输出一个数表示子矩阵的个数
示例1
输入
复制
3 3 3 8
3 2 3
2 3 1
输出
复制
10

思路:

我们定义 suma,sumb 分别是a,b数组的前缀和。

那么c矩阵中,左上角是i,j,右下角是x,y的sum和就是 (suma[x]-suma[i-1] ) * (sumb[y] - sumb[j-1] )

那么我们可以预处理出 (sumb[y] - sumb[j-1] ) ,加入一个数组v中并且排序,然后枚举 (suma[x]-suma[i-1] ) ,去二分查找v中使其乘积满足l~r的范围。

答案加起来即可。

细节见代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define chu(x) cout<<"["<<#x<<" "<<(x)<<"]"<<endl
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
ll powmod(ll a,ll b,ll MOD){ll ans=1;while(b){if(b%2)ans=ans*a%MOD;a=a*a%MOD;b/=2;}return ans;}
inline void getInt(int* p);
const int maxn=1010;
const int inf=0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/int n,m;
ll l,r;
ll a[maxn];
ll b[maxn];
ll suma[maxn];
ll sumb[maxn];
std::vector<ll> v;
int main()
{//freopen("D:\\common_text\\code_stream\\in.txt","r",stdin);//freopen("D:\\common_text\\code_stream\\out.txt","w",stdout);gbtb;cin>>n>>m;cin>>l>>r;repd(i,1,n){cin>>a[i];suma[i]=suma[i-1]+a[i];}repd(i,1,m){cin>>b[i];sumb[i]=sumb[i-1]+b[i];}repd(i,1,m){repd(j,1,i){v.push_back(sumb[i]-sumb[j-1]);}}ll ans=0ll;sort(ALL(v));repd(i,1,n){repd(j,1,i){ll u=r/(suma[i]-suma[j-1]);ll d=ceil(l*1.00/(suma[i]-suma[j-1]));ans+=upper_bound(ALL(v),u)-lower_bound(ALL(v),d);}}cout<<ans<<endl;return 0;
}inline void getInt(int* p) {char ch;do {ch = getchar();} while (ch == ' ' || ch == '\n');if (ch == '-') {*p = -(getchar() - '0');while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 - ch + '0';}}else {*p = ch - '0';while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 + ch - '0';}}
}

转载于:https://www.cnblogs.com/qieqiemin/p/11343425.html

牛客练习赛46 B 华华送奕奕小礼物 (预处理前缀和,二分)相关推荐

  1. 牛客练习赛46 C 华华跟奕奕玩游戏 (期望,概率)(详解)

    链接:https://ac.nowcoder.com/acm/contest/894/C 来源:牛客网 华华跟奕奕玩游戏 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...

  2. 牛客练习赛46 A 华华教奕奕写几何 (简单数学)

    链接:https://ac.nowcoder.com/acm/contest/894/A 来源:牛客网 华华教奕奕写几何 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...

  3. 最小生成树--牛客练习赛43-C

    牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 ​ 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...

  4. 牛客练习赛43 Tachibana Kanade Loves Probability(快速幂)

    链接:https://ac.nowcoder.com/acm/contest/548/B 来源:牛客网 题目描述 立华奏在学习初中数学的时候遇到了这样一道大水题: "设箱子内有 n 个球,其 ...

  5. 牛客练习赛43 回顾

    链接:https://ac.nowcoder.com/acm/contest/548/A 来源:牛客网 题目描述 这次 Tachibana Kanade 来到了一个神奇的学校参观,她发现了一些有趣的事 ...

  6. 牛客练习赛 43 CTachibana Kanade Loves Review 最小生成树(Java版失败)

    链接:https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 Qingyu 当选了 IO ...

  7. 牛客练习赛43 Tachibana Kanade Loves Review C(最小生成树Kruskal)

    链接:https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 QingyuQingyu  ...

  8. 牛客练习赛 43 F Tachibana Kanade Loves Game 容斥原理(Java版ac)

    链接:https://ac.nowcoder.com/acm/contest/548/F 来源:牛客网 题目描述 立华奏是一个天天打比赛的萌新. 省选将至,萌新立华奏深知自己没有希望进入省队,因此开始 ...

  9. 牛客练习赛 43 CTachibana Kanade Loves Review 线性做法,贪心(Java版成功)

    链接:https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 Qingyu 当选了 IO ...

最新文章

  1. mybatis学习笔记(3)-入门程序一
  2. linux下c/c++实例之十socket简单应用
  3. 一步步编写操作系统 18 操作显卡,显存,显示器 下
  4. C语言typedef关键字—伟大的缝纫师
  5. 【Elasticsearch】ES 慢查询 profile 参数
  6. 转:Discuz!NT负载均衡解决方案(HA)之---LVS(Linux Virtual Server)
  7. 理解 Delphi 的类(十) - 深入方法[2] - 参数分割
  8. Android 的蓝牙简介
  9. 2.8.PHP7.1 狐教程-【控制语句 Switch】
  10. python 随机选择数字
  11. APP支持请回复相关主题帖或邮件至 developer.haipeng.zhao@gmail.com
  12. 面试必备:常用的设计模式总结
  13. 简单的注册表代码记录
  14. 2023-2028年中国燕麦奶行业市场预测与投资规划分析报告
  15. KubeEdge SIG AI发布首个分布式协同AI Benchmark调研
  16. reddit_如何减少Reddit的吸吮
  17. SQL Server 2016数据库下载
  18. 如何裁剪linux内核
  19. 标准印章公章制作软件附使用教程
  20. STM32智能小车------TCRT5000循迹

热门文章

  1. WebSocket服务器和客户端的一对多连接
  2. word表格图片自动适应表格大小_几招教你快速解决word文字、图片、表格排版问题,你肯定遇到过...
  3. 服务器无线不能登录界面,Web认证无法跳转到登录页面
  4. ansible(自动化运维下)——yaml语言,Role-角色扮演
  5. 大数据面试题及答案 汇总版
  6. linux苹果开发者p12,苹果testflight发布流程
  7. 6 计算机应用技,2019年10月自考计算机应用技术习题及答案6
  8. log4j slf4j实现_slf4j 与log4j logback的区别以及使用场景
  9. 四因素三水平正交试验表_测试用例设计方法(二)——正交实验法
  10. 对python编程做介绍-python002-编程语言介绍