站外题求助!!玄关
  • 板块灌水区
  • 楼主linjinkun
  • 当前回复11
  • 已保存回复11
  • 发布时间2024/10/23 09:20
  • 上次更新2024/10/23 12:37:23
查看原帖
站外题求助!!玄关
1120828
linjinkun楼主2024/10/23 09:20

我按照题目写了个做法,但是怎么只得了 2020 分?

代码:

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

评测记录图片:

求大佬救救!!

2024/10/23 09:20
加载中...