Atcoder Beginner Contest 327
Hints
D
$\quad$这个定义……看起来这么熟悉?E
$\quad$固定 $k$ 试试?F_1
$\quad$扫描线?F_2
$\quad$区间加,区间 $\max$,咋维护?A
直接查找 \(\texttt{ab}\) 和 \(\texttt{ba}\) 即可。
int n;
string s;
void Solve(int CASE)
{
cin>>n>>s;
puts((~s.find("ab"))||(~s.find("ba"))?"Yes":"No");
}
B
\(16^{16}>10^{18}\implies a\le15\)。
ll n;
void Solve(int CASE)
{
cin>>n;
for(int i=1;i<=15;i++)
{
ll pw=1;
for(int j=1;j<=i;j++)pw*=i;
if(pw==n)put_ret(i);//put_ret 就是直接输出然后返回
}
cout<<-1;
}
C
玩过数独吗?
判一下每行每列每宫 \(1\sim9\) 是否都出现一次即可。
int c[10][10],r[10][10],g[10][10];
int G(int x,int y){return (x-1)/3*3+(y-1)/3+1;}
void Solve(int CASE)
{
for(int i=1;i<=9;i++)
for(int j=1;j<=9;j++)
{
int x;cin>>x;
r[i][x]++,c[j][x]++,g[G(i,j)][x]++;
}
for(int i=1;i<=9;i++)
for(int j=1;j<=9;j++)
if(c[i][j]!=1||r[i][j]!=1||g[i][j]!=1)put_ret("No");
cout<<"Yes";
}
D
观察这个 good 的定义,发现其实就是一个 \(n\) 个点的无向图,其中 \(s_i\) 和 \(t_i\) 连边,然后让你判断是否是个二分图。
const int N=200005;
int n,m;
VI g[N];
int col[N],X[N];
bool dfs(int x)
{
for(int y:g[x])
{
if(!~col[y])
{
col[y]=!col[x];
if(!dfs(y))return 0;
}
else if(col[y]==col[x])return 0;
}
return 1;
}
void Solve(int CASE)
{
cin>>n>>m;
for(int i=1;i<=m;i++)cin>>X[i];
for(int i=1;i<=m;i++)
{
int y;cin>>y;
g[X[i]].PB(y),g[y].PB(X[i]);
}
memset(col,-1,sizeof(col));
for(int i=1;i<=n;i++)
if(!~col[i])
{
if(!dfs(i))put_ret("No");
}
cout<<"Yes";
}
E
咕咕咕。
标签:CASE,Atcoder,return,Beginner,10,int,void,Contest,col From: https://www.cnblogs.com/No-play-Yes-splay/p/abc327-solution.html