2020年HZNU天梯训练赛 Round 5

2020年HZNU天梯训练赛 Round 5

时间:2020.7.21 19 180

完成情况:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

√ 当场做出来 ※做了一半来 ✘补题补出来

7-1 出生年 (15分)

img

以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的年份”这句话。

输入格式:

输入在一行中给出出生年份y和目标年份中不同数字的个数n,其中y在[1, 3000]之间,n可以是2、或3、或4。注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。

输出格式:

根据输入,输出x和能达到要求的年份。数字间以1个空格分隔,行首尾不得有多余空格。年份要按4位输出。注意:所谓“n个数字都不相同”是指不同的数字正好是n个。如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。

输入样例1:

1988 4

输出样例1:

25 2013

输入样例2:

1 2

输出样例2:

0 0001

注意数据范围

#include<bits/stdc++.h> 
using namespace std;
int main()
{
	int y,x;
	cin>>y>>x;
	for(int i=y;i<3100;i++)//这里范围很重要 3001会卡点 
	{
		int n=i;
		set<int>s;
		for(int j=0;j<4;j++){s.insert(n%10);n/=10;}
		if(s.size()==x){printf("%d %04d\n",i-y,i);break;}
	}
	return 0;
}

7-2 点赞 (20分)

微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特性。

输入格式:

输入在第一行给出一个正整数N(≤1000),是该用户点赞的博文数量。随后N行,每行给出一篇被其点赞的博文的特性描述,格式为“K F1⋯F**K”,其中1≤K≤10,F**ii=1,⋯,K)是特性标签的编号,我们将所有特性标签从1到1000编号。数字间以空格分隔。

输出格式:

统计所有被点赞的博文中最常出现的那个特性标签,在一行中输出它的编号和出现次数,数字间隔1个空格。如果有并列,则输出编号最大的那个。

输入样例:

4
3 889 233 2
5 100 3 233 2 73
4 3 73 889 2
2 233 123

输出样例:

233 3

数组下标计数

#include<bits/stdc++.h> 
using namespace std;
int main() 
{
    int n,k,x,maxx=0,maxn=0;
    cin>>n; 
    int a[1005] = {0};
    for(int i=0;i<n;i++) 
	{
        cin>>k;
        for(int j=0;j<k;j++) {cin>>x;a[x]++;}
    }
    for(int i=0;i<1001;i++) 
	{
        if (a[i]>=maxx) {maxx=a[i];maxn=i;}
    }
    cout<<maxn<<" "<<maxx;
    return 0;
}

7-3 情人节 (15分)

img

以上是朋友圈中一奇葩贴:“2月14情人节了,我决定造福大家。第2个赞和第14个赞的,我介绍你俩认识…………咱三吃饭…你俩请…”。现给出此贴下点赞的朋友名单,请你找出那两位要请客的倒霉蛋。

输入格式:

输入按照点赞的先后顺序给出不知道多少个点赞的人名,每个人名占一行,为不超过10个英文字母的非空单词,以回车结束。一个英文句点.标志输入的结束,这个符号不算在点赞名单里。

输出格式:

根据点赞情况在一行中输出结论:若存在第2个人A和第14个人B,则输出“A and B are inviting you to dinner...”;若只有A没有B,则输出“A is the only one for you...”;若连A都没有,则输出“Momo... No one is for you ...”。

输入样例1:

GaoXZh
Magi
Einst
Quark
LaoLao
FatMouse
ZhaShen
fantacy
latesum
SenSen
QuanQuan
whatever
whenever
Potaty
hahaha
.

输出样例1:

Magi and Potaty are inviting you to dinner...

输入样例2:

LaoLao
FatMouse
whoever
.

输出样例2:

FatMouse is the only one for you...

输入样例3:

LaoLao
.

输出样例3:

