1104 天长地久 测试点2
作者:互联网
易错点
- 测试点2,需要排序,先按n排,再按A排
- 如果用了map/vector,测试点0、1、3,每次循环完需要clear()
代码
#include <iostream>
#include <cstdio>
#include <string>
#include <utility>
#include <vector>
#include <algorithm>
using namespace std;
bool is_nature(int a){
if(a<2){
return 0;
}
else if(a==2){
return 1;
}
if(a!=2&&a%2==0){
return 0;
}
for(int i=3;i*i<=a;i+=2){
if(a%i==0){
return 0;
}
}
return 1;
}
bool cmp_diy(int a,int b){
int min=1000000;
int ri=1;
if(min>a){
min=a;
}
if(min>b){
min=b;
}
for(int i=min;i>=3;i--){
if(a%i==0&&b%i==0){
ri=i;
break;
}
}
if(is_nature(ri)==1){
return 1;
}
else{
return 0;
}
}
int cmp_diy2(int a){
string s;
int cnt=0;
s=to_string(a);
for(int i=0;s[i]!=NULL;i++){
cnt+=(s[i]-'0');
}
return cnt;
}
bool cmp_diy3(pair<int,int> a,pair<int,int> b){
if(a.first!=b.first){
return a.first<b.first;
}
else{
return a.second<b.second;
}
}
int main()
{
int n;
int k,m;
int tmp2;
int tmp3;
int f;
pair<int,int> pa;
vector<pair<int,int> > vt;
cin>>n;
for(int i=0;i<n;i++){
cin>>k>>m;
f=0;
cout<<"Case "<<i+1<<endl;
if(9*k<m){
cout<<"No Solution"<<endl;
}
else{
for(int j=1;j<=k;j++){
if(cmp_diy(m,m-9*j+1)==1){
tmp2=1;
tmp3=1;
for(int tmp=0;tmp<k-j-1;tmp++){
tmp2*=10;
}
for(int tmp=0;tmp<k-j;tmp++){
tmp3*=10;
}
tmp3-=1;
for(int tmp=tmp2;tmp<=tmp3;tmp++){
if(cmp_diy2(tmp)==(m-9*j)&&(tmp%10!=9)){//后j位为固定的9,前面的tmp的最后一位不可以是9
f=1;
pa.first=m-9*j+1;
pa.second=tmp;
vt.push_back(pa);
}
}
}
}
sort(vt.begin(),vt.end(),cmp_diy3);
for(int tmp=0;tmp<vt.size();tmp++){
cout<<vt[tmp].first<<" "<<vt[tmp].second;
for(int tmp4=0;tmp4<((m-vt[tmp].first+1)/9);tmp4++){
cout<<9;
}
cout<<endl;
}
if(f==0){
cout<<"No Solution"<<endl;
}
vt.clear();
}
}
return 0;
}
标签:cnt,return,测试点,min,int,1104,天长地久,include 来源: https://www.cnblogs.com/wodeblog1982/p/16482214.html