设这个序列的前缀和为Si(0 <= i <= n),S0 = 0

每一个符号对应两个前缀和的大小关系,然后根据这个关系拓扑排序一下。

还要注意一下前缀和相等的情况,所以用一个并查集来查询。

 #include <cstdio>
#include <cstring> const int maxn = ;
int n;
int G[maxn][maxn];
char s[];
int sum[maxn], a[maxn]; int topo[maxn], c[maxn], t; void dfs(int u)
{
c[u] = ;
for(int v = ; v <= n; v++) if(G[u][v] && !c[v]) dfs(v);
topo[--t] = u;
} void toposort()
{
t = n + ;
memset(c, , sizeof(c));
for(int u = ; u <= n; u++) if(!c[u]) dfs(u);
} int p[maxn];
int find(int x)
{ return x == p[x] ? x : p[x] = find(p[x]); } void link(int x, int y)
{
int px = find(x), py = find(y);
if(px != py) p[px] = py;
} int main()
{
//freopen("in.txt", "r", stdin); int T; scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
scanf("%s", s); for(int i = ; i <= n; i++) p[i] = i; memset(G, , sizeof(G));
int p = ;
for(int i = ; i <= n; i++)
for(int j = i; j <= n; j++)
{
if(s[p] == '+') G[i-][j]++;
if(s[p] == '-') G[j][i-]++;
if(s[p] == '') link(i-, j);
p++;
}
toposort();
for(p = ; p <= n; p++) if(topo[p] == ) break;
s[] = ; for(int i = p + ; i <= n; i++)
{
int s1 = topo[i], s2 = topo[i-];
if(find(s1) == find(s2)) sum[s1] = sum[s2]; //前缀和相等
else sum[s1] = sum[s2] + ;
}
for(int i = p - ; i >= ; i--)
{
int s1 = topo[i], s2 = topo[i+];
if(find(s1) == find(s2)) sum[s1] = sum[s2];
else sum[s1] = sum[s2] - ;
}
for(int i = ; i <= n; i++)
{
if(i > ) printf(" ");
printf("%d", sum[i] - sum[i - ]);
}
puts("");
} return ;
}

代码君

最新文章

  1. maven常用插件: 打包源码 / 跳过测试 / 单独打包依赖项
  2. ACM-ICPC竞赛模板
  3. Matlab与C/C++联合编程之Matlab以MEX方式调用C/C++代码(二)
  4. android定时三种方式
  5. 学学Whatsapp,如何让自己挣160亿美金,然后退休?开发个J2ME应用。
  6. Struts2框架具体解释
  7. LightOj 1148 Basic Math
  8. zabbix 实现curl 显示器
  9. HDU1518:Square(DFS)
  10. mysql 时间戳格式化函数FROM_UNIXTIME和UNIX_TIMESTAMP函数的使用说明
  11. c语言的字符串
  12. ubantu/centos修改系统时间
  13. Python11
  14. Vs10.设置.高亮(20190327)
  15. [luogu P3648] [APIO2014]序列分割
  16. NGINX的几个应用场景
  17. sql 按字段指定值排序
  18. powerdesiner技巧
  19. mysql++ Query
  20. C#.NET常见问题(FAQ)-Combobox如何设置不可以编辑

热门文章

  1. hadoop-ha QJM架构应用故障总结
  2. 在Delphi中实现动画窗口
  3. 判断一个字符串在至多删除k个字符后是否为回文串
  4. GridControl的列显示成图片+文字,并且不同的文字对应不同的图片
  5. 网站建设底层知识Socket与Http解析
  6. python编写规范
  7. http://jingyan.baidu.com/article/d169e186b38c37436611d8fa.html
  8. hdu2024C语言合法标识符
  9. 浅析C/C++ library
  10. 刷机(手机自带的recovery)