首页 > 其他分享 >D. Flipper

D. Flipper

时间:2024-05-10 15:56:19浏览次数:6  
标签:int pid maxnSecond lst pidsec Flipper include

链接:https://codeforces.com/problemset/problem/1833/D
题面:
细节:分类讨论
约定记号:a,b[c,d],e,f:选定cd为反向序列

①当最大值出现在最后一个元素

可以确定:必然的形式是[a,...,p],maxn,右括号位置一定不变,那么就移动左括号,逐步后移,看反转后的大小。

②当最大值出现在中间

必然的形式:[a,b,c,d],maxn,e,f,g此时如情况1,右括号一定不变,就改变左括号即可,同时maxn右边的序列一定保持原样。

③当最大值出现在首位

此时我们还需要一个参量就是次大值:maxnSecond.

当maxnSecond出现在最后一位

形如:maxn,a,b,c,d,maxnSecond那么显然maxn,[a,b,c,d],maxnSecond同样只能改变左括号的位置,化为情况1。

当maxnSecond出现在中间

形如:maxn,a,b,c,d,maxnSecond,e,f,g那么也是一样的,同上。
代码:

#include<iostream>
#include<vector>
#include<algorithm>
#include<math.h>
#include<sstream>
#include<string>
#include<string.h>
#include<iomanip>
#include<stdlib.h>
#include<map>
#include<queue>
#include<cmath>
#include<limits.h>
#include<climits>
#include<fstream>
#include<set>
typedef long long ll;
using namespace std;
const int N = 2e3 + 10;
int lst[N];
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	int t; cin >> t;
	while (t--)
	{
		int n; cin >> n;
		int pid = 0;
		int pidsec = 0;
		for (int i = 1; i <= n; i++) { cin >> lst[i]; if (lst[i] == n)pid = i; if (lst[i] == n - 1)pidsec = i; }
		if (n > 1)//只有n大于1进入循环
		{
			if (pid == 1)
			{
				if (pidsec == n)
				{
					cout << lst[n] << ' ';
					for (int i = 1; i < n; i++)
					{
						cout << lst[i] << ' ';
					}
					cout << '\n';
				}
				else
				{
					for (int i = pidsec; i <= n; i++)cout << lst[i] << ' ';
					cout << lst[pidsec - 1] << ' ';
					for (int i = 1; i < pidsec - 1; i++)cout << lst[i] << ' ';
					cout << '\n';
				}
			}
			else if (pid > 1 and pid < n)
			{
				pidsec = pid - 1;
				for (int i = pid - 2; i >= 1; i--)
				{
					if (lst[i] < lst[1])break;
					else pidsec = i;
				}
				for (int i = pid; i <= n; i++)cout << lst[i] << ' ';
				for (int i = pid - 1; i >= pidsec; i--)cout << lst[i] << ' ';
				for (int i = 1; i < pidsec; i++)cout << lst[i] << ' ';
				cout << '\n';
			}
			else
			{
				pidsec = n;
				for (int i = n - 1; i > 1; i--)
				{
					if (lst[i] < lst[1])break;
					else pidsec = i;
				}
				for (int i = pid; i >= pidsec; i--)cout << lst[i] << ' ';
				for (int i = 1; i < pidsec; i++)cout << lst[i] << ' ';
				cout << '\n';
			}
		}
		else cout << lst[1] << '\n';
	}
	return 0;

}

标签:int,pid,maxnSecond,lst,pidsec,Flipper,include
From: https://www.cnblogs.com/zzzsacmblog/p/18184543

相关文章

  • Flipper 调试 react native 项目
    一、安装:1.在官网下载桌面应用Flipper官网地址FlipperGitHub首页2.打开程序,执行setupdoctor检测环境是否缺失参考官方文档二、使用全部安装完以后启动reactnative项目,flipper会检测到运行中的项目模拟器以expo构建的项目为例:1.安装expo-dev-client构建开......
  • CF1833D Flipper 题解
    赛场上思路出来了但是代码没调出来。首先考虑右端点,很明显,要让操作后的序列字典序尽量地大,那么就要使操作后的序列第一个数尽量地大,考虑\(n\)或\(n-1\),如果\(n\)在原序列的第一个位置,那么此时无论怎么调整都无法使得它在新序列的第一个位置,此时就要考虑让\(n-1\)在新序列......
  • 学习AdapterViewFlipper 图片、文字 轮播动画控件
    1\.问题/坑点1.1item宽高不生效问题需要注意的是,AdapterViewFlipper在布局时,宽高一定要用match_parent或者具体dp值。如果宽、高中使用了wrap_content时,会导致AdapterViewFlipper容器的宽高,最终变成第一个item的宽高。即使后续item的宽高超过第一个item,也不会生效,内容显......
  • HDU 3328 Flipper 栈的应用
    FlipperTimeLimit:2000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):521    AcceptedSubmission(s):334ProblemDescriptionLittleBobbyRoberts(sonofBigBob,ofProblemG)playsthissolitairememory......
  • ViewFlipper的基本使用
    ViewFlipper,它是Android自带的一个多页面管理控件,且可以自动播放!和ViewPager不同,ViewPager是一页页的,而ViewFlipper则是一层层的,和ViewPager一样,很多时候,用来实现进入应用......
  • Android 使用ViewFlipper实现左右手势切换页面的demo
    废话少说,直接上代码吧main.xml:<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/andr......
  • Android实战简易教程-第十二枪(ViewFlipper实现幻灯效果)
    ViewFlipper在实际项目中用到的不是很多了,但是作为初学者的我们还是有必要了解一下它的主要用法。本实例结合手势类(GestureDetector),实现图片的浏览功能。直接看代码1.MainA......
  • Android 滑动效果入门篇(一)—— ViewFlipper
    ​​​ViewFilpper​​ 是Android官方提供的一个View容器类,继承于ViewAnimator类,用于实现页面切换,也可以设定时间间隔,让它自动播放。又ViewAnimator继承至于FrameLayout......