问题描述

ZYL有N张牌编号分别为1, 2,……,N。他把这N张牌打乱排成一排,然后他要做一次旋转使得旋转后固定点尽可能多。如果第i个位置的牌的编号为i,我们就称之为固定点。
旋转可以被认为是将其中的一个子段旋转180度,这意味着子段的第一张牌和最后一张牌交换位置,以及第二张牌和倒数第二张牌交换位置,等等。写一个程序,找到旋转子段(子段长度可以为1)。

输入

第一行包含一个整数 N (1 ≤ N ≤100 000)。
第二行有N个数,第i个数表示旋转之前第i个位置的牌的编号。

输出

找到固定点最多的旋转所选的子段,输出旋转之后固定点的个数。

输入输出样例

样例 1 样例 2
rotate.in rotate.out rotate.in rotate.out

样例一

-rotate.in

4
3 2 1 4

-rotate.out

4

样例二

-rotate.in

2
1 2

-rotate.out

2

样例解释:

在样例1中,只需要旋转的子段[3,2,1],将排列变成1 2 3 4,旋转后所有的牌都为固定点。答案为4。
在样例2中,所有的牌已经在固定点,旋转子段[1]或者子段[2],答案为2。

数据范围

30%的数据满足:N ≤ 500;
60%的数据满足:N ≤ 5000;
100%的数据满足:1 ≤ N ≤ 100 000

依然不会,只会60pts的暴力,枚举每一个旋转中心判断最佳的旋转方式

先放标程

