【BZOJ4724】[POI2017]Podzielno 数学+二分
2024-09-21 12:31:03
【BZOJ4724】[POI2017]Podzielno
Description
B进制数,每个数字i(i=0,1,...,B-1)有a[i]个。你要用这些数字组成一个最大的B进制数X(不能有前导零,不需要用完所有数字),使得X是B-1的倍数。q次询问,每次询问X在B进制下的第k位数字是什么(最低位是第0位)。
Input
第一行包含两个正整数B(2<=B<=10^6),q(1<=q<=10^5)。
第二行包含B个正整数a[0],a[1],a[2],...,a[B-1](1<=a[i]<=10^6)。
接下来q行,每行一个整数k(0<=k<=10^18),表示一个询问。
Output
输出q行,每行一个整数,依次回答每个询问,如果那一位不存在,请输出-1。
Sample Input
3 3
1 1 1
0
1
2
1 1 1
0
1
2
Sample Output
0
2
-1
2
-1
题解:因为B与B-1互质,所以X是B-1的倍数当且仅当X在B进制下的每一位加起来是B-1的倍数。(在循环之美那题里用到了这个结论,不过我只是看了看~)
然后我们肯定是先全都选,然后看总和%B是多少,然后看最少删掉几个数。一开始还想了想怎么删,后来发现a[i]>=1。。。就直接把那个数删了就行。
然后剩下的数,一定是从大到小一个一个排下来。特判:如果总和%B=0,则不用删!
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
int n,m;
ll v[1000010];
inline ll rd()
{
ll ret=0,f=1; char gc=getchar();
while(gc<'0'||gc>'9') {if(gc=='-') f=-f; gc=getchar();}
while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
return ret*f;
}
int main()
{
n=rd(),m=rd();
int i,l,r,mid;
for(i=0;i<n;i++) v[i]=rd(),v[n]=(v[n]+i*v[i])%(n-1);
if(v[n]) v[v[n]]--;
for(i=1;i<n;i++) v[i]+=v[i-1];
for(i=1;i<=m;i++)
{
ll a=rd();
l=0,r=n;
while(l<r)
{
mid=(l+r)>>1;
if(v[mid]>a) r=mid;
else l=mid+1;
}
printf("%d\n",r==n?-1:r);
}
return 0;
}//9 11 1 1 1 1 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 10
最新文章
- SharePoint Permission Extension
- cocos2d 3.6 win7下的配置
- WinForm------GridControl显示每行的Indicator中的行号
- BZOJ4026: dC Loves Number Theory
- centos中更换jdk的版本
- MySql事务及JDBC对事务的使用
- linux进程间通信--无名管道
- [google面试CTCI] 1-6.图像旋转问题
- Scrum Meeting Alpha - 7
- 换行符\n和回车符\r
- Thrift入门
- tyflow birth节点
- 浅谈java中的String、StringBuffer、StringBuilder类的区别以及关系
- 大数据开发主战场hive (企业hive应用)
- Linux平台上轻松安装与配置Domino
- UIAlertControllerStyleActionSheet 崩溃。
- 使用idea搭建SSM框架
- Git强制更新本地库和冲突解决
- [contest 782] 9.7
- RestFul风格接口示例
热门文章
- Jfinal极速开发微信系列教程(三)--------------对JSP的支持以及部署Tomcat运行异常问题
- webpack的配置文件entry与output
- Linux学习笔记 (七)挂载命令
- Python基础--人们一些最爱的标准库(random time)
- 去除前后空格,Oracle和SQLSERVER都适用。ltrim(rtrim(’ ‘))
- iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)
- Retrofit2和RxJava配合使用Demo
- Windows环境下完全手工配置Apache、MySQL和PHP
- C++之栈、队列基本用法
- pthread_create11121