題目鏈接:https://nanti.jisuanke.com/t/366

題意:中文題誒~

思路: 先通過給出的條件構造一個符合題意的數組(可以是任意一個符合條件的數組,菜雞不會證明;

然後構造的數組和初始序列1, 2, 3, 4...n最少不同元素的個數就是答案;

這點是比較好理解的:題目中給出的b1, b2, ...bm可以是不連續的, 那麼如果每次選擇的m個與初始序列不同位置的元素並且通過一次操作後可以到達初始序列所在位置;

那麼所需代價肯定是最小的,總代價即爲位置不同的元素的數目. 所有情況都可以分解爲m爲 2 或 3的情況的組合,而對於m爲2, 3的情況前面所述顯然是正確的;

那麼剩下的問題就是求目標序列和構造序列最少多少個元素不同了,注意這裏的序列是循環序列;

對於循環序列, 並不確定其開頭元素是那個,枚舉其開頭元素的話,時間復雜度爲O(n^2), 顯然會tle;事實上也並不需要那樣做,可以先求最多有多少個元素與初始序列位置相同;

再用n減一下即可. 注意這裏的初始序列是一個特殊的序列,爲1, 2, 3, 4...n, 那麼可以用(a[i]-i+n)%n表示其相對序列,相對序列號相同的元素一定存在某個開頭元素使其位置與

初始序列是相同的, 所以只要找出最多的相對序列號相同的元素數目即爲對多與初始序列位置相同的元素的個數;

注意還要逆時針再計算一邊相對序列號相同的最多元素數目;

代碼:

 #include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std; const int MAXN=5e4+;
int a[MAXN], vis[MAXN];
struct node{
int f, s;
}gg[MAXN]; int main(void){
int n;
scanf("%d", &n);
for(int i=; i<=n; i++){
scanf("%d%d", &gg[i].f, &gg[i].s);
}
a[]=;
vis[]=true;
int indx=, cnt=;
while(){//構造序列
int cc=gg[cnt].f;
if(vis[cc]){
cc=gg[cnt].s;
if(vis[cc]) break;
}
vis[cc]=true;
a[++indx]=cc;
cnt=cc;
}
if(indx<n){
cout << - << endl;
return ;
}
indx=;
while(indx<n){//變成下標從0開始,便宜後面計算
a[indx]=a[indx+];
indx++;
}
memset(vis, , sizeof(vis));
int cc=;
for(int i=; i<n; i++){//順時針計算相對序號
int temp=(n+a[i]-i)%n;
vis[temp]++;
}
for(int i=; i<n; i++){
cc=max(cc, vis[i]);
}
memset(vis, , sizeof(vis));
for(int i=; i<n; i++){//逆時針計算相對序號
int temp=(n+a[n--i]-i)%n;
vis[temp]++;
}
for(int i=; i<n; i++){
cc=max(cc, vis[i]);
}
printf("%d\n", n-cc);
return ;
}

計蒜客/小教官(xjb)的更多相关文章

  1. 計蒜客/數正方形(dp)

    題目鏈接:https://nanti.jisuanke.com/t/44 題意:中文題誒~ 思路: 用dp[i][j]存儲以(i, j)爲左上定點的最大正方形變長,從右下角網左上角一次計算所有頂點: ...

  2. 计蒜客的一道题dfs

    这是我无聊时在计蒜客发现的一道题. 题意: 蒜头君有一天闲来无事和小萌一起玩游戏,游戏的内容是这样的:他们不知道从哪里找到了N根不同长度的木棍, 看谁能猜出这些木棍一共能拼出多少个不同的不等边三角形. ...

  3. 计蒜客模拟赛5 D2T1 成绩统计

    又到了一年一度的新生入学季了,清华和北大的计算机系同学都参加了同一场开学考试(因为两校兄弟情谊深厚嘛,来一场联考还是很正常的). 不幸的是,正当老师要统计大家的成绩时,世界上的所有计算机全部瘫痪了. ...

  4. 计蒜客:Entertainment Box

    Ada, Bertrand and Charles often argue over which TV shows to watch, and to avoid some of their fight ...

  5. 计蒜客 31436 - 提高水平 - [状压DP]

    题目链接:https://nanti.jisuanke.com/t/31436 作为一名车手,为了提高自身的姿势水平,平时的练习是必不可少的.小 J 每天的训练包含 $N$ 个训练项目,他会按照某个顺 ...

  6. 计蒜客 31434 - 广场车神 - [DP+前缀和]

    题目链接:https://nanti.jisuanke.com/t/31434 小 D 是一位著名的车手,他热衷于在广场上飙车.每年儿童节过后,小 D 都会在广场上举行一场别样的车技大赛. 小 D 所 ...

  7. 计蒜客 28449.算个欧拉函数给大家助助兴-大数的因子个数 (HDU5649.DZY Loves Sorting) ( ACM训练联盟周赛 G)

    ACM训练联盟周赛 这一场有几个数据结构的题,但是自己太菜,不会树套树,带插入的区间第K小-替罪羊套函数式线段树, 先立个flag,BZOJ3065: 带插入区间K小值 计蒜客 Zeratul与Xor ...

  8. 运用NP求解 “跳跃游戏”---计蒜客

    计蒜客里面有一道“跳跃游戏的问题” 给定一个非负整数数组,假定你的初始位置为数组第一个下标. 数组中的每个元素代表你在那个位置能够跳跃的最大长度. 你的目标是到达最后一个下标,并且使用最少的跳跃次数. ...

  9. [计蒜客] 矿石采集【记搜、Tarjan缩点+期望Dp】

    Online Judge:计蒜客信息学3月提高组模拟赛 Label:记搜,TarJan缩点,树状数组,期望Dp 题解 整个题目由毫无关联的两个问题组合成: part1 问题:对于每个询问的起点终点,求 ...

随机推荐

  1. Package template (html/template) ... Types HTML, JS, URL, and others from content.go can carry safe content that is exempted from escaping. ... (*Template) Funcs ..

    https://godoc.org/text/template GoDoc Home About Go: text/templateIndex | Examples | Files | Directo ...

  2. Activity和ListActivity的区别

    http://book.51cto.com/art/201007/212051.htm

  3. C++编程规范纲要要点小结

    这是一本好书, 可以让你认清自己对C++的掌握程度. 看完之后,给自己打分,我对C++了解多少? 答案是不足20分. 对于我自己是理所当然的问题, 就不提了, 记一些有启发的条目和细节: (*号表示不 ...

  4. Apple 企业开发者账号&邓白氏码申请记录 ----转

    1.账号分类 Apple开发者账号分三种,个人,公司,还有企业.个人和公司都称为标准账号. 还有一种是教育机构的账号. 现在记录先: 申请日期2013年4月26 看申请周期有多长. 账号介绍 个人和公 ...

  5. 对于iPhone描述文件的签名认证

    1.购买SSL证书验证(跟https认证一样) 2.iphone 签名.mobileconfig文件 company.mobileconfig 未签名的mobileconfig文件 server.cr ...

  6. ubuntu12.04不能记住上次编辑位置的解决方案

    1:按照网上的代码 au BufReadPost * |if line("'\"") <= line("$")|exe("norm ' ...

  7. valid No such filter: 'drawtext'"

    libfreetype is missing. You'll have to rebuild FFmpeg with this library or disable overlays. --enabl ...

  8. linux应用之mysql数据库指定版本的yum安装(centos)

    A Quick Guide to Using the MySQL Yum Repository Abstract The MySQL Yum repository provides RPM packa ...

  9. BigDecimal 实际测试结果

    package com.zzzy; import java.math.BigDecimal; public class Test { public static void main(String[] ...

  10. IntelliJ IDEA 2018 设置代码提示对大小写不敏感

    setting->Editor->General->Code Completion取消勾选Match case