题目很好很有意思。

告诉你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 ;
}

UVAlive4255_Guess的更多相关文章

随机推荐

  1. python并发编程之多进程理论知识

    一 什么是进程 进程:正在进行的一个过程或者说一个任务.而负责执行任务则是cpu. 举例(单核+多道,实现多个进程的并发执行): egon在一个时间段内有很多任务要做:python备课的任务,写书的任 ...

  2. 用 Python 给程序加个进度条,让你的看起来更炫酷?

    对于开发或者运维来说,使用 Python 去完成一些跑批任务,或者做一些监控事件是非常正常的情况.那么如何有效地监控任务的进度?除了在任务中加上 Log 外,还能不能有另一种方式来了解任务进展到哪一步 ...

  3. UWP 滚动条私人定制

    最近突然发现微软自带的滚动条好挫哦 微软哒(棒棒哒) 网上找的(美美哒) 好了. 如果你想要棒棒哒,那么就不用往下看了(手动再见). 如果你想要美美哒,就需要下面的神秘代码. <Style Ta ...

  4. 从python容器中随机选取元素

    # 1.使用python random模块的choice方法随机选择某个元素 import random foo = ['a', 'b', 'c', 'd', 'e'] from random imp ...

  5. eclipse以MapReduce本地模式运行程序

    1.准备好所需的文件winutils.exe.hadoop-eclipse-plugin-2.7.3.jar.hadoop-common-2.2.0-bin-master.zip 下载路径:http: ...

  6. Paxos共识算法

    Paxos共识算法 paxos是一族用来解决分布式系统共识的基础算法,共识过程就是在一组节点上达成一个一致的结果.由于节点可能会错误,通讯消息也可能会丢失,所以建立共识是一个比较复杂的过程. paxo ...

  7. kali获得windows的shell后乱码

    输入 chcp 65001

  8. nginx之location(root/alias)

    location配置 1. 语法规则(按优先级) =        表示精确匹配,优先级最高 ^~      表示uri以某个常规字符串开头,用于匹配url路径(而且不对url做编码处理,例如请求/s ...

  9. Python 中的一些小技巧

    这里是本人收集的一些 Python 小技巧,目前主要是一些实用函数,适合有一定基础的童鞋观看(不会专门介绍使用到的标准库函数).. 一.函数式编程 函数式编程用来处理数据,感觉很方便.(要是再配上管道 ...

  10. Python爬虫框架Scrapy学习笔记原创

     字号 scrapy [TOC] 开始 scrapy安装 首先手动安装windows版本的Twisted https://www.lfd.uci.edu/~gohlke/pythonlibs/#twi ...