Momo... No one is for you ...
#include<bits/stdc++.h> 
using namespace std;
int main()
{
	string s,s1,s2;
	int i=0;
	//memset(s,0,sizeof(s));
	//memset(s1,0,sizeof(s1));
	//memset(s2,0,sizeof(s2));
	while(cin>>s)
	{
		if(s==".")break;
		if(i==1)s1=s;
		if(i==13)s2=s;
		i++;
	}
	//if(s1!='\0'&&s2!='\0'&&i>13)
	if(i>13)cout<<s1<<" and "<<s2<<" are inviting you to dinner...";
	else if(i>1)cout<<s1<<" is the only one for you...";
	else cout<<"Momo... No one is for you ...";
	return 0;
}
/*
#include<bits/stdc++.h> 
using namespace std;
int main()
{
	char s[10],s1[10],s2[10];
	int i=0;
	memset(s,0,sizeof(s));
	memset(s1,0,sizeof(s1));
	memset(s2,0,sizeof(s2));
	while(cin>>s)
	{
		if(s[0]=='.')break;
		if(i==1)
		{
			for(int j=0;j<strlen(s);j++)s1[j]=s[j];
		}
		if(i==13)
		{
			for(int j=0;j<strlen(s);j++)s2[j]=s[j];
		}
		i++;
	}
	//if(s1!='\0'&&s2!='\0'&&i>13)
	if(i>13)cout<<s1<<" and "<<s2<<" are inviting you to dinner...";
	else if(i>1)cout<<s1<<" is the only one for you...";
	else cout<<"Momo... No one is for you ...";
	return 0;
}
//您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起*/

7-4 A乘以B (5分)

看我没骗你吧 —— 这是一道你可以在10秒内完成的题:给定两个绝对值不超过100的整数AB,输出A乘以B的值。

输入格式:

输入在第一行给出两个整数AB(−100≤A,B≤100),数字间以空格分隔。

输出格式:

在一行中输出A乘以B的值。

输入样例:

-8 13

输出样例:

-104
#include<bits/stdc++.h> 
using namespace std;
int main()
{
	int a,b;
	cin>>a>>b;
	cout<<a*b;
	return 0;
}

7-5 A除以B (10分)

真的是简单题哈 —— 给定两个绝对值不超过100的整数AB,要求你按照“A/B=商”的格式输出结果。

输入格式:

输入在第一行给出两个整数AB(−100≤A,B≤100),数字间以空格分隔。

输出格式:

在一行中输出结果:如果分母是正数,则输出“A/B=商”;如果分母是负数,则要用括号把分母括起来输出;如果分母为零,则输出的商应为Error。输出的商应保留小数点后2位。

输入样例1:

-1 2

输出样例1:

-1/2=-0.50

输入样例2:

1 -3

输出样例2:

1/(-3)=-0.33

输入样例3:

5 0

输出样例3:

5/0=Error
#include<bits/stdc++.h> 
using namespace std;
int main()
{
	int a,b;
	cin>>a>>b;
	cout<<a<<"/";
	if(b<0)cout<<"("<<b<<")=";
	else if(b==0)
	{
		cout<<b<<"=Error";return 0;
	}
	else cout<<b<<"=";
	double ans=1.0*a/b;
	printf("%.2lf",ans);
	return 0;
}

7-6 新世界 (5分)

这道超级简单的题目没有任何输入。

你只需要在第一行中输出程序员钦定名言“Hello World”,并且在第二行中输出更新版的“Hello New World”就可以了。

Hello World
Hello New World

7-7 古风排版 (20分)

中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。

输入格式:

输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。

输出格式:

按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。

输入样例:

4
This is a test case

输出样例:

asa T
st ih
e tsi
 ce s
#include<bits/stdc++.h> 
using namespace std;
int main()
{
	int n,len,t,cnt;
	char s[1005],s2[105][1005];
	cin>>n;getchar();
	cin.getline(s,1005);
	t=(strlen(s)+n-1)/n;
	cnt=0;
	for(int i=t-1;i>=0;i--)
	{
 
		for(int j=0;j<n;j++)
		{
			if(cnt<strlen(s)) s2[j][i]=s[cnt++];
			else s2[j][i] = ' ';
		}
 
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<t;j++)cout<<s2[i][j];cout<<endl;
	}
	return 0;
}

7-8 最佳情侣身高差 (10分)

专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09 =(男方的身高)。如果符合,你俩的身高差不管是牵手、拥抱、接吻,都是最和谐的差度。

