1
7-3 File Path (25 分)
# include <iostream>
# include <cstring>
# include <unordered_map>
using namespace std;
const int N= 1010 ;
int last[ N] = {
0 } , pre[ 10010 ] = {
0 } ;
unordered_map< int , int > mp;
void dfs ( int x)
{
if ( x== 0 )
{
printf ( "0000" ) ;
return ;
}
dfs ( pre[ x] ) ;
printf ( "->%04d" , x) ;
}
int main ( )
{
int n, k, id;
cin>> n;
getchar ( ) ;
string input;
for ( int i= 0 ; i< n; i++ )
{
getline ( cin, input) ;
int cnt= 0 ;
while ( * input. begin ( ) == ' ' )
{
input. erase ( input. begin ( ) ) ;
cnt++ ;
}
int key= stoi ( input) ;
mp[ key] = 1 ;
pre[ key] = last[ cnt- 1 ] ;
last[ cnt] = key;
}
cin>> k;
int val;
while ( k-- )
{
scanf ( "%d" , & val) ;
if ( mp. count ( val) == 0 )
printf ( "Error: %04d is not found." , val) ;
else
dfs ( val) ;
cout << endl;
}
return 0 ;
}
2
7-1 Panda and PP Milk (20 分)
# include <iostream>
# include <vector>
# include <algorithm>
using namespace std;
const int maxn= 10003 ;
struct node
{
int milk;
int weight;
} Node[ maxn] ;
vector< int > LR, RL;
int n;
int main ( )
{
cin >> n;
for ( int i= 0 ; i< n; i++ )
{
cin >> Node[ i] . weight;
}
Node[ 0 ] . milk= 200 ;
LR. push_back ( Node[ 0 ] . milk) ;
for ( int i= 1 ; i< n; i++ )
{
if ( Node[ i] . weight> Node[ i- 1 ] . weight)
{
Node[ i] . milk= Node[ i- 1 ] . milk+ 100 ;
}
else if ( Node[ i] . weight== Node[ i- 1 ] . weight)
{
Node[ i] . milk= Node[ i- 1 ] . milk;
}
else
{
Node[ i] . milk= 200 ;
}
LR. push_back ( Node[ i] . milk) ;
}
Node[ n- 1 ] . milk= 200 ;
RL. push_back ( Node[ n- 1 ] . milk) ;
for ( int i= n- 2 ; i>= 0 ; i-- )
{
if ( Node[ i] . weight> Node[ i+ 1 ] . weight)
{
Node[ i] . milk= Node[ i+ 1 ] . milk+ 100 ;
}
else if ( Node[ i] . weight== Node[ i+ 1 ] . weight)
{
Node[ i] . milk== Node[ i+ 1 ] . milk;
}
else
{
Node[ i] . milk= 200 ;
}
RL. push_back ( Node[ i] . milk) ;
}
reverse ( RL. begin ( ) , RL. end ( ) ) ;
int sum= 0 , temp;
for ( int i= 0 ; i< n; i++ )
{
temp= max ( LR[ i] , RL[ i] ) ;
sum+= temp;
}
cout << sum;
}
3
7-2 The Judger (25 分)
# include <iostream>
# include <cmath>
# include <unordered_set>
using namespace std;
unordered_set< int > s, oid;
int a[ 15 ] [ 1005 ] ;
bool jugde ( int x)
{
unordered_set< int > :: iterator it= s. begin ( ) ;
for ( ; it!= s. end ( ) ; it++ )
{
if ( s. find ( ( * it) + x) != s. end ( ) )
return true ;
}
return false ;
}
int main ( )
{
int q, p, n, m;
cin >> q >> p >> n >> m;
s. insert ( q) ;
s. insert ( p) ;
for ( int i= 0 ; i< n; i++ )
{
for ( int j= 0 ; j< m; j++ )
{
scanf ( "%d" , & a[ i] [ j] ) ;
}
}
for ( int j= 0 ; j< m; j++ )
{
for ( int i= 0 ; i< n; i++ )
{
if ( oid. find ( i) != oid. end ( ) )
continue ;
int x= a[ i] [ j] ;
if ( s. find ( x) != s. end ( ) || ! jugde ( x) )
{
oid. insert ( i) ;
printf ( "Round #%d: %d is out.\n" , j+ 1 , i+ 1 ) ;
}
else
{
s. insert ( x) ;
}
}
}
bool flag= false ;
for ( int i= 0 ; i< n; i++ )
{
if ( oid. find ( i) == oid. end ( ) )
{
if ( ! flag)
{
flag= true ;
printf ( "Winner(s): %d" , i+ 1 ) ;
}
else
printf ( " %d" , i+ 1 ) ;
}
}
if ( ! flag)
printf ( "No winner." ) ;
return 0 ;
}
4
7-3 Safari Park (25 分)
# include <iostream>
# include <vector>
# include <unordered_set>
using namespace std;
const int maxn= 511 ;
int n, r, k;
vector< int > G[ maxn] ;
int main ( )
{
cin >> n >> r >> k;
for ( int i= 0 ; i< r; i++ )
{
int a, b;
cin >> a >> b;
G[ a] . push_back ( b) ;
G[ b] . push_back ( a) ;
}
int m;
cin >> m;
for ( int i= 0 ; i< m; i++ )
{
int v[ maxn] ;
unordered_set< int > s;
for ( int j= 1 ; j<= n;<