#10 超时 55 分悬关求助
查看原帖
#10 超时 55 分悬关求助
741244
Eason_cyx大愚若智楼主2023/8/21 08:28

rt,不知道哪里复杂度写假了呢(悬 11 关)

#include <iostream>
using namespace std;
int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
	int T; cin >> T;
	while(T--) {
		int n,p; cin >> n >> p;
		if(p == 1) {
		    for(int i = 1;i <= n;i++) cout << i << ' ';
		    cout << "\n";
		}
		else if(p % 2 == 0) {
		    //此时一定会多出来一个 p/2
		    int zu = n / p,mo = n % p;
		    for(int i = 1;i * 2 < p-1;i++) {
		        int first = i,second = p-i;
		        for(int j = 1;j <= zu;j++) {
		            cout << (j-1)*p+first << ' ' << (j-1)*p+second << ' ';
		        }
		        if(mo >= second) {
		            cout << zu*p + first << ' ' << zu*p+second << ' ';
		        }
		        else if(mo < second && mo >= first) {
		            cout << zu*p + first << ' ';
		        }
		    }
		    for(int i = 1;i <= zu;i++) {
		        cout << (i-1)*p + p / 2 << ' ';
		    }
		    if(mo >= p / 2) {
		        cout << zu*p+p/2 << ' ';
		    }
		    for(int i = 1;i <= zu;i++) {
		        cout << i*p << ' ';
		    }
		    cout << "\n";
		}
		else {
		    int zu = n / p,mo = n % p;
		    for(int i = 1;i * 2 <= p-1;i++) {
		        int first = i,second = p-i;
		        for(int j = 1;j <= zu;j++) {
		            cout << (j-1)*p+first << ' ' << (j-1)*p+second << ' ';
		        }
		        if(mo >= second) {
		            cout << zu*p + first << ' ' << zu*p+second << ' ';
		        }
		        else if(mo < second && mo >= first) {
		            cout << zu*p + first << ' ';
		        }
		    }
		    for(int i = 1;i <= zu;i++) {
		        cout << i*p << ' ';
		    }
		    cout << "\n";
		}
	}
	return 0;
}

/fn

2023/8/21 08:28
加载中...