九校联考-长沙市一中NOIP模拟Day2T1 旋转子段(rotate)
问题描述
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)相关推荐
- 九校联考-长沙市一中NOIP模拟Day2T2 走格子(cell)
问题描述 CYJ想找到他的小伙伴FPJ,.CYJ和FPJ现在位于一个房间里,这个房间的布置可以看成一个N行M列的矩阵,矩阵内的每一个元素会是下列情况中的一种: 障碍区域-这里有一堵墙(用'#'表示). ...
- 九校联考-长沙市一中NOIP模拟Day1T1 矩阵游戏(game)
问题描述 LZK发明一个矩阵游戏,大家一起来玩玩吧,有一个N行M列的矩阵.第一行的数字是1,2,-M,第二行的数字是M+1,M+2-2M,以此类推,第N行的数字是(N-1)M+1,(N-1)M+2-N ...
- 九校联考-长沙市一中NOIP模拟Day1T3 优美序列(sequence)
问题描述 Lxy养了N头奶牛,他把N头奶牛用1..N编号,第i头奶牛编号为i.为了让奶牛多产奶,每天早上他都会让奶牛们排成一排做早操.奶牛们是随机排列的.在奶牛排列中,如果一段区间[L,R]中的数从小 ...
- 九校联考-长沙市一中NOIP模拟Day2T3 柱状图(column)
问题描述 WTH 获得了一个柱状图 , 这个柱状图一共有 N 个柱子 , 最开始第 i 根柱子的高度为 x i , 他现在要将这个柱状图排成一个屋顶的形状 , 屋顶的定义如下 : 屋顶存在一个最高的柱 ...
- 九校联考-DL24凉心模拟Day2T1 锻造(forging)
1.1 题目背景 勇者虽然武力值很高,但在经历了多次战斗后,发现怪物越来越难打 于是开始思考是不是自己平时锻炼没到位,于是苦练一个月后发现......自己连一个史莱姆都打不过了. 勇者的精灵路由器告诉 ...
- 九校联考-DL24 凉心模拟 Day2T1 锻造 (forging)
题目描述 勇者虽然武力值很高,但在经历了多次战斗后,发现怪物越来越难打,于是开始思考是不是自己平时锻炼没到位,于是苦练一个月后发现--自己连一个史莱姆都打不过了. 勇者的精灵路由器告诉勇者其实是他自己 ...
- 九校联考-DL24 凉心模拟 Day1T3 三米诺 (tromino)
题目描述 金企鹅同学非常擅长用 1×21×21×2 的多米诺骨牌覆盖棋盘的题.有一天,正在背四六级单词的他忽然想:既然两个格子的积木叫"多米诺 (domino)",那么三个格子的的 ...
- 九校联考-DL24凉心模拟Day1T3 三米诺 (tromino)
题目背景 金企鹅同学非常擅长用1*2的多米诺骨牌覆盖棋盘的题.有一天,正 在背四六级单词的他忽然想:既然两个格子的积木叫"多米诺(domino)",那 么三个格子的的积木一定叫&q ...
- 【九校联考-24凉心模拟】锻造(forging)
题目背景 勇者虽然武力值很高,但在经历了多次战斗后,发现怪物越来越难打, 于是开始思考是不是自己平时锻炼没到位,于是苦练一个月后发现--自 己连一个史莱姆都打不过了. 勇者的精灵路由器告诉勇者其实是他 ...
最新文章
- SAP项目MM调研清单
- JavaScript正则替换去除字符串中特殊字符
- 【Linux环境】简单Shell脚本实现定时备份文件、压缩、删除超时文件操作(showDoc文件备份脚本举例)
- display函数怎么使用_损失函数—深度学习常见损失函数总结【图像分类|上】
- POI对EXCEL的操作【重点:如何设置CELL格式为文本格式】
- android 的 sp 智能指针用法介绍 sp wp
- matlab中size(A 2),MATLAB中size(A,2)什么意思
- autojs长按坐标没反应_Auto.js 一个主要由无障碍服务实现的不需要Root权限的类似按键精灵的自动操作软件...
- 3 编程基础 Makefile
- c语言10的10万次方,在c语言编程中 10的n次方应该怎么表达
- 模拟电子技术-场效应三极管及其放大电路
- 通过AWS创建无服务器的动态DNS系统
- 电子电路:电流镜电路
- 程序人生 | 春风得意马蹄疾,一日看尽长安花
- 在Excel中从长列​​表中选择多个项目
- win10右键一直转圈_【雷粉百科】windows10鼠标点击右键出现卡顿或者转圈
- [笑语天下]风景、照片与评论古今
- 在产品中,我们常说的A端/B端/C端是什么?
- 机器人的雅克比矩阵、海森矩阵、可操作度雅克比矩阵
- python中valueerror是什么意思_python-ValueError:不安全的字符串pi
热门文章
- python库:Pandas学习笔记
- 我的世界服务器物品加速度,我的世界怎么给装备加生命和加速度
- Python实战一:抓取onenet数据
- 免费申请使用IBM Cloud Lite(轻量套餐) 详细教程指南
- 浅谈Spring IOC的理解
- python小白入门
- conda.core.subdir_data.Response304ContentUnchanged CondaHTTPError: HTTP 000 CONNECTION FAILED
- 面向对象(Object-Oriented)
- 商务智能-系统概述-商务智能作用
- SQL SERVER练习题及答案2