ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CCPC 威海 Lottery

2020-11-06 08:32:31  阅读:246  来源: 互联网

标签:Lottery int CCPC cas a2 威海 ans const


CCPC 威海 Lottery

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5+10;
const int mod = 1e9+7;
/*
7-12 Lottery题解:
思路很简单,其实就是找连续的一段数,那么说明这个连续的区间都可以生成
然后相乘,就是最后的答案
这个题目的x和a都很大,这个怎么判断呢
对于 x1*2^a1 和 x2*2^a2 ,如果x1>2^(a2-a1),那么说明可以连起来,然后把对于2^a2次方的贡献加上去即可
因为 x<1e9 所以 a2-a1<31
*/
struct node{
    ll a,x,base;
    node(ll a=0,ll x=0,ll base = 0):a(a),x(x),base(base){}
}e[maxn];
ll f[100];
void init(){
    f[0] = 1;
    for(int i=1;i<=40;i++) f[i] = f[i-1]*2;
}
bool cmp(node A,node B){
    return A.a<B.a;
}
long long binpow(long long x,long long k) {
    x %= mod;
    long long ans = 1;
    while (k) {
        if (k & 1) ans = ans * x % mod;
        x = x * x % mod;
        k >>= 1;
    }
    return ans;
}
int main(){
    int T;
    init();
    scanf("%d",&T);
    for(int cas=1;cas<=T;cas++){
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;i++) {
            int a,x;
            scanf("%d%d",&a,&x);
            e[i] = node(a,x,x);
        }
        sort(e+1,e+1+n,cmp);
        ll ans = 1,pre = e[1].a,sum = 0;
        for(int i=1;i<=n;i++){
            sum = (sum + binpow(2,e[i].a-pre)*e[i].base%mod)%mod;
            if(i<n&&e[i+1].a - e[i].a<=30&&(e[i].x>>(e[i+1].a-e[i].a))){
                e[i+1].x += e[i].x>>(e[i+1].a-e[i].a);
            }
            else{
                ans = ans*(sum+1)%mod;
                sum = 0,pre = e[i+1].a;
            }

        }
        printf("Case #%d: %lld\n", cas,ans);
    }
    return 0;
}

标签:Lottery,int,CCPC,cas,a2,威海,ans,const
来源: https://www.cnblogs.com/EchoZQN/p/13935002.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有