文章目录
Codeforces Round #799 (Div. 4)
A. Marathon
题目大意
有四个人(a , b , c ,d)跑步 , 问有几个人在a前面
代码
int a[N] ;
bool cmp(int a , int b){
return a > b ;
}
void solve(){
int aa ;
for(int i = 1 ; i <= 4 ; i ++ ){
cin>>a[i];
if(i == 1 ) aa = a[i] ;
}
sort(a + 1 , a + 1 + 4 , cmp) ;
int res =0 ;
for(int i = 1 ; i <= 4 ; i ++){
if(a[i] == aa) break ;
res ++ ;
}
cout<<res<<"\n" ;
}
B. All Distinct
题意
n个长度的数组, 可以删除两个不同的位置, 问最长剩多长的数组, 两两不同
思路
统计删几个, 如果删的是偶数, 答案是不同的个数, 如果是奇数 , 答案是不同的个数 - 1
代码
void solve(){
int n ;
read(n) ;
map<int , int> mp ;
for(int i = 1 ; i <= n ; i ++){
read(a[i]) ;
mp[a[i]] ++ ;
}
int s = n - mp.size() ;
int res = mp.size() ;
if(s % 2 )res -- ;
cout<<res <<"\n" ;
}
C. Where’s the Bishop?
题意
每个国王可以攻击对角线和斜对角线 ,问国王的位置
思路
对每一个位置检查
代码
char a[10][10] ;
bool check(int x , int y){
if(a[x][y] != '#') return false ;
for(int i = 1 ; i <= 8 ; i ++ ) {
int xx = x + 1 , yy = y + 1 ;
if(xx <= 8 && yy <= 8) {
if(a[xx][yy] !='#') return false ;
}else break ;
}
for(int i = 1 ; i <= 8 ; i ++ ) {
int xx = x - 1 , yy = y - 1 ;
if(xx >=1 && yy >= 1) {
if(a[xx][yy] !='#') return false ;
}else break ;
}
for(int i = 1 ; i <= 8 ; i ++ ) {
int xx = x + 1 , yy = y - 1 ;
if(xx <= 8 && yy >= 1) {
if(a[xx][yy] !='#') return false ;
}else break ;
}
for(int i = 1 ; i <= 8 ; i ++ ) {
int xx = x - 1 , yy = y + 1 ;
if(xx >= 1 && yy <= 8) {
if(a[xx][yy] !='#') return false ;
}else break ;
}
return true;
}
void solve(){
for(int i = 1 ; i <= 8 ; i ++ ) {
for(int j = 1 ; j <= 8 ; j ++ ) {
cin>>a[i][j] ;
}
}
for(int i = 2 ; i <= 7 ; i ++ ){
for(int j = 2 ; j <= 7 ; j ++ ) {
if(check(i , j )) {
cout<<i <<" " <<j<<"\n" ;
return ;
}
}
}
}