CF844 C 置换 水

由于每个数字只出现一次,离散化一下,置换求个循环节就好了。

/** @Date    : 2017-08-25 01:39:39
  * @FileName: C.cpp
  * @Platform: Windows
  * @Author  : Lweleth ([email protected])
  * @Link    : https://github.com/
  * @Version : $Id$
  */
#include <bits/stdc++.h>
#define LL long long
#define PII pair<int ,int>
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std;

const int INF = 0x3f3f3f3f;
const int N = 2e5+20;
const double eps = 1e-8;

int a[N];
int pos[N];
vector<int>q[N];
int vis[N];
int main()
{
	int n;
	while(cin >> n)
	{
		MMF(vis);
		MMF(pos);
		map<int,int>s;
		for(int i = 1; i <= n; i++)
			scanf("%d", a + i), pos[i] = a[i];
		sort(a + 1, a + n + 1);
		for(int i = 1; i <= n; i++)
			s[a[i]] = i;
		for(int i = 1; i <= n; i++)
			a[i] = s[pos[i]];

		int c = 0;
		for(int i = 1; i <= n; i++)
		{
			if(!vis[a[i]] && a[i] != i)
			{
				int cnt = 2;
				int np = a[i];
				vis[i] = 1;
 				while(a[np] != i || !vis[i])
				{
					cnt++;
					vis[np] = 1;
					q[c].PB(np);
					np = a[np];
				}
				vis[np] = 1;
				q[c].PB(np);
				q[c].PB(i);
				c++;
			}
			else if(a[i] == i)
			{
				q[c++].PB(a[i]);
				vis[i] = 1;
			}
		}
		printf("%d\n", c);
		for(int i = 0; i < c; i++)
		{
			printf("%d", q[i].size());
			while(!q[i].empty())
			{

				printf(" %d", q[i].back());
				q[i].pop_back();
			}
			printf("\n");
		}
	}
    return 0;
}
时间: 2024-12-17 10:50:43

CF844 C 置换 水的相关文章

poj 2369 Permutations 置换水题

找循环节求lcm就够了,若答案是12345应该输出1,被坑了下. #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<cmath> using namespace std; #define INF 0x3FFFFFF #define MAXN 2222 #define eps 1e-6 i

七,置换计划(上)

返回目录:http://www.cnblogs.com/wantnon/p/4649254.html yc: 这是咋回事儿?这是哪儿?你是谁? 蒙面人: 你穿越了,这是古代,我是救你逃命的人. yc:  啊?不会吧!我没坐飞机也没崴脚呀. 蒙面人:  你打游戏了!坐飞机和崴脚是女屌丝的穿越方式,像你这种屌丝男士,就是打飞机或者打游戏. 她说这话时有点笑场. yc:错,我可不是屌丝,我现在比扎特伯格还有钱,是真正的高富帅! 蒙面人:本质上还是屌丝,就知道看女孩手. yc:这怪我吗,你裹这么严实,我

GLSL实现Simple Displace Mapping 水仿真流体绘制 【转】

http://blog.csdn.net/a3070173/archive/2008/11/20/3342062.aspx Dislace Mapping其实就是在顶点着色器中 对顶点进行置换偏移,经常用于水仿真流体绘制. 顶点着色器: uniform float g_fScale; uniform sampler2D g_DisplaceTexture; void main() { float fDisplace = texture2DLod(g_DisplaceTexture, gl_Mul

HDU 4985 Little Pony and Permutation(置换)

HDU 4985 Little Pony and Permutation 题目链接 题意:给定一个置换,输出分解成的循环 水题,直接模拟即可 代码: #include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; const int N = 100005; int n, a[N], vis[N]; int main() { whi

老旧车标致206能卖多少钱?且看团车网老旧车置换拍卖体验

我个人开了206差不多7年了.但是发现很多问题.上市这么多年.后桥设计缺陷已经凸现.那就是后桥右边防水问题,导致进水后右后桥滚针轴承磨损,如果不及时更换就会磨坏后桥轴管导致车轮外八字,更严重者磨胎,甚至轮胎脱落!解决办法就是更换后桥.而且后桥好几千!(4S报价,外卖的后桥又不放心用)! 难道这么多206,207,C2,统一坏右后桥是巧合? 难道大家没有想过206,207,C2车主集体维权?向质检总局投诉?也可能是大家根本不在意这个问题.(老旧车标致206置换新车010-51656556) 所以,

一&#183;京京得水

有一个小姑娘,今年六岁了,眼睛又圆又大,像黑豆子似的,但嘴巴挺大,很爱说话.虽然年龄比较小,可就是爱看野外的大自然,所以常常跑到野外,令家人担心,最担心的 是妈妈,妈妈常常"京京" "京京"的叫,嗓子都叫哑了. 她是一个懂得很多东西的女孩,知道很多动物和植物的名称.她也是一个很有耐心的女孩,有一件玩具,连她的妈妈,爸爸和哥哥都弄不懂该怎么玩,而她哪?就算弄乱,也要找到技巧,所以她会使用很多东西. 在一个晴朗的天气,小京京在家里又呆不住了,去找邻居家的孩子----彩云

操作系统 页面置换算法LRU和FIFO

LRU(Least Recently Used)最少使用页面置换算法,顾名思义,就是替换掉最少使用的页面. FIFO(first in first out,先进先出)页面置换算法,这是的最早出现的置换算法.该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最长的页面给予淘汰. FIFO置换算法有这样一个奇怪现象:内存空间块数越多,缺页中断率可能相反的越高(缺页中断次数越高). LFU(Least Frequently Used)最近最少使用算法,它是基于“如果一个数据在最近一段时间内使用次

三角函数之美-水波纹加载LoadingView

一.前言 学习是要总结的,最近几天学习了绘图相关的,但是使用的机会较少,现在又快要遗忘了,这次看了水波纹的绘制,觉得十分有意思,还是 把实现的方法记录下来.技术无他,为手熟尔,还是要多练习,空淡误国,实干兴邦,让我们看看今天的三角函数之美吧. 二.概述 肯定大家对中学学习的三角函数都不陌生吧,不过学习的sin.cos是超越函数一类函数,是初等函数的一种,借用维基百科的一张图: 一个完整的正弦函数应该是这样的:>y=Asin(ωx+φ)+h,A决定峰值,ω决定周期,φ表示初相位,h表示y轴的位置.

bzoj1601【Usaco2008 Oct】灌水

1601: [Usaco2008 Oct]灌水 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 1589  Solved: 1035 [Submit][Status][Discuss] Description Farmer John已经决定把水灌到他的n(1<=n<=300)块农田,农田被数字1到n标记.把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水库. 建造一个水库需要花费wi(1<=wi<=100000),连接两