牛客练习赛33题解

tokitsukaze and Counting

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述 

给出3个整数L,R,x。tokitsukaze想知道,闭区间[L,R]中,x的倍数出现了几次。

输入描述:

第一行包括一个正整数T(T<=1000),表示T组数据。

接下来T行,每行包括3个正整数L,R,x。

1≤L≤R≤10^18

1≤x≤10^18

输出描述:

输出T行,每一行一个整数,表示答案。

示例1

输入

复制

1
2 5 3

输出

复制

1
int l,r,x;
int main(){
    int t;
    cin>>t;
    while(t--){
        cin>>l>>r>>x;
        cout<<r/x-(l-1)/x<<endl;
    }
}

tokitsukaze and RPG

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述 

tokitsukaze最近沉迷一款RPG。
这个RPG一天有k分钟,每一天从第1分钟开始。
有n种怪物,第i种怪物每天第一次出现的时间为Xi分钟,第二次出现的时间为2*Xi分钟,第三次出现的时间为3*Xi分钟......同一时刻出现的怪物种类越多,打怪获得的经验也越高。
为了高效练级,tokitsukaze想知道在一天内出现怪物种类最多的时间点会出现多少种怪物,这样的时间点有多少个。

输入描述:

第一行包括2个正整数n,k(1≤n≤10^5,1≤k≤10^6),表示有n种怪物,一天有k分钟。
接下来一行包括n个正整数X(1≤Xi≤10^6),含义如题面所示。

输出描述:

输出一行,包括两个整数a,b。
a表示怪物种类数,b表示时间点的个数。

示例1

输入

复制

3 6
2 2 3

输出

复制

3 1

说明

在第6分钟时,3种怪物都出现了。

示例2

输入

复制

3 5
2 2 3

输出

复制

2 2

说明

在第2分钟和第4分钟时,第一种和第二种怪物出现了。

示例3

输入

复制

6 10
1 2 3 4 5 6

输出

复制

4 1

说明

在第6分钟时,出现了第一种、第二种、第三种、第六种怪物。

示例4

输入

复制

3 5
6 6 6

输出

复制

0 5

说明

在第1分钟、第2分钟、第3分钟、第4分钟、第5分钟,都没有出现怪物。

埃氏筛素数的方法会超时

所以用一种计数的筛选法 用来剪枝

先记录每个数出现的次数(不重)

然后在这些数来加上每个数出现的次数

const int MAX=1000005;
int n,k;
int a[MAX];
int b[MAX];
int c[MAX];
int vis[MAX];
int main(){
    cin>>n>>k;
    int x;
    int num=0;
    for(int i=0;i<n;i++) {
        cin>>x;
        if(vis[x]==0){
            vis[x]=1;
            a[num++]=x;
        }
        b[x]++;
    }
    for(int i=0;i<num;i++){
        for(int j=a[i];j<=k;j+=a[i]){
            c[j]+=b[a[i]];
        }
    }
    int maxx=-1;
    int ans[MAX];
    for(int i=1;i<=k;i++){
        if(maxx<c[i]){
            
            maxx=c[i];
        }
        ans[c[i]]++;
    }
    cout<<maxx<<" "<<ans[maxx];
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭晋龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值