题解:P12426 [BalticOI 2025] BOI acronym
Solution
唯一的难点在于想到可以从左到右逐位确定每个数是否是
显然我们可以找到左边和右边第一个
我们在
我们已经确定了
- 如果
\texttt B 在[l,p) 中作为众数出现。
即
- 如果
\texttt B 在(p,r] 中作为众数出现。
发现充分条件就是
- 如果
\texttt B 在[l,p) 中不是众数,在(p,r] 中也不是众数。
显然
把三个充分条件拼一起就是充要条件。
放一个主播写的
#include<iostream>
#define F(i,a,b) for(int i=a;i<=b;i++)
#define y (a[1][n]-x)
using namespace std;int n,x=1,l=1,a[2001][2001];int main(){cin>>n;F(l,1,n)F(r,l,n)cin>>a[l][r];while(a[1][n]==a[l+1][n])++l;while(a[1][n]==a[l][n-1])--n;if(l!=n)cout<<l<<' ';F(i,l+1,n-1)if(a[l][i]-x&a[l+1][i]==x|a[i+1][n]<y|a[i][n]==a[i+1][n-1]&a[l][i]==a[l][i-1]&a[l][i-1]>x)cout<<i<<' ',++x;cout<<n;}