2020.10.17个人赛
7-5
提议很好理解,只是代码一直不过,把#define speed_up ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);删掉就行了。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main(){
int t;
cin>>t;
getchar();
while(t--){
string a;
getline(cin,a);
ll i;
ll num=0;
for(i=0;i<a.size();i++){
if(a[i]==','){
if(a[i-1]=='g'&&a[i-2]=='n'&&a[i-3]=='o'){
num++;
}
}
if(a[i]=='.'){
if(a[i-1]=='g'&&a[i-2]=='n'&&a[i-3]=='o'){
num++;
}
}
}
ll num1=0;
if(num==2){
for(i=a.size()-1;i>0;i--){
if(a[i]==' '){
num1++;
}
if(num1==3){
break;
}else{
a[i]='0';
}
}
for(i=0;i<a.size();i++){
#define ll long long
using namespace std;
int main(){
int t;
cin>>t;
getchar();
while(t--){
string a;
getline(cin,a);
ll i;
ll num=0;
for(i=0;i<a.size();i++){
if(a[i]==','){
if(a[i-1]=='g'&&a[i-2]=='n'&&a[i-3]=='o'){
num++;
}
}
if(a[i]=='.'){
if(a[i-1]=='g'&&a[i-2]=='n'&&a[i-3]=='o'){
num++;
}
}
}
ll num1=0;
if(num==2){
for(i=a.size()-1;i>0;i--){
if(a[i]==' '){
num1++;
}
if(num1==3){
break;
}else{
a[i]='0';
}
}
for(i=0;i<a.size();i++){
if(a[i]=='0'){
cout<<"qiao ben zhong."<<endl;
break;
}
cout<<a[i];
}
}else{
cout<<"Skipped"<<endl;
}
}
}
cout<<"qiao ben zhong."<<endl;
break;
}
cout<<a[i];
}
}else{
cout<<"Skipped"<<endl;
}
}
}
7-9
题意:一开始提议读不懂,后来发现“其中第 i 个编号对应第 i 位成员的父/母。”,原来编号对应父母。如5即是第五个是其父母。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
vector<int>v[100005],ans;
vector<int>::iterator it;
int maxx;
void dfs(int n,int deep)
{
for(int i=0; i<v[n].size(); i++)
dfs(v[n][i],deep+1);
if(deep>maxx)
{
maxx=deep;
ans.clear();
ans.push_back(n);
}else if(maxx==deep)
ans.push_back(n);
}
int main()
{
speed_up;
int n,t,pos;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>t;
if(t==-1)
{
pos=i;
continue;
}
v[t].push_back(i);
}
dfs(pos,1);
sort(ans.begin(),ans.end());
cout<<maxx<<endl;
cout<<*ans.begin();
for(it=ans.begin()+1; it!=ans.end(); it++)
{
cout<<' '<<*it;
}
cout<<endl;
}
#define ll long long
using namespace std;
vector<int>v[100005],ans;
vector<int>::iterator it;
int maxx;
void dfs(int n,int deep)
{
for(int i=0; i<v[n].size(); i++)
dfs(v[n][i],deep+1);
if(deep>maxx)
{
maxx=deep;
ans.clear();
ans.push_back(n);
}else if(maxx==deep)
ans.push_back(n);
}
int main()
{
speed_up;
int n,t,pos;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>t;
if(t==-1)
{
pos=i;
continue;
}
v[t].push_back(i);
}
dfs(pos,1);
sort(ans.begin(),ans.end());
cout<<maxx<<endl;
cout<<*ans.begin();
for(it=ans.begin()+1; it!=ans.end(); it++)
{
cout<<' '<<*it;
}
cout<<endl;
}
7-13
实在不会,找的代码,题意是找寻最远的那个门,此题没有说明给定入口。
#include<bits/stdc++.h>
using namespace std;
int n,m,a,sum,num,root;
int Map[100010];
int vis[100010];
vector<int> p[100010];
void dfs(int x,int step){
Map[x]=step;
for(int i=0;i<p[x].size();i++){
dfs(p[x][i],step+1);
}
}
int main(){
scanf("%d",&n);
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++){
scanf("%d",&m);
while(m--){
scanf("%d",&a);
vis[a]=1; //标记,没用过的就是入口
p[i].push_back(a);
}
}
for(int i=1;i<=n;i++){
if(vis[i]==0){
root=i; //找到入口
}
}
dfs(root,0);
sum=-1;
num=0;
for(int i=1;i<=n;i++){ //求最深
if(Map[i]>sum){
sum=Map[i];
num=i;
}
}
printf("%d",num);
return 0;
}
浙公网安备 33010602011771号