#include<bits/stdc++.h>
using namespace std;const int Maxn = 5e5+5;inline int read(){int x = 0, f = 1; char ch = getchar();while(ch < '0' || ch > '9'){if(ch == '-') f = -1;ch = getchar();}while(ch <= '9' && ch >= '0')x = x*10+ch-'0',ch = getchar();return x*f;
}vector<int>G[Maxn<<1];
int N,ctr,L,R,ans;
int A[Maxn],Sum[Maxn],Suf[Maxn]; bool cmp(int x,int y){return abs(2*x - ctr) < abs(2*y - ctr);
}int main(){freopen("rotate.in","r",stdin);freopen("rotate.out","w",stdout);N = read();for(int i = 1 ; i <= N ; ++i){A[i] = read();G[A[i] + i].push_back(i);if(A[i] == i) Sum[i] = 1;Sum[i] += Sum[i - 1];}for(int i = N ; i ; --i){if(A[i] == i) Suf[i] = 1;Suf[i] += Suf[i + 1];}for(int i = 2 ; i <= 2*N ; ++i)if(!G[i].empty()){ctr = i;int l , r , ret , n;sort(G[i].begin(),G[i].end(),cmp);n = G[i].size();for(int j = 0 ; j < n ; ++j){l = G[i][j];r = i - G[i][j];if(l > r) swap(l , r);ret = Sum[l-1] + Suf[r + 1] + j + 1; if(ret > ans) ans = ret,L = l,R = r;}   }printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/shulker/p/9678229.html

九校联考-长沙市一中NOIP模拟Day2T1 旋转子段(rotate)相关推荐

  1. 九校联考-长沙市一中NOIP模拟Day2T2 走格子(cell)

    问题描述 CYJ想找到他的小伙伴FPJ,.CYJ和FPJ现在位于一个房间里,这个房间的布置可以看成一个N行M列的矩阵,矩阵内的每一个元素会是下列情况中的一种: 障碍区域-这里有一堵墙(用'#'表示). ...

  2. 九校联考-长沙市一中NOIP模拟Day1T1 矩阵游戏(game)

    问题描述 LZK发明一个矩阵游戏,大家一起来玩玩吧,有一个N行M列的矩阵.第一行的数字是1,2,-M,第二行的数字是M+1,M+2-2M,以此类推,第N行的数字是(N-1)M+1,(N-1)M+2-N ...

  3. 九校联考-长沙市一中NOIP模拟Day1T3 优美序列(sequence)

    问题描述 Lxy养了N头奶牛,他把N头奶牛用1..N编号,第i头奶牛编号为i.为了让奶牛多产奶,每天早上他都会让奶牛们排成一排做早操.奶牛们是随机排列的.在奶牛排列中,如果一段区间[L,R]中的数从小 ...

  4. 九校联考-长沙市一中NOIP模拟Day2T3 柱状图(column)

    问题描述 WTH 获得了一个柱状图 , 这个柱状图一共有 N 个柱子 , 最开始第 i 根柱子的高度为 x i , 他现在要将这个柱状图排成一个屋顶的形状 , 屋顶的定义如下 : 屋顶存在一个最高的柱 ...

  5. 九校联考-DL24凉心模拟Day2T1 锻造(forging)

    1.1 题目背景 勇者虽然武力值很高,但在经历了多次战斗后,发现怪物越来越难打 于是开始思考是不是自己平时锻炼没到位,于是苦练一个月后发现......自己连一个史莱姆都打不过了. 勇者的精灵路由器告诉 ...

  6. 九校联考-DL24 凉心模拟 Day2T1 锻造 (forging)

    题目描述 勇者虽然武力值很高,但在经历了多次战斗后,发现怪物越来越难打,于是开始思考是不是自己平时锻炼没到位,于是苦练一个月后发现--自己连一个史莱姆都打不过了. 勇者的精灵路由器告诉勇者其实是他自己 ...

  7. 九校联考-DL24 凉心模拟 Day1T3 三米诺 (tromino)

    题目描述 金企鹅同学非常擅长用 1×21×21×2 的多米诺骨牌覆盖棋盘的题.有一天,正在背四六级单词的他忽然想:既然两个格子的积木叫"多米诺 (domino)",那么三个格子的的 ...

  8. 九校联考-DL24凉心模拟Day1T3 三米诺 (tromino)

    题目背景 金企鹅同学非常擅长用1*2的多米诺骨牌覆盖棋盘的题.有一天,正 在背四六级单词的他忽然想:既然两个格子的积木叫"多米诺(domino)",那 么三个格子的的积木一定叫&q ...

  9. 【九校联考-24凉心模拟】锻造(forging)

    题目背景 勇者虽然武力值很高,但在经历了多次战斗后,发现怪物越来越难打, 于是开始思考是不是自己平时锻炼没到位,于是苦练一个月后发现--自 己连一个史莱姆都打不过了. 勇者的精灵路由器告诉勇者其实是他 ...

最新文章

  1. SAP项目MM调研清单
  2. JavaScript正则替换去除字符串中特殊字符
  3. 【Linux环境】简单Shell脚本实现定时备份文件、压缩、删除超时文件操作(showDoc文件备份脚本举例)
  4. display函数怎么使用_损失函数—深度学习常见损失函数总结【图像分类|上】
  5. POI对EXCEL的操作【重点:如何设置CELL格式为文本格式】
  6. android 的 sp 智能指针用法介绍 sp wp
  7. matlab中size(A 2),MATLAB中size(A,2)什么意思
  8. autojs长按坐标没反应_Auto.js 一个主要由无障碍服务实现的不需要Root权限的类似按键精灵的自动操作软件...
  9. 3 编程基础 Makefile
  10. c语言10的10万次方,在c语言编程中 10的n次方应该怎么表达
  11. 模拟电子技术-场效应三极管及其放大电路
  12. 通过AWS创建无服务器的动态DNS系统
  13. 电子电路:电流镜电路
  14. 程序人生 | 春风得意马蹄疾,一日看尽长安花
  15. 在Excel中从长列​​表中选择多个项目
  16. win10右键一直转圈_【雷粉百科】windows10鼠标点击右键出现卡顿或者转圈
  17. [笑语天下]风景、照片与评论古今
  18. 在产品中,我们常说的A端/B端/C端是什么?
  19. 机器人的雅克比矩阵、海森矩阵、可操作度雅克比矩阵
  20. python中valueerror是什么意思_python-ValueError:不安全的字符串pi

热门文章

  1. python库:Pandas学习笔记
  2. 我的世界服务器物品加速度,我的世界怎么给装备加生命和加速度
  3. Python实战一:抓取onenet数据
  4. 免费申请使用IBM Cloud Lite(轻量套餐) 详细教程指南
  5. 浅谈Spring IOC的理解
  6. python小白入门
  7. conda.core.subdir_data.Response304ContentUnchanged CondaHTTPError: HTTP 000 CONNECTION FAILED
  8. 面向对象(Object-Oriented)
  9. 商务智能-系统概述-商务智能作用
  10. SQL SERVER练习题及答案2