题目很好很有意思。

告诉你n个序列中,任意一个连续子序列的和与0相比较的结果。

构造一个满足条件的序列。

对于从x->y这一段的和,如果大于0,那么sum[x]>sum[y-1],显然我们可以得到每一个sum的大小关系。由于这个满足条件的sum关系已经考虑了所有的源系列的大小关系,所以只要我们生成了一个满足条件的sum序列能够满足其大小关系,那么a[i]=sum[i]-sum[i-1]就一定是满足条件的。

根据拓扑排序我们可以知道每一个sum之间的大小关系,中间包含于sum[0]=0的大小关系,我们只要依次按照大小一个一个往里面填数字就好了。

召唤代码君:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std; int a[][],d[],eq[],Q[],top,totdone,tmp,father;
int f[];
bool vis[];
int n,T;
char s[]; int main()
{
int cur;
scanf("%d",&T);
while (T--)
{
memset(a,,sizeof a);
memset(d,,sizeof d);
scanf("%d",&n);
for (int i=; i<=n; i++) eq[i]=-,vis[i]=false;
scanf("%s",s);
cur=;
for (int i=; i<=n; i++)
for (int j=i; j<=n; j++,cur++)
{
if (s[cur]=='+')
{
a[i-][j]=;
d[j]++;
}
else if (s[cur]=='-')
{
a[j][i-]=;
d[i-]++;
}
}
top=totdone=;
while (totdone<n+)
{
tmp=;
for (int i=; i<=n; i++)
if (!vis[i] && d[i]<tmp) tmp=d[i]; queue<int> que;
for (int i=; i<=n; i++)
if (!vis[i] && d[i]==tmp) que.push(i); father=-;
while (!que.empty())
{
int i=que.front();
que.pop();
vis[i]=true;
totdone++;
if (father==-) { father=i,Q[++top]=i; }
else eq[i]=father;
for (int j=; j<=n; j++)
if (a[i][j]) d[j]--;
}
}
for (int i=; i<=top; i++)
if (Q[i]==)
{
tmp=i;
break;
}
if (eq[]!=-)
for (int i=; i<=n; i++)
if (Q[i]==eq[]) tmp=i;
cur=;
for (int i=tmp+; i<=top; i++) f[Q[i]]=cur++;
cur=-;
for (int i=tmp-; i>; i--) f[Q[i]]=cur--;
for (int i=; i<=n; i++)
if (eq[i]!=-) f[i]=f[eq[i]];
for (int i=; i<=n; i++)
{
printf("%d",f[i]-f[i-]);
if (i<n) printf(" ");
}
printf("\n");
}
return ;
}

最新文章

  1. CentOS On VirtualBox
  2. session的安全性
  3. ICML历年Best Papers
  4. 编写高质量代码改善C#程序的157个建议[协变和逆变]
  5. BZOJ 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式
  6. JS 不定函数参数argument的用法
  7. Django模板-模板标签
  8. hdu3530Subsequence rmq
  9. Java面试05|MySQL及InnoDB引擎
  10. c# 实现mysql事务
  11. Mysql中外键的 Cascade ,NO ACTION ,Restrict ,SET NULL
  12. 关于Exceptionless的使用注意
  13. Linux基础篇
  14. PyTorch in Action: A Step by Step Tutorial
  15. 把一个对象转成map对象
  16. MySql常用命令集Mysql常用命令5
  17. Mongodb学习笔记(2)--修改器
  18. Vuejs 使用 lib 库模式打包 umd 解决 NPM 包发布的问题
  19. 【python】爬虫实践
  20. 搞清tomcat中的编解码

热门文章

  1. python的变量的命名规则以及定义
  2. grads,fortran,ncl二进制文件
  3. hdu1232畅通工程(并查集,简单题)
  4. Jmeter介绍1
  5. Caffe Blob针对图像数据在内存中的组织方式
  6. FFM原理及公式推导
  7. 高可用OpenStack(Queen版)集群-15.Glance&amp;Cinder集成Ceph
  8. Gaussian Models
  9. Tomcat分析
  10. mongoose和mongodb的几篇文章 (ObjectId,ref)