A. Permutation Forgery
Description
给定一个有\(n\)个元素的排列\(p\)。
定义\(F(p)=sort(p_1+p_2,p_2+p_3,……,p_{n-1}+p_n)\)
现请给出任意一个排列\(p^\prime\)有\(F(p)=F(p^\prime)\),但\(p!=p^\prime\)
Input
第一行一个整数\(t\)代表组数
之后每一组由两行构成,第一行为整数\(n\)表示该组有\(n\)个整数,第二行为\(n\)个整数
Output
对于每一组测试用例,输出一组合法的(\p^\prime\)
Analysis
考虑两两元素之和的数组指纹,根据加法交换律\(a+b=b+a\)可以容易得出逆序即为其一组合法解
Accepted Code
/*
* @Author : Gehrychiang
* @LastEditTime : 2020-09-07 09:51:38
* @Website : www.yilantingfeng.site
* @E-mail : gehrychiang@aliyun.com
* @ProbTitle : Permutation Forgery
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
template <class T>
void _R(T &x) { cin >> x; }
void _R(int &x) { scanf("%d", &x); }
void _R(long long &x) { scanf("%lld", &x); }
void _R(double &x) { scanf("%lf", &x); }
void _R(char &x) { scanf(" %c", &x); }
void _R(char *x) { scanf("%s", x); }
template <class T>
void _W(const T &x) { cout << x; }
void _W(const int &x) { printf("%d", x); }
void _W(const long long &x) { printf("%lld", x); }
void _W(const double &x) { printf("%.16f", x); }
void _W(const char &x) { putchar(x); }
void _W(const char *x) { printf("%s", x); }
int a[105];
int main()
{
int t;
_R(t);
while (t--)
{
int n;
_R(n);
for (int i = 0; i < n; i++)
{
_R(a[i]);
}
for (int i = n - 1; i >= 0; i--)
{
_W(a[i]);
_W(" ");
}
_W("\n");
}
return 0;
}
- /*
- * @Author : Gehrychiang
- * @LastEditTime : 2020-09-07 09:51:38
- * @Website : www.yilantingfeng.site
- * @E-mail : gehrychiang@aliyun.com
- * @ProbTitle : Permutation Forgery
- */
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- template <class T>
- void _R(T &x) { cin >> x; }
- void _R(int &x) { scanf("%d", &x); }
- void _R(long long &x) { scanf("%lld", &x); }
- void _R(double &x) { scanf("%lf", &x); }
- void _R(char &x) { scanf(" %c", &x); }
- void _R(char *x) { scanf("%s", x); }
- template <class T>
- void _W(const T &x) { cout << x; }
- void _W(const int &x) { printf("%d", x); }
- void _W(const long long &x) { printf("%lld", x); }
- void _W(const double &x) { printf("%.16f", x); }
- void _W(const char &x) { putchar(x); }
- void _W(const char *x) { printf("%s", x); }
- int a[105];
- int main()
- {
- int t;
- _R(t);
- while (t--)
- {
- int n;
- _R(n);
- for (int i = 0; i < n; i++)
- {
- _R(a[i]);
- }
- for (int i = n - 1; i >= 0; i--)
- {
- _W(a[i]);
- _W(" ");
- }
- _W("\n");
- }
- return 0;
- }
/*
* @Author : Gehrychiang
* @LastEditTime : 2020-09-07 09:51:38
* @Website : www.yilantingfeng.site
* @E-mail : gehrychiang@aliyun.com
* @ProbTitle : Permutation Forgery
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
template <class T>
void _R(T &x) { cin >> x; }
void _R(int &x) { scanf("%d", &x); }
void _R(long long &x) { scanf("%lld", &x); }
void _R(double &x) { scanf("%lf", &x); }
void _R(char &x) { scanf(" %c", &x); }
void _R(char *x) { scanf("%s", x); }
template <class T>
void _W(const T &x) { cout << x; }
void _W(const int &x) { printf("%d", x); }
void _W(const long long &x) { printf("%lld", x); }
void _W(const double &x) { printf("%.16f", x); }
void _W(const char &x) { putchar(x); }
void _W(const char *x) { printf("%s", x); }
int a[105];
int main()
{
int t;
_R(t);
while (t--)
{
int n;
_R(n);
for (int i = 0; i < n; i++)
{
_R(a[i]);
}
for (int i = n - 1; i >= 0; i--)
{
_W(a[i]);
_W(" ");
}
_W("\n");
}
return 0;
}