CF1679A题解
题目:
思路:
首先排除 \(n\) 为奇数,的情况,由于车轮数都为偶数,所以若 \(n \bmod 2 = 1\),则输出 \(-1\),\(n<4\) 的情况也需输出 \(-1\),因为一辆车的最少轮子数为 \(4\),否则求出车辆数的最大值和最小值。
最小值:
由于 \(6 > 4\),所以六轮车越多,车的总数越少,若 \(n \bmod 6 = 0\),则车的总数为 \(n \div 6\)。否则分类讨论:若 \(n \bmod 6 = 2\),则可以把一辆六轮车和多出来的两个轮胎合并为两辆四轮车,则车辆数为 \(n \div 6 + 1\);若 \(n \bmod 6 = 4\),则可以再增加一辆四轮车,车辆总数也为 \(n \div 6 + 1\)。所以,若 \(n \bmod 6 = 0\),输出 \(n \div 6\),否则输出 \(n \div 6 +1\)。
最大值:
由于 \(4 < 6\),所以四轮车越多,车的总数越多。还是分类讨论,若 \(n \bmod 4 = 0\),则车的总数为 \(n \div 4\);若 \(n \bmod 4 = 2\),则可以把一辆四轮车和多出来的两个轮胎合并为一辆六轮车,则车的总数仍为 \(n \div 4\)。所以不管 \(n \bmod 4\) 等于 \(0\) 还是 \(2\),都输出 \(n \div 4\)。
代码:
#include <bits/stdc++.h>
using namespace std;
long long m,n,x,y;//注意开 long long。
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>m;
while (m--)
{
cin>>n;
if (n&1 || n<4)//若 n 为奇数或 n<4。
{
cout<<-1<<endl;
continue;
}
x=n/4;//最大值。
if (n%6==0) y=n/6;//最小值。
else y=n/6+1;
cout<<y<<" "<<x<<endl;//注意先输出最小值再输出最大值。
}
return 0;
}