设为首页 加入收藏

TOP

uva 11330 - Andy's Shoes(置换)
2015-07-20 17:55:13 】 浏览:7406
Tags:uva 11330 Andy' Shoes 置换

题目链接:uva 11330 - Andy's Shoes

题目大意:小andy有很多鞋,穿完到处丢,后来他把所有鞋都放回鞋架排成一排,保证了鞋的左右交替,但是颜色混了。问说他至少移动多少次可以将鞋分类好。

解题思路:对应奇数位置为左鞋,偶数位置为右鞋,一双鞋只有一只左鞋和一只右鞋,保证不换左变鞋子,以左鞋的位置为基准换右边鞋子,对应右边鞋子的位置即为一个置换,将置换的循环分解为x个互不相干的循环,ans=n-x

#include 
   
     #include 
    
      #include 
     
       using namespace std; const int maxn = 1e4+5; int n, pos[maxn], v[maxn], arr[maxn]; int solve () { int ret = 0; memset(v, 0, sizeof(v)); for (int i = 0; i < n; i++) { if (v[i]) continue; ret++; int mv = i; while (v[mv] == 0) { v[mv] = 1; mv = arr[mv]; } } return ret; } int main () { int cas, x; scanf("%d", &cas); while (cas--) { scanf("%d", &n); for (int i = 0; i < 2 * n; i++) { if (i&1) scanf("%d", &arr[i/2]); else { scanf("%d", &x); pos[x] = i/2; } } for (int i = 0; i < n; i++) arr[i] = pos[arr[i]]; printf("%d\n", n - solve()); } return 0; }
     
    
   
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇POj 1753--Flip Game--位运算+BFS 下一篇HDU 3001 Travelling (三进制状..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目