• B. Fixed Points


    题目链接:http://codeforces.com/problemset/problem/347/B

    题意:

    给你一个 0 ~ n-1 的全排列,可以交换两个数的位置一次,问最多能有多少个数与自己所在的位置对应

    思路:

    注意它给的是0->n-1的全排列,这个非常特别,因为0 的话就应该在0号位置,1就应该在1号位置

    所以如果他在正确的位置那么我们就不用管它,如果它不在我们就采取贪心的策略:这个数应该在的那个位置的数应该在的位置是不是就是这个数现在在的位置呢?

    如果发现不存在这种完美的策略,那么最后随便换一个就好了

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 #include <set>
     6 #include <vector>
     7  
     8 using namespace std;
     9 const int maxn= 1e5 + 10;
    10  
    11  
    12 struct Node{
    13     int val;
    14     int id;
    15 }node[maxn];
    16  
    17  
    18 int main(){
    19     int n;
    20     scanf("%d",&n);
    21     for (int i=0;i<n;i++){
    22         scanf("%d",&node[i].val);
    23         node[i].id = i;
    24     }
    25     int cnt = 0;
    26     bool flag = true;
    27     for (int i=0;i<n;i++){
    28         if (node[node[i].val].id == i){
    29             cnt++;
    30         }
    31         if (node[node[i].val].id != i && node[node[node[node[i].val].id].val].id == i && flag){
    32             cnt += 2;
    33             flag = false;
    34         }
    35     }
    36     if (cnt >= n){
    37         printf("%d
    ",cnt);
    38     }
    39     else if (flag)
    40         printf("%d
    ",++cnt);
    41     else
    42         printf("%d
    ",cnt);
    43 }
  • 相关阅读:
    bean的singleton(没有看到生命周期范围??)
    ApplicationContext中getBean详解
    mybatis基础之二
    mybatis基础之一
    JDOM读取xml
    SSH整合最简单的一个例子
    基础学习问题
    2015年2.9--2.15号第一周计划
    freertos的钩子函数
    IAR环境搭建注意点
  • 原文地址:https://www.cnblogs.com/-Ackerman/p/11371039.html
Copyright © 2020-2023  润新知