下面就请你写个程序,为任意一位用户计算他/她的情侣的最佳身高。

输入格式:

输入第一行给出正整数N(≤10),为前来查询的用户数。随后N行,每行按照“性别 身高”的格式给出前来查询的用户的性别和身高,其中“性别”为“F”表示女性、“M”表示男性;“身高”为区间 [1.0, 3.0] 之间的实数。

输出格式:

对每一个查询,在一行中为该用户计算出其情侣的最佳身高,保留小数点后2位。

输入样例:

2
M 1.75
F 1.8

输出样例:

1.61
1.96
#include<bits/stdc++.h> 
using namespace std;
int main()
{
	int n;
	double h;
	char s[3];
	cin>>n;
	while(n--)
	{
		scanf("%s %lf",s,&h);
		if(s[0]=='M') printf("%.2lf\n",h/1.09);
		else if(s[0]=='F') printf("%.2lf\n",h*1.09);
	} 
	return 0;

}

7-9 人以群分 (25分)

社交网络中我们给每个人定义了一个“活跃度”,现希望根据这个指标把人群分为两大类,即外向型(outgoing,即活跃度高的)和内向型(introverted,即活跃度低的)。要求两类人群的规模尽可能接近,而他们的总活跃度差距尽可能拉开。

输入格式:

输入第一行给出一个正整数N(2≤N≤105)。随后一行给出N个正整数,分别是每个人的活跃度,其间以空格分隔。题目保证这些数字以及它们的和都不会超过231。

输出格式:

按下列格式输出:

Outgoing #: N1
Introverted #: N2
Diff = N3

其中N1是外向型人的个数;N2是内向型人的个数;N3是两群人总活跃度之差的绝对值。

输入样例1:

10
23 8 10 99 46 2333 46 1 666 555

输出样例1:

Outgoing #: 5
Introverted #: 5
Diff = 3611

输入样例2:

13
110 79 218 69 3721 100 29 135 2 6 13 5188 85

输出样例2:

Outgoing #: 7
Introverted #: 6
Diff = 9359
#include<bits/stdc++.h>
using namespace std;
//总活跃度差距尽可能拉开
const int maxn=1e5+5;
int a[maxn];
int main()
{
    int n,m,cnt1=0,cnt2=0;
    cin>>n;
    for(int i=0;i<n;i++)cin>>a[i];
    sort(a,a+n);
    for(int i=0;i<n/2;i++)cnt1+=a[i];
    for(int i=n/2;i<n;i++)cnt2+=a[i];
    cout<<"Outgoing #: "<<(n+1)/2<<endl;
    cout<<"Introverted #: "<<n/2<<endl;
	cout<<"Diff = "<<cnt2-cnt1<<endl;
    return 0;
}

7-10 多项式A除以B (25分)

这仍然是一道关于A/B的题,只不过A和B都换成了多项式。你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数。

输入格式:

输入分两行,每行给出一个非零多项式,先给出A,再给出B。每行的格式如下:

N e[1] c[1] ... e[N] c[N]

其中N是该多项式非零项的个数,e[i]是第i个非零项的指数,c[i]是第i个非零项的系数。各项按照指数递减的顺序给出,保证所有指数是各不相同的非负整数,所有系数是非零整数,所有整数在整型范围内。

输出格式:

分两行先后输出商和余,输出格式与输入格式相同,输出的系数保留小数点后1位。同行数字间以1个空格分隔,行首尾不得有多余空格。注意:零多项式是一个特殊多项式,对应输出为0 0 0.0。但非零多项式不能输出零系数(包括舍入后为0.0)的项。在样例中,余多项式其实有常数项-1/27,但因其舍入后为0.0,故不输出。

输入样例:

4 4 1 2 -3 1 -1 0 -1
3 2 3 1 -2 0 1

输出样例:

3 2 0.3 1 0.2 0 -1.0
1 1 -3.1

7-11 悄悄关注 (25分)

新浪微博上有个“悄悄关注”,一个用户悄悄关注的人,不出现在这个用户的关注列表上,但系统会推送其悄悄关注的人发表的微博给该用户。现在我们来做一回网络侦探,根据某人的关注列表和其对其他用户的点赞情况,扒出有可能被其悄悄关注的人。

