题解 | #编程题2#
编程题2
http://www.nowcoder.com/practice/43068a1013b4417a85c2c2ce8b18159e
using namespace std;
int main() {
int n, x;
cin >> n >> x;
vector<long long>a(n + 1);
for (int i = 1; i <= n; ++i) cin >> a[i];
long long cnt = 0;//所清空房间的原来的人数
long long mina = a[1];
for (int i = 1; i <= n; ++i)
mina = min(a[i], mina);//求最小值,即转了几圈(为0说明没转够一圈)
if (mina > 0) {
cnt += mina * n;
for (int i = 1; i <= n; ++i) a[i] -= mina;//整体减去圈数,避免后面的重复计算
}
while (a[x] != 0) {//寻找原房间
++cnt;
--a[x];
x = x == 1 ? n : x - 1;
}
a[x] = cnt;//把人员归还到原房间
for (int i = 1; i <= n; ++i)cout << a[i] << ' ';
return 0;
}