原题链接: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 \bmod 3=0 $ ;$c1=i$ 且 $c2=i$ .
- 当 $ N \bmod 3=1 $ ; $c1=i+1$ 且 $c2=i$ .
- 当 $ N \bmod 3=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; }
|