输入格式:

输入首先在第一行给出某用户的关注列表,格式如下:

人数N 用户1 用户2 …… 用户N

其中N是不超过5000的正整数,每个用户ii=1, ..., N)是被其关注的用户的ID,是长度为4位的由数字和英文字母组成的字符串,各项间以空格分隔。

之后给出该用户点赞的信息:首先给出一个不超过10000的正整数M,随后M行,每行给出一个被其点赞的用户ID和对该用户的点赞次数(不超过1000),以空格分隔。注意:用户ID是一个用户的唯一身份标识。题目保证在关注列表中没有重复用户,在点赞信息中也没有重复用户。

输出格式:

我们认为被该用户点赞次数大于其点赞平均数、且不在其关注列表上的人,很可能是其悄悄关注的人。根据这个假设,请你按用户ID字母序的升序输出可能是其悄悄关注的人,每行1个ID。如果其实并没有这样的人,则输出“Bing Mei You”。

输入样例1:

10 GAO3 Magi Zha1 Sen1 Quan FaMK LSum Eins FatM LLao
8
Magi 50
Pota 30
LLao 3
Ammy 48
Dave 15
GAO3 31
Zoro 1
Cath 60

输出样例1:

Ammy
Cath
Pota

输入样例2:

11 GAO3 Magi Zha1 Sen1 Quan FaMK LSum Eins FatM LLao Pota
7
Magi 50
Pota 30
LLao 48
Ammy 3
Dave 15
GAO3 31
Zoro 29

输出样例2:

Bing Mei You
#include<bits/stdc++.h> 
using namespace std;
int main()
{
    int n,m,x,sum=0,aver,flag=0;
    string s;
    cin>>n;
    map<string,int> vis,Map;
    for(int i=0;i<n;i++){cin>>s;vis[s]=1;}
    cin>>m;
    for(int i=0;i<m;i++){cin>>s>>x;Map[s]=x;sum+=x;}
    aver=sum/m;
    map<string,int>::iterator it;//迭代器遍历整个map 
    for(it=Map.begin();it!=Map.end();it++)
	{
        if(it->second>aver&&vis[it->first]==0)
		{
			cout<<it->first<<endl;flag=1;
		}
    }
    if(flag==0) cout<<"Bing Mei You"<<endl;
    return 0;
}

7-12 功夫传人 (25分)

一门武功能否传承久远并被发扬光大,是要看缘分的。一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱…… 直到某一支的某一代突然出现一个天分特别高的弟子(或者是吃到了灵丹、挖到了特别的秘笈),会将功夫的威力一下子放大N倍 —— 我们称这种弟子为“得道者”。

这里我们来考察某一位祖师爷门下的徒子徒孙家谱:假设家谱中的每个人只有1位师傅(除了祖师爷没有师傅);每位师傅可以带很多徒弟;并且假设辈分严格有序,即祖师爷这门武功的每个第i代传人只能在第i-1代传人中拜1个师傅。我们假设已知祖师爷的功力值为Z,每向下传承一代,就会减弱r%,除非某一代弟子得道。现给出师门谱系关系,要求你算出所有得道者的功力总值。

输入格式:

输入在第一行给出3个正整数,分别是:N(≤105)——整个师门的总人数(于是每个人从0到N−1编号,祖师爷的编号为0);Z——祖师爷的功力值(不一定是整数,但起码是正数);r ——每传一代功夫所打的折扣百分比值(不超过100的正数)。接下来有N行,第i行(i=0,⋯,N−1)描述编号为i的人所传的徒弟,格式为:

K**i ID[1] ID[2] ⋯ ID[K**i]

其中K**i是徒弟的个数,后面跟的是各位徒弟的编号,数字间以空格间隔。K**i为零表示这是一位得道者,这时后面跟的一个数字表示其武功被放大的倍数。

输出格式:

在一行中输出所有得道者的功力总值,只保留其整数部分。题目保证输入和正确的输出都不超过1010。

输入样例:

