• Codeforces Round #516 (Div. 1, by Moscow Team Olympiad) E


    Description

      给一个排列,要求每个激光打到指定的接受器上,最大化这个数量,你的手段只有在n*n的位置上放平面镜。

    Sol

      我们发现一行要么只放‘/’要么只放‘’,又发现answer=n||answer=n-1,这可以倒着合并。

    Description

    #include<bits/stdc++.h>
    #define N 1006
    using namespace std;
    int n,a[N],last;
    char ans[N][N];
    signed main () {
        scanf("%d",&n);
        for (int i=1;i<=n;i++) {
         scanf("%d",a+i); 
         if (a[i]!=i) last=i; }
        if (last) {
            char x='/', y='\';
            for(int i=n;i;--i){
                int p=0;
                if(x=='/'){for(int j=1;j<last;++j) if(a[j]!=j){ p=j; break;} }
                else for(int j=n;j>last;--j) if(a[j]!=j){ p=j; break;}
                if(!p) break;
                ans[i][p]=ans[i][last]=ans[i][a[p]]=x;
                a[last]=a[a[p]], a[a[p]]=a[p], last=p;
                swap(x,y);
                cerr<<last<<endl;
            }
        }
        printf("%d
    ",n-(!!last));
        for(int i=1; i<=n; ++i, puts("")) for(int j=1; j<=n; ++j) putchar(ans[i][j]?ans[i][j]:'.');
    }
  • 相关阅读:
    KMP算法
    Python 正则表达式
    Python 装饰器
    C/C++ 之输入输出
    PAT(Basic Level)--个位数统计
    Java 接口与抽象类
    Java集合-01概述
    数据结构--红黑树
    数据结构--(AVL)平衡二叉树
    数据结构--二叉搜索树
  • 原文地址:https://www.cnblogs.com/rrsb/p/9807297.html
Copyright © 2020-2023  润新知