华中邀请赛现场赛F题 Seats
题目链接:http://acm.whu.edu.cn/land/problem/detail?problem_id=1552
解题报告:题目意思应该很清楚,就是有n个人,分别属于7个班级,然后他们坐成一排,现在要通过相邻的两个人做交换,使得所有同一个班的人都坐到一起,问这个交换的次数最少是多少?
比赛的时候第一个就是看这题,因为题意简单,但是看完了一点想法都没有,所以果断换了一题,看了题解才知道怎么做。
首先如果我们知道最后的排列是怎么样的,那么求一共要交换多少次就只要求初始状态跟最后的排列的逆序对的个数就可以了,然后因为班级最多只有7个,所以可以枚举7个班级的全排列,数据量也不大,一共才5040种情况。然后枚举出排列之后就是求有多少个逆序对了,对于这个有一个很巧妙的做法,利用到了这个题目中班级数少的特点,就是首先定义一个
f[i][j]二维数组,然后将初始的排列扫一遍,f[i][j] 的含义是所有排在 j 班同学前面的 i 班同学的人数,然后在求逆序对的时候只要班级的平方次计算就可以很快得出逆序对的个数,这个原理我想了好久,一开始不懂为什么这样可以,唉,还是太菜了啊。。。慢慢领悟吧
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<deque>
#include<map>
#include<queue>
#include<cstdlib>
using namespace std;
typedef long long INT;
const int maxn = ;
INT f[][],ans,visit[],que[maxn+];
INT judge(int *A)
{
INT sum = ;
for(int i = ;i <= ;++i)
for(int j = i+;j <= ;++j)
sum += f[A[j]][A[i]];
return sum;
}
void dfs(int* A,int deep)
{
if(deep > )
{
ans = min(ans,judge(A));
}
for(int i = ;i <= ;++i)
if(!visit[i])
{
visit[i] = ;
A[deep] = i;
dfs(A,deep+);
visit[i] = ;
}
} int main()
{
int n,A[]; while(scanf("%d",&n)!=EOF)
{
for(int i = ;i < n;++i)
scanf("%lld",&que[i]);
INT e[];
memset(e,,sizeof(e));
memset(f,,sizeof(f));
for(int i = ;i < n;++i)
{
for(int j = ;j <= ;++j)
f[j][que[i]] += e[j];
e[que[i]]++;
}
for(int i = ;i <= ;++i)
f[i][i] = ;
ans = 0x7ffffffffff;
memset(visit,,sizeof(visit));
dfs(A,);
printf("%lld\n",ans);
}
return ;
}
华中邀请赛现场赛F题 Seats的更多相关文章
- 2014西安现场赛F题 UVALA 7040
地址 题意:求在m种颜色中挑选k种颜色,给n个花朵涂色有几种方法. 分析:画图可以发现,基本的公式就是k ×(k-1)^(n-1).但这仅保证了相邻颜色不同,总颜色数不超过k种,并没有保证恰好出现k种 ...
- codeforces 100548F (西安现场赛F题):容斥原理
题目大意: 对n个排成一排的物品涂色,有m种颜色可选. 要求相邻的物品颜色不相同,且总共恰好有K种颜色,问所有可行的方案数 分析: 从m种颜色中选出k种,有c(m,k)种方法,那么我们只用考虑 k种颜 ...
- CF GYM100548 (相邻格子颜色不同的方案数 2014西安现场赛F题 容斥原理)
n个格子排成一行,有m种颜色,问用恰好k种颜色进行染色,使得相邻格子颜色不同的方案数. integers n, m, k (1 ≤n, m ≤ 10^9, 1 ≤ k ≤ 10^6, k ≤ n, m ...
- 19秦皇岛现场赛F题 dfs
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6736 如果环的边长为k,那么环的删边方案数是2k-1.如果链的边长为k,那么链的删边方案数是2k.环的 ...
- 2013杭州现场赛B题-Rabbit Kingdom
杭州现场赛的题.BFS+DFS #include <iostream> #include<cstdio> #include<cstring> #define inf ...
- 2013年山东省赛F题 Mountain Subsequences
2013年山东省赛F题 Mountain Subsequences先说n^2做法,从第1个,(假设当前是第i个)到第i-1个位置上哪些比第i位的小,那也就意味着a[i]可以接在它后面,f1[i]表示从 ...
- ACM-ICPC 2019南昌网络赛F题 Megumi With String
ACM-ICPC 南昌网络赛F题 Megumi With String 题目描述 给一个长度为\(l\)的字符串\(S\),和关于\(x\)的\(k\)次多项式\(G[x]\).当一个字符串\(str ...
- Gym101981D - 2018ACM-ICPC南京现场赛D题 Country Meow
2018ACM-ICPC南京现场赛D题-Country Meow Problem D. Country Meow Input file: standard input Output file: sta ...
- HDU 4800/zoj 3735 Josephina and RPG 2013 长沙现场赛J题
第一年参加现场赛,比赛的时候就A了这一道,基本全场都A的签到题竟然A不出来,结果题目重现的时候1A,好受打击 ORZ..... 题目链接:http://acm.hdu.edu.cn/showprobl ...
随机推荐
- 深度学习目标检测综述推荐之 Xiaogang Wang ISBA 2015
一.INTRODUCTION部分 (1)先根据时间轴讲了历史 (2)常见的基础模型 (3)讲了深度学习的优势 那就是feature learning,而不用人工划分的feature engineeri ...
- java锁经典示例——卖车票场景
场景:20张车票 3个窗口同时售票 1.不加锁 package com.yao.lock; /** * 不加锁的情况 */ public class Runnable_demo implements ...
- ejabberd在windows10上安装记录
安装完ejabberd:ejabberd-17.11-windows-installer.exe 启动报错:bash ejabberdctl register "admin" &q ...
- Activiti的ACT_GE_PROPERTY表初始化
create table ACT_GE_PROPERTY ( NAME_ ), VALUE_ ), REV_ integer, primary key (NAME_) ) ENGINE=InnoDB ...
- 【华为机试】—— 15.求int型正整数在内存中存储时1的个数
题目 解法 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner ...
- Java之File类详解
常用操作: File f = new File("C:\\testdata\\filedir\\a\\b\\c"); f.mkdir(); //建立单级目录 f.mkdirs(); ...
- Pycharm+Python+PyQt5使用
https://www.cnblogs.com/dalanjing/p/6978373.html
- binlog2sql闪回恢复数据
用途: .数据快速回滚 .从binlog生成标准sql 使用限制: .必须设置binlog_format=ROW .binlog_row_image=full,该参数默认为FULL .恢复用户拥有的最 ...
- java 枚举 封装操作方法
前言: 由于刚转java项目,所以对于java语言比较陌生,尤其是lambda和一些诸如(一个java文件只能有一个public class)等等的零散知识点之类... 使我觉得就语言的层级来说..n ...
- 洛谷P3613 睡觉困难综合征(LCT,贪心)
洛谷题目传送门 膜拜神犇出题人管理员!!膜拜yler和ZSY!! 没错yler连续教我这个蒟蒻写起床困难综合症和睡觉困难综合症%%%Orz,所以按位贪心的思路可以继承下来 这里最好还是写树剖吧,不过我 ...