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];
}