10 18.0 1.00
3 2 3 5
1 9
1 4
1 7
0 7
2 6 1
1 8
0 9
0 4
0 3

输出样例:

404
#include<bits/stdc++.h> 
using namespace std;
const int maxn = 100005;
int n,vis[maxn],d[maxn];
double sum,power, rate;
vector<int> v[maxn];

void dfs(int i, int t) 
{
	if(d[i]){sum=sum+power*pow((100-rate)/100,t)*d[i];}
	if(v[i].empty()) return;
	for(int j=0;j<v[i].size();j++) 
	{
		if (!vis[v[i][j]]) 
		{
			vis[v[i][j]]=1;
			dfs(v[i][j],t+1);
		}
	}
}
int main() 
{
	cin>>n>>power>>rate;
	memset(vis,0,sizeof(vis));
	for (int i=0;i<n;i++) 
	{	
		int t,k;
		cin>>t;
		if (t!=0){for(int j=0;j<t;j++) {cin>>k;v[i].push_back(k);}} 
		else {cin>>k;d[i]=k;}
	}
	dfs(0,0);
	int ans=sum;
	cout<<ans<<endl;
	return 0;
}

7-13 非常弹的球 (30分)

刚上高一的森森为了学好物理,买了一个“非常弹”的球。虽然说是非常弹的球,其实也就是一般的弹力球而已。森森玩了一会儿弹力球后突然想到,假如他在地上用力弹球,球最远能弹到多远去呢?他不太会,你能帮他解决吗?当然为了刚学习物理的森森,我们对环境做一些简化:

  • 假设森森是一个质点,以森森为原点设立坐标轴,则森森位于(0, 0)点。
  • 小球质量为w/100 千克(kg),重力加速度为9.8米/秒平方(m/s2)。
  • 森森在地上用力弹球的过程可简化为球从(0, 0)点以某个森森选择的角度ang (0<ang<π/2) 向第一象限抛出,抛出时假设动能为1000 焦耳(J)。
  • 小球在空中仅受重力作用,球纵坐标为0时可视作落地,落地时损失p%动能并反弹。
  • 地面可视为刚体,忽略小球形状、空气阻力及摩擦阻力等。

森森为你准备的公式:

  • 动能公式:E=m×v2/2
  • 牛顿力学公式:F=m×a
  • 重力:G=m×g

其中:

  • E - 动能,单位为“焦耳”
  • m - 质量,单位为“千克”
  • v - 速度,单位为“米/秒”
  • a - 加速度,单位为“米/秒平方”
  • g - 重力加速度

输入格式:

输入在一行中给出两个整数:1≤w≤1000 和 1≤p≤100,分别表示放大100倍的小球质量、以及损失动力的百分比p

输出格式:

在一行输出最远的投掷距离,保留3位小数。

输入样例:

100 90

输出样例:

226.757
#include<bits/stdc++.h>
using namespace std;
//m=w/100;
//E=m*v*v/2=w*v*v/200=1000
//F=m*a=w/100*a
//G=w/100*9.8
const double minn=1e-6;
int main()
{
    double w,p,v,maxx=0;
    cin>>w>>p;
    v=1000*200/w;		//v表示v的平方 
    while(v>minn)
    {
        maxx+=v/9.8;	//距离 
        v=v*(1-p*0.01);	//动能损失 
    }
    printf("%.3f\n",maxx);
    return 0;
}

7-14 周游世界 (30分)

周游世界是件浪漫事,但规划旅行路线就不一定了…… 全世界有成千上万条航线、铁路线、大巴线,令人眼花缭乱。所以旅行社会选择部分运输公司组成联盟,每家公司提供一条线路,然后帮助客户规划由联盟内企业支持的旅行路线。本题就要求你帮旅行社实现一个自动规划路线的程序,使得对任何给定的起点和终点,可以找出最顺畅的路线。所谓“最顺畅”,首先是指中途经停站最少;如果经停站一样多,则取需要换乘线路次数最少的路线。

输入格式:

输入在第一行给出一个正整数N(≤100),即联盟公司的数量。接下来有N行,第i行(i=1,⋯,N)描述了第i家公司所提供的线路。格式为:

M S[1] S[2] ⋯ S[M]

