古风排版
中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。
输入格式:
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。
输出格式:
按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。
输入样例:
4
This is a test case
输出样例:
asa T
st ih
e tsi
ce s
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<iostream>
using namespace std;
int main(){
int N,M,L;
string s1;
cin>>N;
getchar();
getline(cin,s1);
L=s1.size();
M=(L%N==0)?L/N:L/N+1;
string s2(M*N-L,' ');
s1+=s2;
string str[N];
for(int i=0;i<s1.size();i++){
str[i%N]=s1[i]+str[i%N];
}
for(int j=0;j<N;j++){
cout<<str[j]<<endl;
}
return 0;
}
悄悄关注
输入首先在第一行给出某用户的关注列表,格式如下:
人数N 用户1 用户2 …… 用户N
其中N
是不超过5000的正整数,每个用户i
(i
=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
代码长度限制
16 KB
时间限制
200 ms
内存限制
64 MB
#include<iostream>
#include<set>
#include<map>
using namespace std;
set<string>a;
map<string,int>b;
int main(){
int n;
cin>>n;
for(int i =0;i<n;i++){
string s;
cin>>s;
a.insert(s);
}
int m;
cin>>m;
int sum=0;
double avg;
for(int i=0;i<m;i++){
string s;
int num;
cin>>s>>num;
sum+=num;
if(a.find(s)==a.end()){
b.insert(map<string,int>::value_type(s,num));
}
}
avg=(double)sum/m;
int flag=0;
map<string,int>::iterator it;
for(it=b.begin();it!=b.end();it++){
if((double)it->second>avg){
cout<<it->first<<endl;
flag=1;
}
}
if(flag==0)
cout<<"Bing Mei You";
return 0;
}
病毒溯源
病毒容易发生变异。某种病毒可以通过突变产生若干变异的毒株,而这些变异的病毒又可能被诱发突变产生第二代变异,如此继续不断变化。
现给定一些病毒之间的变异关系,要求你找出其中最长的一条变异链。
在此假设给出的变异都是由突变引起的,不考虑复杂的基因重组变异问题 —— 即每一种病毒都是由唯一的一种病毒突变而来,并且不存在循环变异的情况。
输入格式:
输入在第一行中给出一个正整数 N(≤104),即病毒种类的总数。于是我们将所有病毒从 0 到 N−1 进行编号。
随后 N 行,每行按以下格式描述一种病毒的变异情况:
k 变异株1 …… 变异株k
其中 k
是该病毒产生的变异毒株的种类数,后面跟着每种变异株的编号。第 i 行对应编号为 i 的病毒(0≤i<N)。题目保证病毒源头有且仅有一个。
输出格式:
首先输出从源头开始最长变异链的长度。
在第二行中输出从源头开始最长的一条变异链,编号间以 1 个空格分隔,行首尾不得有多余空格。如果最长链不唯一,则输出最小序列。
注:我们称序列 { a1,⋯,an } 比序列 { b1,⋯,bn } “小”,如果存在 1≤k≤n 满足 ai=bi 对所有 i<k 成立,且 ak<bk。
输入样例:
10
3 6 4 8
0
0
0
2 5 9
0
1 7
1 2
0
2 3 1
输出样例:
4
0 4 9 1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<bits/stdc++.h>
#define llu unsigned long long
using namespace std;
vector<int>vis[10010];
queue<pair<int,int>>q;
stack<int>f;
bool in[10010];
int before[10010];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
int k;
cin>>k;
for(int j=0;j<k;j++){
int x;
cin>>x;
in[x]=1;
before[x]=i;
vis[i].push_back(x);
}
sort(vis[i].begin(),vis[i].end());
}
int begin;
for(int i=0;i<n;i++){
if(in[i]==0)
begin=i;
}
int maxl=-1,ans=begin;
q.push({begin,1});
while(!q.empty()){
int now=q.front().first,l=q.front().second;
q.pop();
if(l>maxl){
maxl=l;
ans=now;
}
for(int i =0;i<vis[now].size();i++){
q.push({vis[now][i],l+1});
}
}
cout<<maxl<<endl;
while(ans!=begin){
f.push(ans);
ans=before[ans];
}
cout<<begin;
int t=f.size();
for(int i=0;i<t;i++){
cout<<" "<<f.top();
f.pop();
}
return 0;
}