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++){
                if(a[i]=='0'){
                    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;
}
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;
}

posted @ 2020-10-25 15:11  yyscn  阅读(98)  评论(0)    收藏  举报