题目列表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
P9420 [蓝桥杯 2023 国 B] 子 2023 / 双子数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
#include<bits/stdc++.h>
using ll=unsigned long long;
#define int ll
const int N=2e5+10;
int k=0;
std::string s;
int a,b,c,d;
void solve()
{
char op;
std::cin>>op;
if(op=='A')
{
std::string s;
for(int i=1;i<=2023;i++)
{
s+=std::to_string(i);
}
//std::cout<<s;
//std::cout<<5484660609<<'\n';
ll ans=0;
int len=s.length();
std::vector<int> v1;
std::vector<int> v2;
std::vector<int> v3;
for(int i=0;i<len;i++)
{
if(s[i]=='2') v1.push_back(i);
if(s[i]=='0') v2.push_back(i);
if(s[i]=='3') v3.push_back(i);
}
for(int i=0;i<v1.size();i++)
{
for(int j=0;j<v2.size();j++)
{
if(v2[j]<=v1[i]) continue;
for(int k=i+1;k<=v1.size();k++)
{
if(v1[k]<=v2[j]) continue;
for(int p=0;p<v3.size();p++)
{
if(v3[p]<=v1[k]) continue;
ans++;
}
}
}
}
std::cout<<ans<<'\n';
}
}
signed main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
int t=1;
//std::cin>>t;
while(t--)
{
solve();
}
return 0;
}
答案算出来是5484660609。
把质数存下来枚举判断即可,我不记得筛质数的板子所以写了个isprime。。
#include<bits/stdc++.h>
using ll=unsigned long long;
#define int ll
const int N=2e5+10;
int k=0;
std::string s;
int a,b,c,d;
bool isprime(int x)
{
for(int i=2;i<=x/i;i++)
{
if(x%i==0) return false;
}
return true;
}
void solve()
{
char op;
std::cin>>op;
if(op=='A')
{
std::string s;
for(int i=1;i<=2023;i++)
{
s+=std::to_string(i);
}
//std::cout<<s;
std::cout<<5484660609<<'\n';
ll ans=0;
int len=s.length();
std::vector<int> v1;
std::vector<int> v2;
std::vector<int> v3;
for(int i=0;i<len;i++)
{
if(s[i]=='2') v1.push_back(i);
if(s[i]=='0') v2.push_back(i);
if(s[i]=='3') v3.push_back(i);
}
for(int i=0;i<v1.size();i++)
{
for(int j=0;j<v2.size();j++)
{
if(v2[j]<=v1[i]) continue;
for(int k=i+1;k<=v1.size();k++)
{
if(v1[k]<=v2[j]) continue;
for(int p=0;p<v3.size();p++)
{
if(v3[p]<=v1[k]) continue;
ans++;
}
}
}
}
std::cout<<ans<<'\n';
}else{
// for(int i=1;i<=110000000;i++)
// {
// if(