找规律我们可以发现:
为了方便对a[n+1]取值为x
1.如果x=0,只有0,k=1
2.如果1<=x<=n,在i<=x,a[i]=0;在i>x ,a[i]=x,k=2
3.如果x>n,需要分类:
3.1 如果x%n==0,i<=n,a[i]=0,a[n+1]=x,k=2
3.2 如果x%n!=0,设y=x%n,i<=y,a[i]=0;y<i<=n ,a[i]=y;a[n+1]=x;
点击查看代码
#include<bits/stdc++.h>
using namespace std;
void solve() {
int n, m, k;
cin >> n >> m >> k;
if (k > 3) {
cout << "0";
}
else if (k == 1) {
cout << 1;
}
else if (k == 2) {
if (m == 0) cout << 0;
else if (m >= n) cout << (min(n, m) + m / n - 1);
else cout << m;
}
else {//k==3
if (m <= n) cout << 0;
else cout << m - n-m/n+1;//除去m%n==0的情况;因为m-n与m/n会多减一个n,所以要加上1;
}
cout << '\n';
}
int main() {
int t;
cin >> t;
while (t--) {
solve();
}
}