Manthan 2011 A. Partial Teacher 拓扑排序or直接数组处理

来源:互联网 发布:阿卡索真实评价知乎 编辑:程序博客网 时间:2024/06/03 23:39
链接:现告诉你n个从左到右依次排列的数字之间的大小关系,要求你求出这些数值(尽可能小);
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
using namespace std;
char s[100005];
int ans[100005];
int main()
{
int n;
while(~scanf("%d",&n))
{
scanf
("%s",s+1);
for(int i=1;i<=n;i++)
{
int l=i-1,r=i,dl=1,dr=1;
while(s[l]!='L'&&l>=1)
if(s[l]=='R')
{l--;dl++;}
else if(s[l]=='=')
l
--;
while(s[r]!='R'&&r<=n-1)
if(s[r]=='L')
{r++;dr++;}
else if(s[r]=='=')
r
++;
ans
[i]=max(dl,dr);
}
for(int i=1;i<=n;i++) printf("%d ",ans[i]);
printf
("\n");
}
return 0;
}
分析:直接把每个顶点当作峰顶,向两边推移,取最大的就可以了,当然也可以缩点(缩进之间=的点)然后
拓扑排序就可以了