Codeforces Round #516 (Div. 1, by Moscow Team Olympiad) E
Posted rrsb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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]:‘.‘); }
以上是关于Codeforces Round #516 (Div. 1, by Moscow Team Olympiad) E的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #516 (Div. 2&&Div.1)
Codeforces Round #516 (Div. 2, by Moscow Team Olympiad)
Codeforces Round #516 (Div. 1) 题解
[Codeforces Round #516][Codeforces 1063B/1064D. Labyrinth]