1048 Find Coins
阿新 • • 發佈:2019-01-10
題目大意:
A+B=C,給你N個A,B和一個C,要求找出一組A+B=C(A<=B),如果有多組就只輸出A最小的一組。
解題思路:
標記輸入的硬幣面額數量,然後對輸入排序,從小到大一次判斷即可,需要注意陣列儘量開大一點,否則容易出現數組越界。
程式碼如下:
#include<iostream> #include<cstdio> #include<fstream> #include<set> #include<cmath> #include<cstring> #include<string> #include<map> #include<vector> #include<iomanip> #include<cstdlib> #include<list> #include<queue> #include<stack> #include<algorithm> #define inf 0x3f3f3f3f #define MOD 1000000007 #define mem0(a) memset(a,0,sizeof(a)) #define mem1(a) memset(a,-1,sizeof(a)) #define meminf(a) memset(a,inf,sizeof(a)) //vector ::iterator it; //set<int>::iterator iter; typedef long long ll; typedef unsigned long long ull; using namespace std; int main() { // std::ios::sync_with_stdio(false); // cin.tie(0); // freopen("test.txt","r",stdin); // freopen("output.txt","w",stdout); int n,book[1000]={0},coin[100100]={0},pay;//面額雖然最大500,但是PAY可能較大 cin>>n>>pay; for(int i=0;i<n;i++) { cin>>coin[i]; book[coin[i]]++; } sort(coin,coin+n); for(int i=0;i<n;i++) { int t=pay-coin[i]; if(t<=0)break;//防止段錯誤,不加會有一個測試點過不去 book[coin[i]]--; if(book[t]) { cout<<coin[i]<<' '<<t<<endl; return 0; } book[coin[i]]++; } cout<<"No Solution"<<endl; return 0; }