首页 > 其他 > 详细

190715-Zeta-数学

时间:2019-10-18 17:40:23      阅读:56      评论:0      收藏:0      [点我收藏+]
技术分享图片
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<string>
 5 #include<cstring>
 6 #include<algorithm>
 7 using namespace std;
 8 namespace Moxing{
 9     const int N=1e6+50;
10     int n,m;
11     long long in[N],fs,t;
12     struct main{
13         main(){
14             scanf("%d%d",&n,&m);
15             for(int i=0;i<n;i++){
16                 scanf("%lld",&in[i]);
17                 fs+=in[i]*i;
18             } 
19             if(fs%=n-1)--in[fs];
20             for(int i=1;i<n;i++){
21                 in[i]+=in[i-1];
22             }
23             while(m--){
24                 scanf("%d",&t);
25                 if(t>=in[n-1]) puts("-1");
26                 else printf("%lld\n",upper_bound(in,in+n,t)-in);
27             }
28             exit(0);
29         }
30     }UniversalLove; 
31 }
32 int main(){
33     Moxing::main();
34 }
View Code
  Zeta
• 题目大意:给你0到?? − 1每个数可以使用的次数。
• 构造一个最大的??使a ≡ 0 (?????? ?? − 1)。
• 多次询问,输出??的某一位的值(从低到高为0到??????)。
  Solution
• ??^?? ≡ 1 ?????? ?? − 1 , ?? ∈ N*
• 我们求出所有数字和?????? ?? − 1的值,将数值为余数的位去掉一个(因为每个数字可用次数> 0所以一定有解)
• 然后把所有数字按照从大到小,从高位到低位排序,查询时二分查找即可。
技术分享图片

 

技术分享图片

 

 技术分享图片

 

 

190715-Zeta-数学

原文:https://www.cnblogs.com/Moxingtianxia/p/11699569.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!