原题链接:https://www.luogu.com.cn/problem/CF1551A
题目大意
用\(c1\)个\(1\)元和\(c2\)个\(2\)元凑成\(N\)元钱,并且使\(\mid c1-c2 \mid\)最小。
题目分析
结合样例数据我们可以发现 \(c1-c2\)
只有三种情况:\(0\) 或 \(1\) 或 \(−1\)
。我们可以将一个两元看成两个一元,试着将 \(N\) 平均分成三份,使 \(i=N \div 3\)
.由于存在除不尽的情况,我们可以分成一下三种情况讨论:
- 当 $ N =0 $ ;\(c1=i\) 且 \(c2=i\) .
- 当 $ N =1 $ ; \(c1=i+1\) 且 \(c2=i\) .
- 当 $ N =1 $ ; \(c1=i\) 且 \(c2=i+1\) .
参考代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #include <iostream> #include <cstdlib> #include <cstdio> #include <string> #include <cstring> #include <cmath> #include <algorithm> #include <queue> #include <iomanip> #include <vector> #include <cctype>
using namespace std; typedef long long ll; typedef unsigned long long ull; int main() { int n; cin>>n; while(n--){ int tot; cin>>tot; int i=tot/3; if(tot%3==0){ cout<<i<<" "<<i<<endl; }else if(tot%3==1){ cout<<i+1<<" "<<i<<endl; }else{ cout<<i<<" "<<i+1<<endl; } } return 0; }
|