点击跳转例题
思路:
1.暴力模拟即可,判断是不是合法,回文数,AB型即可。2.由于一定是回文数,所以枚举1到10000即可,判断是不是<=n,判断是不是AB型即可。
1.代码:
#include <bits/stdc++.h> #define int long long //(有超时风险) #define PII pair<int,int> #define endl '\n' #define LL __int128 using namespace std; const int N=2e5+10,M=1e3+10,mod=998244353,INF=0x3f3f3f3f; int a[N],b[N],c[N],pre[N]; int sums(string s) { int ans=0; for(int i=0;i<s.size();i++) { ans*=10; ans+=s[i]-'0'; } return ans; } int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; bool check_hefa(int x,string s) { int yue=0,ri=0; for(int i=0;i<2;i++) { yue*=10;yue+=(s[i]-'0'); } for(int i=2;i<4;i++) { ri*=10;ri+=(s[i]-'0'); } if(yue>12||yue<=0) return false; int tmp=month[yue]; if(x%4==0&&x%100!=0||x%400==0) { if(yue==2) tmp=29; } if(ri>tmp||ri<=0) return false; return true; } bool check_AB(string s) { if(s[0]==s[2]&&s[1]==s[3]&&s[0]!=s[1]) return true; return false; } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n;cin>>n; int flag1=0,flag2=0; for(int i=1;i<=10000;i++) { string s= to_string(i); string str=s; reverse(str.begin(),str.end()); if(sums(s+str)<=n) continue; if(!check_hefa(i,str)) continue; if(!flag1) { cout<<s<<str<<endl; flag1=1; } if(check_AB(s+str)&&!flag2) { cout<<s<<str<<endl; flag2=1; } } return 0; }
2.代码
#include <bits/stdc++.h> #define int long long //(有超时风险) #define PII pair<int,int> #define endl '\n' #define LL __int128 using namespace std; const int N=2e5+10,M=1e3+10,mod=998244353,INF=0x3f3f3f3f; int a[N],b[N],c[N],pre[N]; int sums(string s) { int ans=0; for(int i=0;i<s.size();i++) { ans*=10; ans+=s[i]-'0'; } return ans; } int month[]={0,31,29,31,30,31,30,31,31,30,31,30,31}; bool check_hefa(int x,string s) { int yue=0,ri=0; for(int i=0;i<2;i++) { yue*=10;yue+=(s[i]-'0'); } for(int i=2;i<4;i++) { ri*=10;ri+=(s[i]-'0'); } if(yue>12||yue<=0) return false; int tmp=month[yue]; if(x%4==0&&x%100!=0||x%400==0) { if(yue==2) tmp=28; } if(ri>tmp||ri<=0) return false; return true; } bool check_AB(string s) { if(s[0]==s[2]&&s[1]==s[3]&&s[0]!=s[1]) return true; return false; } signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n;cin>>n; int flag1=0,flag2=0; for(int i=1;i<=10000;i++) { string s= to_string(i); string str=s; reverse(str.begin(),str.end()); if(sums(s+str)<=n) continue; if(!check_hefa(i,str)) continue; if(!flag1) { cout<<s<<str<<endl; flag1=1; } if(check_AB(s+str)&&!flag2) { cout<<s<<str<<endl; flag2=1; } } return 0; }
P8716 [蓝桥杯 2020 省 AB2] 回文日期--2024蓝桥杯冲刺省一
于 2024-02-25 22:26:24 首次发布