博客
关于我
C. Crazy Diamond(思维+构造)
阅读量:238 次
发布时间:2019-03-01

本文共 2346 字,大约阅读时间需要 7 分钟。

    


思路:数字1和n在排序过程中具有特殊性,常被用作中转站进行值的交换。

对于小于等于n/2的数值,处理方式如下:首先将其与n交换位置,再将交换后的数值转移到1的位置。对于大于n/2+1的数值,处理方式与上述相似。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#define debug(a) cout << "#a# " << a << endl; using namespace std;const int maxn = "3e5+1000";typedef long long ll;typedef pair
P;inline LL read() { LL x = 0, f = 1; char ch = getchar(); while (!isdigit(ch)) { if (ch == '-') f = -1; ch = getchar(); } while (isdigit(ch)) { x = x * 10 + ch - '0'; ch = getchar(); } return x * f; }LL a[maxn], pos[maxn];vector

ans;void op(LL x, LL y) { ans.push_back({x, y}); swap(pos[a[x]], pos[a[y]]); swap(a[x], a[y]); }int main(void) { cin.tie(0); std::ios::sync_with_stdio(false); LL n; cin >> n; for (LL i = 1; i <= n; i++) { cin >> a[i]; pos[a[i]] = i; } for (LL i = 2; i <= n/2; i++) { if (pos[i] <= n/2) { op(pos[i], n); op(n, i); } else { op(pos[i], 1); op(1, n); op(n, i); } } for (LL i = n/2+1; i <= n; i++) { if (pos[i] > n/2) { op(pos[i], n); op(n, i); } else { op(pos[i], 1); op(1, n); op(n, i); } } <#include

经过优化后的版本:

    


数字1和n在排序过程中具有特殊性,常被用作中转站进行值的交换。

对于小于等于n/2的数值,处理方式如下:首先将其与n交换位置,再将交换后的数值转移到1的位置。对于大于n/2+1的数值,处理方式与上述相似。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#define debug(a) cout << "debug: " << a << endl; using namespace std;const int maxn = 300000 + 1000;typedef long long ll;typedef pair
P;inline ll read() { ll x = 0, f = 1; char ch = getchar(); while (!isdigit(ch)) { if (ch == '-') f = -1; ch = getchar(); } while (isdigit(ch)) { x = x * 10 + ch - '0'; ch = getchar(); } return x * f; }ll a[maxn], pos[maxn];vector

ans;void op(ll x, ll y) { ans.push_back({x, y}); swap(pos[a[x]], pos[a[y]]); swap(a[x], a[y]); }int main(void) { cin.tie(0); std::ios::sync_with_stdio(false); ll n; cin >> n; for (ll i = 1; i <= n; i++) { cin >> a[i]; pos[a[i]] = i; } for (ll i = 2; i <= n/2; i++) { if (pos[i] <= n/2) { op(pos[i], n); op(n, i); } else { op(pos[i], 1); op(1, n); op(n, i); } } for (ll i = n/2+1; i <= n; i++) { if (pos[i] > n/2) { op(pos[i], n); op(n, i); } else { op(pos[i], 1); op(1, n); op(n, i); } }

转载地址:http://cict.baihongyu.com/

你可能感兴趣的文章
No module named cv2
查看>>
No module named tensorboard.main在安装tensorboardX的时候遇到的问题
查看>>
No qualifying bean of type XXX found for dependency XXX.
查看>>
No resource identifier found for attribute 'srcCompat' in package的解决办法
查看>>
Node.js 文件系统的各种用法和常见场景
查看>>
node.js 配置首页打开页面
查看>>
node.js+react写的一个登录注册 demo测试
查看>>
Node.js安装与配置指南:轻松启航您的JavaScript服务器之旅
查看>>
nodejs libararies
查看>>
nodejs-mime类型
查看>>
Node入门之创建第一个HelloNode
查看>>
NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
查看>>
npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
查看>>
npm和yarn的使用对比
查看>>
npm报错unable to access ‘https://github.com/sohee-lee7/Squire.git/‘
查看>>
npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
查看>>
NR,NF,FNR
查看>>
nrf开发笔记一开发软件
查看>>
NSDateFormatter的替代方法
查看>>
NSOperation基本操作
查看>>