我按照题目写了个做法,但是怎么只得了 20 分?
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 3e6+5;
int vis[N];
int a[N];
int sum[N];
int tong[N];
signed main()
{
int n,m,k;
scanf("%d %d %d",&n,&m,&k);
for(int i = 1;i<=n;i++)
{
scanf("%d",&a[i]);
tong[a[i]] = 1;
}
for(int i = 2;i<=m;i++)
{
if(vis[i])
{
continue;
}
sum[i] = 1;
for(int j = i+i;j<=m;j+=i)
{
vis[j] = 1;
}
}
for(int i = 10;i<=m;i++)
{
string q = to_string(i);
string s = q;
reverse(s.begin(),s.end());
if(q == s)
{
sum[i] = 1;
}
}
for(int i = 1;i<=m;i++)
{
for(int j = i;j<=m;j+=i)
{
if(tong[j])
{
sum[i] = 1;
break;
}
}
}
long long w = 0;
for(int i = 1;i<=m;i++)
{
sum[i]+=sum[i-1];
int l = 1,r = i,ans = 0;
while(l<=r)
{
int mid = l+r>>1;
if(sum[i]-sum[mid-1]>=k)
{
ans = mid;
l = mid+1;
}
else
{
r = mid-1;
}
}
w+=ans;
}
printf("%lld",w);
return 0;
}
评测记录图片:
求大佬救救!!