其中M(≤100)是经停站的数量,S[i](i=1,⋯,M)是经停站的编号(由4位0-9的数字组成)。这里假设每条线路都是简单的一条可以双向运行的链路,并且输入保证是按照正确的经停顺序给出的 —— 也就是说,任意一对相邻的S[i]和S[i+1](i=1,⋯,M−1)之间都不存在其他经停站点。我们称相邻站点之间的线路为一个运营区间,每个运营区间只承包给一家公司。环线是有可能存在的,但不会不经停任何中间站点就从出发地回到出发地。当然,不同公司的线路是可能在某些站点有交叉的,这些站点就是客户的换乘点,我们假设任意换乘点涉及的不同公司的线路都不超过5条。

在描述了联盟线路之后,题目将给出一个正整数K(≤10),随后K行,每行给出一位客户的需求,即始发地的编号和目的地的编号,中间以一空格分隔。

输出格式:

处理每一位客户的需求。如果没有现成的线路可以使其到达目的地,就在一行中输出“Sorry, no line is available.”;如果目的地可达,则首先在一行中输出最顺畅路线的经停站数量(始发地和目的地不包括在内),然后按下列格式给出旅行路线:

Go by the line of company #X1 from S1 to S2.
Go by the line of company #X2 from S2 to S3.
......

其中Xi是线路承包公司的编号,Si是经停站的编号。但必须只输出始发地、换乘点和目的地,不能输出中间的经停站。题目保证满足要求的路线是唯一的。

输入样例:

4
7 1001 3212 1003 1204 1005 1306 7797
9 9988 2333 1204 2006 2005 2004 2003 2302 2001
13 3011 3812 3013 3001 1306 3003 2333 3066 3212 3008 2302 3010 3011
4 6666 8432 4011 1306
4
3011 3013
6666 2001
2004 3001
2222 6666

输出样例:

2
Go by the line of company #3 from 3011 to 3013.
10
Go by the line of company #4 from 6666 to 1306.
Go by the line of company #3 from 1306 to 2302.
Go by the line of company #2 from 2302 to 2001.
6
Go by the line of company #2 from 2004 to 1204.
Go by the line of company #1 from 1204 to 1306.
Go by the line of company #3 from 1306 to 3001.
Sorry, no line is available.

7-15 球队“食物链” (30分)

某国的足球联赛中有N支参赛球队,编号从1至N。联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场。

联赛战罢,结果已经尘埃落定。此时,联赛主席突发奇想,希望从中找出一条包含所有球队的“食物链”,来说明联赛的精彩程度。“食物链”为一个1至N的排列{ T1 T2 ⋯ T**N },满足:球队T1战胜过球队T2,球队T2战胜过球队T3,⋯,球队T(N−1)战胜过球队T**N,球队T**N战胜过球队T1。

现在主席请你从联赛结果中找出“食物链”。若存在多条“食物链”,请找出字典序最小的。

注:排列{ a1 a2 ⋯ a**N}在字典序上小于排列{ b1 b2 ⋯ b**N },当且仅当存在整数K(1≤KN),满足:a**K<b**K且对于任意小于K的正整数ia**i=b**i

输入格式:

输入第一行给出一个整数N(2≤N≤20),为参赛球队数。随后N行,每行N个字符,给出了N×N的联赛结果表,其中第i行第j列的字符为球队i在主场对阵球队j的比赛结果:W表示球队i战胜球队jL表示球队i负于球队jD表示两队打平,-表示无效(当i=j时)。输入中无多余空格。

输出格式:

按题目要求找到“食物链”T1 T2 ⋯ T**N,将这N个数依次输出在一行上,数字间以1个空格分隔,行的首尾不得有多余空格。若不存在“食物链”,输出“No Solution”。

输入样例1:

5
-LWDW
W-LDW
WW-LW
DWW-W
DDLW-

输出样例1:

1 3 5 4 2

输入样例2:

5
-WDDW
D-DWL
DD-DW
DDW-D
DDDD-

输出样例2:

No Solution

posted @ 2020-07-21 20:18  神奇周一  阅读(456)  评论(0编辑  收藏  举报