NC248904. 构造
描述
输入描述
第一行数据组数。
对于每组数据,一行三个整数。
保证所有的之和不超过。
输出描述
对于每组数据,输出一行个整数,表示该排列。
示例1
输入:
3 2 3 4 4 6 1 5 1 3
输出:
3 1 4 2 2 3 7 5 6 1 4 8 3 1 6 10 2 4 7 8 9 5
说明:
对于第一个样例C++(g++ 7.5.0) 解法, 执行用时: 80ms, 内存消耗: 4584K, 提交时间: 2023-03-17 22:15:57
#include<bits/stdc++.h> using namespace std; const int max_n=2e5+5; int P[max_n<<1]; int main() { int t; scanf("%d",&t); while(t--) { int n,a,b; scanf("%d%d%d",&n,&a,&b); if((a<=n)==(b<=n)) { for(int i=1;i<=2*n;++i) P[i]=i; if(P[a]!=b) swap(P[a],P[b]); } else { for(int i=1;i<=2*n;++i) P[i]=2*n+1-i; if(P[a]!=b) swap(P[a],P[2*n+1-b]); } //assert(P[a]==b); for(int i=1;i<=2*n;++i) printf("%d%c",P[i]," \n"[i==2*n]); } return 0; }
C++(clang++ 11.0.1) 解法, 执行用时: 73ms, 内存消耗: 4688K, 提交时间: 2023-04-12 16:15:24
#include<bits/stdc++.h> #define ll long long using namespace std; const int M=1000005; int p[M]; int main() { int n,a,b,t; cin>>t; while(t--) { cin>>n>>a>>b; p[a]=b; if(a<=n&&b<=n||a>n&&b>n) { for(int i=1;i<=n*2;i++) p[i]=i; swap(p[a],p[b]); } else { for(int i=n*2;i>=1;i--) p[n*2+1-i]=i; swap(p[a],p[n*2+1-b]); } for(int i=1;i<=n*2;i++) printf("%d ",p[i]); cout<<endl; } return 0; }
pypy3 解法, 执行用时: 476ms, 内存消耗: 48820K, 提交时间: 2023-03-17 19:25:14
import sys input = lambda: sys.stdin.readline().rstrip() ii = lambda: int(input()) mii = lambda: map(int, input().split()) li = lambda: list(mii()) t = ii() for _ in range(t): n, a, b = mii() if (a > n) ^ (b > n): res = [0] + list(range(n * 2, 0, -1)) b = n * 2 - b + 1 else: res = [0] + list(range(1, n * 2 + 1)) res[a], res[b] = res[b], res[a] print(*res[1:])