A题 谁考了第K名
#include <bits/stdc++.h>
using namespace std;
struct stu
{
int num;
double x;
} ;
bool cmp ( stu a, stu b)
{
return a. x> b. x;
}
int main ( )
{
stu a[ 100 ] ;
int n, k;
int i;
while ( ~ scanf ( "%d%d" , & n, & k) )
{
for ( i= 1 ; i<= n; i++ )
scanf ( "%d %lf" , & a[ i] . num, & a[ i] . x) ;
sort ( a+ 1 , a+ n+ 1 , cmp) ;
printf ( "%d %g\n" , a[ k] . num, a[ k] . x) ;
}
return 0 ;
}
B题 奇数单增序列
#include <bits/stdc++.h>
using namespace std;
int main ( )
{
int n, i, a[ 510 ] ;
while ( scanf ( "%d" , & n) != - 1 )
{
for ( i= 1 ; i<= n; i++ )
scanf ( "%d" , & a[ i] ) ;
sort ( a+ 1 , a+ n+ 1 ) ;
for ( i= 1 ; i<= n; i++ )
{
if ( a[ i] % 2 == 1 )
{
if ( i== 1 ) printf ( "%d" , a[ i] ) ;
else printf ( ",%d" , a[ i] ) ;
}
}
printf ( "\n" ) ;
}
return 0 ;
}
C题 成绩排序
#include <bits/stdc++.h>
using namespace std;
struct node
{
string name;
int mark;
} p[ 21 ] ;
bool cmp ( node a, node b)
{
if ( a. mark!= b. mark) return a. mark> b. mark;
else return a. name< b. name;
}
int main ( )
{
int i, n;
cin>> n;
for ( i= 0 ; i< n; i++ )
cin>> p[ i] . name>> p[ i] . mark;
sort ( p, p+ n, cmp) ;
for ( i= 0 ; i<= n- 2 ; i++ )
printf ( "%s %d\n" , p[ i] . name. c_str ( ) , p[ i] . mark) ;
printf ( "%s %d" , p[ n- 1 ] . name. c_str ( ) , p[ n- 1 ] . mark) ;
return 0 ;
}
没必要的排序1
#include <bits/stdc++.h>
using namespace std;
int main ( )
{
int n, k;
int a[ 1000 ] ;
int sum= 0 ;
int i;
scanf ( "%d%d" , & n, & k) ;
for ( i= 1 ; i<= n; i++ )
scanf ( "%d" , & a[ i] ) ;
sort ( a+ 1 , a+ 1 + n, greater< int > ( ) ) ;
for ( i= 1 ; i<= k; i++ )
sum+ = a[ i] ;
printf ( "%d\n" , sum) ;
return 0 ;
}
没必要的排序2
#include <bits/stdc++.h>
using namespace std;
const int maxn= 1e7 + 10 ;
const int maxk= 1e5 + 10 ;
int t[ maxk] ;
int main ( )
{
ios:: sync_with_stdio ( false ) ;
int i, x, n, k, ans, num;
cin>> n>> k;
memset ( t, 0 , sizeof ( t) ) ;
for ( i= 1 ; i<= n; i++ )
{
cin>> x;
t[ x] ++ ;
}
num= ans= 0 ;
for ( i= 1e5 ; i>= 1 ; i-- )
{
if ( t[ i] > 0 )
{
ans= ans+ t[ i] * i;
num= num+ t[ i] ;
}
if ( num>= k)
{
ans= ans- ( num- k) * i;
break ;
}
}
printf ( "%d\n" , ans) ;
return 0 ;
}
老和尚的导员
#include <bits/stdc++.h>
using namespace std;
struct student
{
int a[ 5 ] , s, k;
} ;
bool cmp ( student m, student n)
{
if ( m. s!= n. s) return m. s> n. s;
else if ( m. a[ 1 ] != n. a[ 1 ] ) return m. a[ 1 ] > n. a[ 1 ] ;
else if ( m. a[ 2 ] != n. a[ 2 ] ) return m. a[ 2 ] > n. a[ 2 ] ;
else if ( m. a[ 3 ] != n. a[ 3 ] ) return m. a[ 3 ] > n. a[ 3 ] ;
else if ( m. a[ 4 ] != n. a[ 4 ] ) return m. a[ 4 ] > n. a[ 4 ] ;
}
int main ( )
{
int i, n;
student stu[ 200 ] ;
while ( scanf ( "%d" , & n) != - 1 )
{
for ( i= 1 ; i<= n; i++ )
{
scanf ( "%d%d%d%d" , & stu[ i] . a[ 1 ] , & stu[ i] . a[ 2 ] , & stu[ i] . a[ 3 ] , & stu[ i] . a[ 4 ] ) ;
stu[ i] . s= stu[ i] . a[ 1 ] + stu[ i] . a[ 2 ] + stu[ i] . a[ 3 ] + stu[ i] . a[ 4 ] ;
stu[ i] . k= i;
}
sort ( stu+ 1 , stu+ n+ 1 , cmp) ;
for ( i= 1 ; i<= n; i++ )
printf ( "%d %d\n" , stu[ i] . k, stu[ i] . s) ;
}
return 0 ;
}
健忘的老和尚
#include <bits/stdc++.h>
using namespace std;
struct student
{
int a;
char name[ 101 ] ;
} ;
bool cmp ( student m, student n)
{ return m. a< n. a; }
int main ( )
{
int i, n, m, o;
student p[ 200 ] ;
while ( scanf ( "%d%d%d" , & n, & m, & o) != - 1 )
{
for ( i= 1 ; i<= n; i++ )
scanf ( "%s%d" , & p[ i] . name, & p[ i] . a) ;
sort ( p+ 1 , p+ n+ 1 , cmp) ;
for ( i= n- m+ 1 ; i<= n; i++ )
printf ( "%s\n" , p[ i] . name) ;
for ( i= 1 ; i<= o; i++ )
printf ( "%s\n" , p[ i] . name) ;
}
return 0 ;
}
戏说三国
#include <bits/stdc++.h>
using namespace std;
struct student
{
char name[ 30 ] ;
double x, y, z, x1, y1, z1;
double s;
} ;
bool cmp ( student m, student n)
{
if ( m. s!= n. s) return m. s> n. s;
else if ( m. x1!= n. x1) return m. x1> n. x1;
else if ( m. y1!= n. y1) return m. y1> n. y1;
else if ( m. z1!= n. z1) return m. z1> n. z1;
}
student p[ 100001 ] ;
int main ( )
{
int t, n, i, I;
double a, b, c;
while ( scanf ( "%d" , & t) != - 1 )
{
for ( I= 1 ; I<= t; I++ )
{
scanf ( "%d%lf%lf%lf" , & n, & a, & b, & c) ;
for ( i= 1 ; i<= n; i++ )
{
scanf ( "%s%lf%lf%lf" , p[ i] . name, & p[ i] . x, & p[ i] . y, & p[ i] . z) ;
p[ i] . x1= p[ i] . x* b* 0.01 ;
p[ i] . y1= p[ i] . y* a* 0.01 ;
p[ i] . z1= p[ i] . z* c* 0.01 ;
p[ i] . s= p[ i] . x1+ p[ i] . y1+ p[ i] . z1;
}
sort ( p+ 1 , p+ n+ 1 , cmp) ;
printf ( "Case #%d:\n" , I) ;
for ( i= 1 ; i<= n; i++ )
printf ( "%s %.4lf %.4lf %.4lf %.4lf\n" , p[ i] . name, p[ i] . s, p[ i] . x1, p[ i] . y1, p[ i] . z1) ;
}
}
return 0 ;
}
相约摩洛哥
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct stu
{
char name[ 10 ] ;
int t[ 4 ] , sub[ 4 ] , tsum, ac;
} p[ 100001 ] ;
bool cmp ( stu a, stu b)
{
if ( a. ac!= b. ac) return a. ac> b. ac;
if ( a. ac== b. ac) return a. tsum< b. tsum;
}
int main ( )
{
int i, j, n;
while ( ~ scanf ( "%d" , & n) )
{
for ( i= 1 ; i<= n; i++ )
scanf ( "%s%d%d%d" , p[ i] . name, & p[ i] . t[ 1 ] , & p[ i] . t[ 2 ] , & p[ i] . t[ 3 ] ) ;
for ( i= 1 ; i<= n; i++ )
scanf ( "%d%d%d" , & p[ i] . sub[ 1 ] , & p[ i] . sub[ 2 ] , & p[ i] . sub[ 3 ] ) ;
for ( i= 1 ; i<= n; i++ )
{
p[ i] . tsum= p[ i] . ac= 0 ;
for ( j= 1 ; j<= 3 ; j++ )
{
if ( p[ i] . t[ j] != - 1 )
{
p[ i] . ac++ ;
p[ i] . tsum+ = p[ i] . t[ j] + 20 * ( p[ i] . sub[ j] - 1 ) ;
}
}
}
sort ( p+ 1 , p+ 1 + n, cmp) ;
for ( i= 1 ; i<= n; i++ )
printf ( "%s %d %d\n" , p[ i] . name, p[ i] . ac, p[ i] . tsum) ;
}
return 0 ;
}
结构体排序题一
```cpp
#include <bits/stdc++.h>
using namespace std;
struct stu
{
int x, y;
} ;
bool cmp1 ( stu a, stu b)
{
if ( a. x== b. x) return a. y< b. y;
else return a. x< b. x;
}
bool cmp2 ( stu a, stu b)
{
if ( a. x== b. x) return a. y> b. y;
else return a. x< b. x;
}
bool cmp3 ( stu a, stu b)
{
if ( a. x== b. x) return a. y< b. y;
else return a. x> b. x;
}
bool cmp4 ( stu a, stu b)
{
if ( a. x== b. x) return a. y> b. y;
else return a. x> b. x;
}
int main ( )
{
int n, i, k1, k2;
stu p[ 100 ] ;
while ( scanf ( "%d%d%d" , & k1, & k2, & n) != - 1 )
{
for ( i= 1 ; i<= n; i++ )
scanf ( "%d%d" , & p[ i] . x, & p[ i] . y) ;
if ( k1== 1 && k2== 1 ) sort ( p+ 1 , p+ n+ 1 , cmp1) ;
if ( k1== 1 && k2== 0 ) sort ( p+ 1 , p+ n+ 1 , cmp2) ;
if ( k1== 0 && k2== 1 ) sort ( p+ 1 , p+ n+ 1 , cmp3) ;
if ( k1== 0 && k2== 0 ) sort ( p+ 1 , p+ n+ 1 , cmp4) ;
for ( i= 1 ; i<= n; i++ )
printf ( "(%d,%d)\n" , p[ i] . x, p[ i] . y) ;
}
return 0 ;
}