在刷题的时候,出现了点小问题,感觉代码思路没
问题,示例也过得去,但测试一个也没通过(看攻略要用longlong,改了之后也不行)
这是我写的代码和注释:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n, num = 0;
long m;
cin >> n >> m;
int minCard = -1;
long long* a = new long long[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
if (minCard == -1) minCard = a[i];
else if (minCard > a[i])minCard = a[i];
}
//先看一下看卡牌是不是足够到可以组成整套,比如3种:组成1,2,r;1,r,3;r,2,3;三种需要3张r卡,其余各两张;
//n种卡片,每种需要n-1张,共需要n张r卡,最终组成n套
if (minCard / (n - 1) != 0 && m >= n) {
long long minus = min(long(minCard / (n - 1)), m / n);//凑齐的套数
num += minus * n;
minus *= n - 1;
m -= num;
for (int i = 0; i < n; i++) {
a[i] -= minus;
}
}
//剩余的卡一定有卡不足n-1张,排序先把r卡用完
while (m > 0) {
sort(a, a + n);
if (a[0] == 0 && a[1] == 0) break;
num++;
for (int i = 1; i < n; i++)
a[i]--;
m--;
/*for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << endl;*/
}
//再看看有没有多余的整套
sort(a, a + n);
cout << num + a[0];
return 0;
}