• 蓝桥杯-子 2023 / 双子数


    题解:

    第一个问题A

    动态规划问题

    f[4]

    状态表示:

    • f[0]表示数字是2的个数
    • f[1]表示以2开头0结尾的个数
    • f[2]表示以20开头2结尾的个数
    • f[3]表示以202开头3结尾的个数

    f[3]就是答案

    代码中有详细的注释和注意事项

    A代码👇

    #include
    #define int long long  // 答案会爆 int
    using namespace std;
    
    int f[4];
    signed main(){
    	
    	string s;
    	for(int i=1;i<=2023;i++) s+=to_string(i);//构造string 
    	
    	for(int i=0;i<s.size();i++){
    		if(s[i]=='2')  // 状态计算
    		{
    			f[0]++;
    			f[2]+=f[1];  // 2 既可以是第一个, 也可以是第二个, 是第二个的话, 需要是以20开头, 即f[1]
    		}
    		else if(s[i]=='0') f[1]+=f[0];
    		else if(s[i]=='3') f[3]+=f[2];
    	} 
    	cout<<f[3]<<endl;
    }
    

    第二个问题B

    • 找出 1 ~ 23333333333333中的所有素数
    • 枚举所有素数, 判断是否满足 p * p * q * q == n
    • 满足条件的cnt ++

    代码中有详细的注释和注意事项

    B代码👇

    #include 
    using namespace std;
    #define int __int128    // 这里用long long也不行, longlong数据范围是1e18, __int128是1e38
    const int N = 1e7 + 10;  // 因为23333333333333不到1e14, 对它开方, 它的素数不超过1e7
    bool prime[N];
    vector<int> v;
    signed main()
    {
        // 筛素数
    	prime[1] = true;
    	for (int i = 2; i < N; i ++)
    	{
    		if (!prime[i])
    		{
    			v.push_back(i);
    			for (int j = i + i; j < N; j += i)
    				prime[j] = true;
    		}
    	}
    
        // 找满足条件的个数
    	long long cnt = 0;
    	for (int i = 0; i < v.size(); i ++)
    		for (int j = i + 1; j < v.size(); j ++)
    		{
                // 不要用注释的判断方法, 运行时间太长, 要跑好久好久久久...
    		//	if (v[i] * v[i] * v[j] * v[j] >= 2333 && v[i] * v[i] * v[j] * v[j] <= 23333333333333)
    			if (v[i] * v[i] * v[j] * v[j] < 2333) continue;
    			else if (v[i] * v[i] * v[j] * v[j] > 23333333333333) break;
    			cnt ++;
    		}
    	cout << cnt << endl;
    	return 0;
    }
    

    最终ac代码👇

    #include 
    
    using namespace std;
    
    signed main()
    {
        string str; cin >> str;
        if (str == "A") cout << 5484660609 << endl;
        else cout << 947293 << endl;
        return 0;
    }
    

    觉得写的不错的话, 点个赞吧~

  • 相关阅读:
    微信小程序异常处理(持续记录中)
    JavaScript 通过正则测试页面是否出现连续的重复字符
    Newtonsoft.Json/Json.NET忽略序列化时的意外错误
    SUSE linux的快照和恢复
    Midjourney绘图欣赏系列(九)
    Linux程序调试工具使用整理
    【MATLAB】 04 数值微积分
    Codeforces Round 896 (Div. 2)题解
    或许你也想做一个这样的动态魔方吗?
    Oracle 安装包合集!
  • 原文地址:https://blog.csdn.net/m0_74065705/article/details/139128554