• UVALive 6832 Bit String Reordering 贪心


    训练做到了去年校内省选题

    唉 当时就剩10分钟这道题做不完了

    现在再写几分钟就写完了

    希望今年的沈阳顺利吧

    (安稳退役?

     1 #include<bits/stdc++.h>
     2 #define cl(a,b) memset(a,b,sizeof(a))
     3 #define debug(a) cerr<<#a<<"=="<<a<<endl
     4 using namespace std;
     5 typedef long long ll;
     6 typedef pair<int,int> pii;
     7 
     8 const int maxn=1e5+10;
     9 
    10 bool solve(vector<int> b,vector<int> tmp,int &ans)
    11 {
    12     for(int i=0; i<b.size(); i++)
    13     {
    14         if(b[i]!=tmp[i])
    15         {
    16             int loc=0;
    17             for(int j=i+1; j<tmp.size(); j++)
    18             {
    19                 if(b[j]!=tmp[j]&&b[i]!=b[j])
    20                 {
    21                     loc=j;
    22                     break;
    23                 }
    24             }
    25             ans+=(loc-i);
    26             swap(b[i],b[loc]);
    27         }
    28     }
    29 //    debug(ans);
    30     if(b==tmp) return true;
    31     else return false;
    32 }
    33 
    34 void change(vector<int> p,vector<int> &tmp,int now)
    35 {
    36     for(auto i:p)
    37     {
    38         int t=i;
    39         while(t--) tmp.push_back(now);
    40         if(now==1) now=0;
    41         else now=1;
    42     }
    43 //    for(auto i:tmp)
    44 //    {
    45 //        printf("%d ",i);
    46 //    }
    47 //    printf("
    ");
    48 }
    49 
    50 int main()
    51 {
    52     int n,m;
    53     while(~scanf("%d%d",&n,&m))
    54     {
    55         vector<int>b(n,0);
    56         vector<int>p(m,0);
    57         for(auto& i:b)
    58         {
    59             scanf("%d",&i);
    60         }
    61         for(auto& i:p)
    62         {
    63             scanf("%d",&i);
    64         }
    65         vector<int>tmp1,tmp2;
    66         tmp1.clear();
    67         tmp2.clear();
    68         change(p,tmp1,1);
    69         change(p,tmp2,0);
    70         int ans=10000000,ans1=0,ans2=0;
    71         if(solve(b,tmp1,ans1)) ans=min(ans,ans1);
    72         if(solve(b,tmp2,ans2)) ans=min(ans,ans2);
    73         printf("%d
    ",ans);
    74     }
    75     return 0;
    76 }/*
    77 
    78 6 3
    79 1 0 0 1 0 1
    80 1 3 2
    81 7 2
    82 1 1 1 0 0 0 0
    83 4 3
    84 15 14
    85 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
    86 1 1 1 1 1 1 1 1 1 1 1 1 1 2
    87 1 1
    88 0
    89 1
    90 
    91 */
  • 相关阅读:
    【c/c++】#pragma的用法
    【c/c++】#pragma的用法
    【matlab】matlab中 mcc、mbuild和mex命令详解
    【codecs】数据流ES、PES、TS、PS简介
    【codecs】数据流ES、PES、TS、PS简介
    【SVAC】SVAC标准简介
    【python】Python实现SMTP发送邮件
    【c】#pragma once 与#ifndef的区别与作用
    【c】#pragma once 与#ifndef的区别与作用
    【Tools/PC】如何在一台电脑上实现双屏幕显示?
  • 原文地址:https://www.cnblogs.com/general10/p/7632931.html
Copyright © 2020-2023  润新知