当前位置: 首页 > wzjs >正文

网站运营难吗网站开发公司杭州

网站运营难吗,网站开发公司杭州,哪里做网站好,网站建设属于现代服务吗问题描述 给定 n 个元素 {1, 2, ..., n},它们一共有 n! 个不同的排列。将这 n! 个排列按字典序进行排列,并从 0 开始编号为 0, 1, ..., n! - 1。 每个排列对应的编号称为它的字典序值。 例如,当 n 3 时,所有排列的字典序值如下…

问题描述

给定 n 个元素 {1, 2, ..., n},它们一共有 n! 个不同的排列。将这 n! 个排列按字典序进行排列,并从 0 开始编号为 0, 1, ..., n! - 1

每个排列对应的编号称为它的字典序值

例如,当 n = 3 时,所有排列的字典序值如下:

字典序值排列
01 2 3
11 3 2
22 1 3
32 3 1
43 1 2
53 2 1

算法设计

给定 n 以及 {1, 2, ..., n} 的一个排列,请你计算:

  1. 该排列的字典序值
  2. 该排列的下一个排列(按字典序排列)

如果该排列已经是最大的(即字典序值为 n! - 1),则输出 -1 表示没有下一个排列。


数据输入

  • 第 1 行是一个整数 n,表示元素个数;
  • 第 2 行是一个长度为 n 的排列,包含 {1, 2, ..., n} 中的所有元素,元素之间用空格分隔。

数据输出

  • 第 1 行输出该排列的字典序值
  • 第 2 行输出该排列的下一个排列,若不存在则输出 -1

输入样例

8
2 6 4 5 8 1 7 3

输出样例

8227
2 6 4 5 8 3 1 7

c++代码(暴力法,O(n^2))

#include<bits/stdc++.h>
#include<stdio.h>using namespace std;int n, sum = 0, k = 1, cont = 0;
vector<int> arr, know;int main() {scanf("%d", &n);arr = vector<int>(n), know = vector<int>(n + 1, 1);for (int i = 0; i < n; i++) {scanf("%d", &arr[i]);}for (int i = 1; i <= n - 1; i++) k *= i;for (int i = 0; i < n - 1; i++) {cont = 0;for (int j = 1; j < arr[i]; j++) {if (know[j]) cont++;}sum += cont * k;k /= (n - i - 1);know[arr[i]] = 0;}next_permutation(arr.begin(), arr.end());printf("%d\n", sum);for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}return 0;
}//by wqs

c++代码(线段树优化,O(nlogn))

#include<bits/stdc++.h>
#include<stdio.h>using namespace std;class node {
public:int val; //权值int lazy; //懒标记
};int n, sum = 0, k = 1, cont = 0;
vector<int> arr, know;
vector<node> nodes;void build(int index, int left, int right) {if (left == right) {nodes[index].val = know[left];nodes[index].lazy = 0;return;}int middle = (left + right) / 2;build(2 * index, left, middle);build(2 * index + 1, middle + 1, right);nodes[index].val = nodes[2 * index].val + nodes[2 * index + 1].val;nodes[index].lazy = 0;
}void pssslazy(int cur, int cur_l, int cur_r) {int middle = (cur_l + cur_r) / 2;if (nodes[cur].lazy != 0) {nodes[2 * cur].val += (middle - cur_l + 1) * nodes[cur].lazy;nodes[2 * cur + 1].val += (cur_r - middle) * nodes[cur].lazy;nodes[2 * cur].lazy += nodes[cur].lazy;nodes[2 * cur + 1].lazy += nodes[cur].lazy;nodes[cur].lazy = 0;}
}void add(int cur, int cur_l, int cur_r, int left, int right, int k) {int middle = (cur_l + cur_r) / 2;if (cur_l >= left && cur_r <= right) {nodes[cur].val += (cur_r - cur_l + 1) * k;nodes[cur].lazy += k;return;}pssslazy(cur, cur_l, cur_r);if (left <= middle) add(2 * cur, cur_l, middle, left, right, k);if (right > middle) add(2 * cur + 1, middle + 1, cur_r, left, right, k);nodes[cur].val = nodes[2 * cur].val + nodes[2 * cur + 1].val;
}int ask(int cur, int cur_l, int cur_r, int left, int right) {int middle = (cur_l + cur_r) / 2;if (cur_l >= left && cur_r <= right) return nodes[cur].val;pssslazy(cur, cur_l, cur_r);int ans = 0;if (left <= middle) ans += ask(2 * cur, cur_l, middle, left, right);if (right > middle) ans += ask(2 * cur + 1, middle + 1, cur_r, left, right);return ans;
}int main() {scanf("%d", &n);arr = vector<int>(n), know = vector<int>(n + 1, n);nodes = vector<node>(4 * n);for (int i = 0; i < n; i++) {scanf("%d", &arr[i]);know[i + 1] = i;}build(1, 1, n);for (int i = 1; i <= n - 1; i++) k *= i;for (int i = 0; i < n - 1; i++) {cont = ask(1, 1, n, arr[i], arr[i]);sum += cont * k;k /= (n - i - 1);add(1, 1, n, arr[i] + 1, n, -1);}next_permutation(arr.begin(), arr.end());printf("%d\n", sum);for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}return 0;
}//by wqs
http://www.dtcms.com/wzjs/599322.html

相关文章:

  • 我是做网站的 哪里有单接公司网站管理
  • 网站开发流程步骤crm管理系统 一般包含
  • 网站正在建设中提示页面python基础教程 入门教程
  • 网站只做内容 不做外链物联网云平台
  • 连云港网站关键字优化品牌红酒网站建设
  • 简述建设一个网站的一般过程做销售有什么技巧和方法
  • 查建设工程业绩在哪个网站石家庄最新今天的消息
  • 移动网站开发框架空间设计公司排名
  • 深圳网站建设 制作元个人博客网站素材
  • 手机网站建设论文成都市住房和城乡建设厅官方网站
  • 建筑网站首页设计职业生涯规划书模板
  • 哪个地区网站建设好网架结构厂家
  • 横岗网站建设多少钱宁夏建设工程质量监督站网站
  • 网站的文本链接怎么做稀奇古怪好玩有用的网站
  • 北京网络网站推广企业课程培训
  • 宝安网站建设(深圳信科)东营网络营销
  • 济宁做网站有哪几家自治区建设厅官方网站
  • 营销网站建设模板地区门户网站 wap app
  • 外贸网站搞一个网站需要多少钱
  • 怎么编辑网站后台it外包公司怎么接项目
  • 做网站前台要学什么课程网站jquery上传源代码
  • 苏州seo网站优化软件北京住房城乡建设部网站
  • 上海做高端网站建设吸引人的微信软文
  • 网站开发api平台瀑布流网站后台
  • 小企业网站维护一年多少钱电商平台站内推广有哪些
  • 天津建站管理系统信息好商网
  • 网站什么时候备案小火花自媒体平台
  • 英文网站建设szjijie工作总结ppt模板免费下载 素材
  • 广州h5网站xp优化大师
  • 上海做网站的的公司有哪些咸阳免费做网站