1048. Find Coins (25)

it2024-12-11  18

 距离PAT考试还有14天最重要的是做透每一题

 

(1)思路暴力

会超时

(2)

用hash存储每个数被M减之后的数

注意这里会有重复的值所以要用数组存储其数量

 

再仔细思考一下,只要用数组存储每个数的数量即可,遍历的时候判断该数组v[M-i]元素的值是否大于1

 

#include <cstdio> #include <cstring> using namespace std; int num[1010],N,M; int main() { scanf("%d %d",&N,&M); memset(num,0,sizeof(num)); for(int i=0;i<N;i++) { int temp; scanf("%d",&temp); num[temp]++; } for(int i=1;i<500;i++) { if(num[i]) { num[i]--; if(num[M-i]) { printf("%d %d\n",i,M-i); return 0; } num[i]++; } } printf("No Solution"); return 0; }

 

未简化时的代码

#include <cstdio> #include <map> #include <vector> #include <algorithm> #include <cstring> using namespace std; int n,m,flag[1000000]; int main() { scanf("%d %d",&n,&m); vector<int> va; map<int,int> ha; memset(flag,0,sizeof(flag)); for(int i=0;i<n;i++) { int v; scanf("%d",&v); flag[v]++; ha[v]=m-v; va.push_back(v); } sort(va.begin(),va.end()); int res=0; for(int i=0;i<n;i++) { if(ha[va[i]] == va[i]) { if(flag[va[i]] > 1) { res=va[i]; break; } else continue; } if(ha.find(ha[va[i]]) != ha.end()) { res=va[i]; break; } } if(res == 0) printf("No Solution"); else printf("%d %d",res,m-res); return 0; }

 

 

转载于:https://www.cnblogs.com/tclan126/p/8570658.html

相关资源:数据结构—成绩单生成器
最新回复(0)