7-1 Forever (20 分)
#include
using namespace std;
int N,K,m,number[10];
multimap mp;
int sum_digit(int num) {
int sum=0;
while(num/10) {
sum+=num%10;
num/=10;
}
sum+=num;
return sum;
}
int gcd(int a, int b) {
if(a%b==0) {
return b;
} else return gcd(b,a%b);
}
bool isprime(int num) {
if(num<=2) return false;
int temp=sqrt(num);
for(int i=2;i<=temp;++i) {
if(!(num%temp)) return false;
}
return true;
}
void dfs(int index, int sum) {
if(index==0) {
if(sum==0) {
int A=0;
for(int i=K-1;i>=1;--i) {
A=A*10+number[i];
}
A=(A*10+9);
int n=sum_digit(A+1);
int gcdnum=gcd(n,m);
if(isprime(gcdnum)) {
mp.insert(make_pair(n,A));
}
}
return;
}
if(index==K-1) {
for(int i=1;i<=9;++i) {
if(sum-i>=0) {
number[index]=i;
dfs(index-1,sum-i);
} else return;
}
return;
}
for(int i=0;i<=9;++i) {
if(sum-i>=0) {
number[index]=i;
dfs(index-1,sum-i);
} else return;
}
return;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
//freopen("in.txt","r",stdin);
cin>>N;
for(int i=1;i<=N;++i) {
mp.clear();
cin>>K>>m;
dfs(K-1,m-9);
cout<<"Case "<first<<" "<second<
7-2 Merging Linked Lists (25 分)
#include
using namespace std;
struct node {
int add,data,next;
};
unordered_map mp;
vector a,b,c;
void merge(vector l1, vector l2) {
int lena=l1.size(),lenb=l2.size(),index=0,indexa=0,indexb=0;
while(indexa>addl1>>addl2>>n;
int add,data,next;
node temp;
for(int i=0; i>add>>data>>next;
temp.add=add;
temp.data=data;
temp.next=next;
mp.insert(make_pair(add,temp));
}
add=addl1;
while(add!=-1) {
temp=mp.find(add)->second;
a.push_back(temp);
add=temp.next;
}
add=addl2;
while(add!=-1) {
temp=mp.find(add)->second;
b.push_back(temp);
add=temp.next;
}
int lena=a.size(),lenb=b.size();
if(lena>lenb) merge(a,b);
else merge(b,a);
int lenc=c.size();
for(int i=0; i
7-3 Postfix Expression (25 分)
#include
using namespace std;
struct node {
string data;
int pre,l,r;
};
node ans[25];
void dfs(int root) {
cout<<"(";
if(ans[root].l!=-1&&ans[root].r!=-1) {
dfs(ans[root].l);
dfs(ans[root].r);
cout<>N;
for(int i=1;i<=N;++i) {
cin>>ans[i].data>>ans[i].l>>ans[i].r;
ans[i].pre=i;
}
for(int i=1;i<=N;++i) {
if(ans[i].l!=-1) ans[ans[i].l].pre=i;
if(ans[i].r!=-1) ans[ans[i].r].pre=i;
}
int root;
for(int i=1;i<=N;++i) {
if(ans[i].pre==i) {
root=i;
break;
}
}
dfs(root);
return 0;
}
7-4 Dijkstra Sequence (30 分)
#include
using namespace std;
const int maxn = 1e3+5;
const int maxm = 1e5+5;
int g[maxn][maxn],ans[maxn],dis[maxn];
bool vis[maxn];
bool dij(int s, int n) {
fill(dis,dis+maxn,INT_MAX);
dis[s]=0;
fill(vis,vis+maxn,false);
for(int i=1;i<=n;++i) {
int v=-1,temp=INT_MAX;
for(int u=1;u<=n;++u) {
if(dis[u]>nv>>ne;
int u,v,w;
fill(g[0],g[0]+maxn*maxn,INT_MAX);
for(int i=1;i<=ne;++i) {
cin>>u>>v>>w;
g[u][v]=g[v][u]=w;
}
cin>>k;
while(k--) {
for(int i=1;i<=nv;++i) {
cin>>ans[i];
}
if(dij(ans[1],nv)==true) {
cout<<"Yes"<