repeat_PTA_L2-4 秀恩爱分得快_细节超多

PTA_2020模拟赛_L2-4 秀恩爱分得快 (25 分)_细节模拟_TLE处理

//
#include<bits/stdc++.h>
using namespace std;

const int N=1111;
double in[2][N];
int sex[N];
vector<int> vv[N];

set<int> st1,st2;
set<int>::iterator it;

inline int read()
{
    int ans=0,f=1;
    char ch=getchar();
    while( !isdigit(ch) )
    {
        if( ch=='-' ) f=0;
        ch=getchar();
    }
    while( isdigit(ch) )
    {
        ans=( ans<<1 )+( ans<<3 )+( ch-'0' );
        ch=getchar();
    }
    sex[ans]=f;
    return ans;
}

int main()
{
    int n,m,i,j,k,a,b,f1,f2;
    double tt;

    while( cin>>n>>m )
    {
        for( i=0;i<m;i++ )
        {
            cin>>k;
            vv[i].resize(k);
            for( j=0;j<k;j++ ) vv[i][j]=read();
        }
        a=read(); b=read();

        for( i=0;i<m;i++ )
        {
            if( find( vv[i].begin(),vv[i].end(),a )!=vv[i].end() )
                for( j=0;j<vv[i].size();j++ )
                {
                    if( vv[i][j]==a ) continue;
                    in[0][vv[i][j]]+=(double)1/vv[i].size();
                }
            if( find( vv[i].begin(),vv[i].end(),b )!=vv[i].end() )
                for( j=0;j<vv[i].size();j++ )
                {
                    if( vv[i][j]==b ) continue;
                    in[1][vv[i][j]]+=(double)1/vv[i].size();
                }               // +=
        }
        f1=f2=0;
                            // tt=in[a][b]  段错误
        tt=0; st1.clear();
        for( i=0;i<n;i++ )
        {
            if( in[0][i]>tt && sex[a]+sex[i]==1 )
            {
                st1.clear(); tt=in[0][i]; st1.insert( i );
            }
            else if( in[0][i]==tt && sex[a]+sex[i]==1 )
            {
                st1.insert( i );
            }
        }
        if( st1.find( b )!=st1.end() ) f1=1;
        
        tt=0; st2.clear();
        for( i=0;i<n;i++ )
        {
            if( in[1][i]>tt && sex[b]+sex[i]==1 )
            {
                st2.clear(); tt=in[1][i]; st2.insert( i );
            }
            else if( in[1][i]==tt && sex[b]+sex[i]==1 )
            {
                st2.insert( i );
            }
        }
        if( st2.find( a )!=st2.end() ) f2=1;

        if( f1 && f2 )
        {
            if( sex[a]==0 ) cout<<"-"; cout<<a<<" ";
            if( sex[b]==0 ) cout<<"-"; cout<<b<<endl;
            continue;
        }
        for( it=st1.begin();it!=st1.end();++it )
        {
            if( sex[a]==0 ) cout<<"-"; cout<<a<<" ";
            if( sex[(*it)]==0 ) cout<<"-"; cout<<(*it)<<endl;
        }
        for( it=st2.begin();it!=st2.end();++it )
        {
            if( sex[b]==0 ) cout<<"-"; cout<<b<<" ";
            if( sex[(*it)]==0 ) cout<<"-"; cout<<(*it)<<endl;
        }           // (*it)  !!!
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_63173957/article/details/124197437