Twist the Permutation 数列的轮换题 Codeforces 776 div3
这是一道比较经典的将数列中的数字轮换的题目,我们先看题干:
题干分析:先浅浅地分析一下题目是要我们干什么,我们会默认有一个已经升序排序地1~n的排列,然后我们会给定一个新排列是在原有排列的基础上进行operation得到的,那么我们来看看这个operation是什么:
这个operation是对每一个位置i上进行操作的,就是对前i个数向右移动一位,并且在第i位上可以执行的operation次数是无穷的;
接下来,我们要发现题干叫我们求的是什么,他问我们能不能从初始序列经过尽可能小的operation次数到达给定的序列,我们就是要让这个数尽可能地小;
然后我们是要怎么解决这道题呢?首先我们可以发现,我是根据i的顺序从小到大逐渐把前面的顺序逐渐打乱的,说明在d[n]之前,n这个最大的数字肯定是没有动过,所以d[n]是多少纯粹是根据n被移动到了哪里决定的,因为其他的不影响n的位置,所以可根据n的位置反推出d[n],同理我们可以反推出d[n-1]……以此类推!
最后我们再来考虑一下是怎么得到d[n]的,我们通过倒着循环i,当找到n的位置为j之后,我们令ind(index)等于j,我们就知道这里换转了(ind+1)%i次
所以我们就把所有的数全部换回去,所以我们循环1~i,找到他们本来的位置换回去,这样的话,d[n]就完成了,我只要接下来完成同样的循环就好了!
因为我需要找回n个数,每次找回一个数的时间复杂度是O(n)的,所以这个算法的时间复杂度是O(n^2)
接下来是代码:
#include<bits/stdc++.h>
#define maxn 2100
using namespace std;
int q[maxn],n,b[maxn],ans[maxn];
int main()
{
int t;
cin >> t;
while(t--){
int n;
cin >> n;
for(int i = 0;i<n;i++) cin >> q[i];
for(int i = n;i>=1;i--){
int ind = 0;
for(int j = 0;j<i;j++) ind = q[j]==i ? j : ind;
for(int j = 0;j<i;j++) b[(i+j-1-ind)%i] = q[j];
for(int j = 0;j<i;j++) q[j] = b[j];
ans[i-1] = i!=1 ? (1+ind)%i : 0;
}
for(int i = 0;i<n;i++) cout << ans[i] << " ";
cout << '\n';
}
return 0;
}
Twist the Permutation 数列的轮换题 Codeforces 776 div3的更多相关文章
- Codeforces #550 (Div3) - G.Two Merged Sequences(dp / 贪心)
Problem Codeforces #550 (Div3) - G.Two Merged Sequences Time Limit: 2000 mSec Problem Description T ...
- CodeForces 1029E div3
题目链接 第一道场上自己做出来的E题...虽然是div3,而且是原题... 当时做完ABC,D题没有思路就去怼E了,然后发现貌似原题? 事实上就是原题... 给个原题链接... [HNOI2003]消 ...
- codeforces #579(div3)
codeforces #579(div3) A. Circle of Students 题意: 给定一个n个学生的编号,学生编号1~n,如果他们能够在不改变顺序的情况下按编号(无论是正序还是逆序,但不 ...
- 套题 codeforces 359
A题:Free Ice Cream 注意要使用LL,避免爆int #include <bits/stdc++.h> #define scan(x,y) scanf("%d%d&q ...
- 水题 Codeforces Round #302 (Div. 2) A Set of Strings
题目传送门 /* 题意:一个字符串分割成k段,每段开头字母不相同 水题:记录每个字母出现的次数,每一次分割把首字母的次数降为0,最后一段直接全部输出 */ #include <cstdio> ...
- 水题 Codeforces Round #300 A Cutting Banner
题目传送门 /* 水题:一开始看错题意,以为是任意切割,DFS来做:结果只是在中间切出一段来 判断是否余下的是 "CODEFORCES" :) */ #include <cs ...
- [刷题]Codeforces 794C - Naming Company
http://codeforces.com/contest/794/problem/C Description Oleg the client and Igor the analyst are goo ...
- CF刷题-Codeforces Round #481-D. Almost Arithmetic Progression
题目链接:https://codeforces.com/contest/978/problem/D 题解: 题目的大意就是:这组序列能否组成等差数列?一旦构成等差数列,等差数列的公差必定确定,而且,对 ...
- 水题 Codeforces Round #299 (Div. 2) A. Tavas and Nafas
题目传送门 /* 很简单的水题,晚上累了,刷刷水题开心一下:) */ #include <bits/stdc++.h> using namespace std; ][] = {" ...
随机推荐
- Ubuntu 16.04 更改系统语言为简体中文 #####避坑指南
大家跟着我的步骤一步一步来,肯定不会出现问题的 我这里说明两点,一是切换到管理员用户,二是更新网络源! 且待大家走一遍安装流程 一.安装时报错 原因:以访客的身份进入的会报错,改为管理员进入即可. p ...
- latex知识点
sensors期刊下载的laTex模板错误修改 把上面的那个删了,原因是什么那,请看下文...... 如何使用endnote + latex 1.使用word将文献按照word引用顺序导出成一个新的e ...
- uos系统安装tree
apt install tree 提示无法安装软件包 执行apt update 然后执行apt install tree
- shell脚本部署zookeeper-3.4.10 [含注释]
文章目录 zk_install.sh conf/config conf/zoo_template.cfg package zk_install.sh #!/bin/bash base_path=$(c ...
- JavaScript函数式编程(纯函数、柯里化以及组合函数)
JavaScript函数式编程(纯函数.柯里化以及组合函数) 前言 函数式编程(Functional Programming),又称为泛函编程,是一种编程范式.早在很久以前就提出了函数式编程这个概念了 ...
- MASA Framework - DDD设计(2)
目录 MASA Framework - 整体设计思路 MASA Framework - EventBus设计 MASA Framework - MASA Framework - DDD设计(1) MA ...
- 谁才是微服务赢家:Quarkus 与 Spring Boot
在容器时代("Docker 时代")Java 仍然处于领先地位,但哪个更好?Spring Boot 还是 Quarkus? 谁会最先进的?Spring Boot 或 Quarkus ...
- k8s核心资源之:标签(label)
简介 label是标签的意思,一对 key/value ,被关联到对象上,k8s中的资源对象大都可以打上标签,如Node.Pod.Service 等 一个资源可以绑定任意多个label,k8s 通过 ...
- c# 编程学习(四)
逻辑AND(逻辑与)操作符(用&&表示)和逻辑OR(逻辑或) 操作符(用||表示).这两个操作符统称条件逻辑操作符.只有作为操作数的两个布尔表达式都为 true.操作符&&am ...
- C#爬虫(04):HtmlAgilityPack解析html文档
原文链接 https://www.cnblogs.com/springsnow/p/13278283.html 目录 一.爬虫概述 1.使用浏览器获取页面源码 2.HTML解析组件 二.HtmlAgi ...