K. Keep In Line
又到饭点了,SK同学靠着惯性走到了食堂,但长长的队伍顿时让他失去了食欲。突然,他注意到某个窗口前的队伍里明显存在插队的现象,于是他默默记录下了同学们进队和出队的变化。
对于进队,SK同学只知道队伍里多了一个人,并不知道新来的人是老老实实站到了队尾还是插到了队伍里的某个位置;对于出队,SK同学能确定是队伍里站在最前面的人出队了。
初始时队伍为空,给出条队伍进出的信息,保证已经出队的同学不会再入队,并且最终队伍也为空,现在SK同学想知道有多少不插队的好同学。
Input
第一行是一个正整数,表示测试数据的组数,
对于每组测试数据,
第一行是一个整数,表示这个队伍进出的信息数,
接下来行,每行是两个字符串Opt Name,其中Opt为"in"代表进队,"out"代表出队,Name为进队或出队的人的名字,
所有信息按照时间顺序给出,名字由英文字母和阿拉伯数字组成,长度不超过,保证每个人的名字各不相同。
Output
对于每组测试数据,输出一行,包含一个整数,表示不插队的人数。
Sample Input
1 6 in quailty in hwq1352249 out hwq1352249 in zhuaiballl out quailty out zhuaiballl
Sample Output
// >File Name: bnuK.cpp
// > Author: Webwei
#include<bits/stdc++.h>
using namespace std;
int n,T,sum=0;
int main()
{
cin>>T;
while(T--){
cin>>n;
sum=0;
map<int,string> q;
map<string,int> p;
for(int i=0;i<n;i++){
string opt,name;
cin>>opt>>name;
if(opt=="in"){
q.emplace(i,name);
p.emplace(name,i);
}
else{
if(name==q.begin()->second) sum++;
q.erase(p[name]);
}
}
cout<<sum<<endl;
}
return 0;
}
D. Disdain Chain
BNU ACM校队现在有名队员,对于任意两名队员和,要么鄙视,要么鄙视,需要注意的是鄙视关系并不满足传递性,即使鄙视、鄙视,也并不意味着一定有鄙视。小Q同学认为,如果有名不同的队员满足鄙视、鄙视、……、鄙视,那么这就是一条长度为的鄙视链。显然鄙视链越长越不利于团队建设,小Q同学希望你帮他分别算一算有多少种个人之间的鄙视关系满足最长的鄙视链的长度是。
Input
第一行是一个正整数,表示测试数据的组数,
每组测试数据包含一行,只有一个整数,表示校队的人数。
Output
对于每组测试数据,输出行,第行表示最长鄙视链是的鄙视关系的个数。
Sample Input
1 2
Sample Output
0 2
Hint
对于样例,在队伍只有名队员的情况下,无论谁鄙视谁,最长鄙视链的长度都是。
题意:分别计算有多少n个点的竞赛图满足最长链的长度是1,2,3,....,n。
题解
可以证明,竞赛图中,最长链的长度一定是n,如果竞赛图中的最长链长度是
n−1
,那么最后一个点无论怎么连边,都会被加入到最长链当中。
所以前n-1行输出0,最后一行输出
2n∗(n−1)2
即可。
// >File Name: bnu5.cpp
// > Author: Webwei
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--){
int n;
cin>>n;
for(int i=0;i<n-1;i++) cout<<"0\n";
int k=n*(n-1)/2;
cout<<(1<<k)<<"\n";
}
return 0;
}