第一题 ABC问题
问题描述
Farmer John 的奶牛正在 “mooZ” 视频会议平台上举行每日集会。她们发明了一个简单的数字游戏,为会议增添一些乐趣。
Elsie 有三个正整数 A、B 和 C(A <= B <= C)。这些数字是保密的,她不会直接透露给她的姐妹 Bessie。她告诉 Bessie 七个范围在
1...1
0
9
1 ... 10^9
1...1 0 9 之间的整数(不一定各不相同),并宣称这是 A、B、C、A+B、B+C、C+A 和 A+B+C 的某种排列。
给定这七个整数,请帮助 Bessie 求出 A、B 和 C。可以证明,答案是唯一的。
输入格式
输入一行,包含七个空格分隔的整数。
输出格式
输出 A、B 和 C,用空格分隔。
输入样例
2 2 11 4 9 7 9
输出样例
2 2 7
测试点性质
测试点 2-3 满足 C <= 50。
测试点 4-10 没有额外限制。
分析:这题,数据一排序就出来了,A和B是最前的,而最后一个一定是A+B+C
代码:
# include <bits/stdc++.h>
using namespace std;
int main ( ) {
freopen ( "abc.in" , "r" , stdin ) ;
freopen ( "abc.out" , "w" , stdout ) ;
long long a[ 10 ] ;
memset ( a, 0 , sizeof ( a) ) ;
for ( int i= 1 ; i<= 7 ; ++ i) {
cin>> a[ i] ;
}
sort ( a+ 1 , a+ 8 ) ;
cout<< a[ 1 ] << " " << a[ 2 ] << " " << a[ 7 ] - a[ 1 ] - a[ 2 ] << endl;
fclose ( stdin ) ;
fclose ( stdout ) ;
return 0 ;
}
第二题 雏菊花环
问题描述
每天,作为她绕农场行走的一部分,奶牛 Bessie 会经过她最喜爱的草地,其中种有 N 朵花(五颜六色的雏菊),编号为
1
…
N
1…N
1 … N (
1
≤
N
≤
100
1≤N≤100
1 ≤ N ≤ 100 ),排列成一行。花 i 有
p
i
p_i
p i 朵花瓣(
1
≤
p
i
≤
1000
1≤p_i≤1000
1 ≤ p i ≤ 1000 )。
作为一名崭露头角的摄影家,Bessie 决定给这些花拍些照片。具体地说,对于每一对满足
1
≤
i
≤
j
≤
N
1≤i≤j≤N
1 ≤ i ≤ j ≤ N 的花 (i,j),Bessie 会给从花 i 到花 j 之间的所有花(包括 i 和 j)拍一张照。
后来 Bessie 查看这些照片时注意到有些照片里存在「平均」的花——一朵恰好有 P 朵花瓣的花,其中 P 等于照片中所有花的花瓣数量的平均值。
Bessie 的照片中有几张存在平均的花?
输入格式
输入的第一行包含 N。第二行包含 N 个空格分隔的整数
p
1
…
p
N
p_1…p_N
p 1 … p N 。
输出格式
输出存在平均的花的照片数量。
输入样例
4
1 1 2 3
输出样例
6
样例说明
每张仅包含一朵花的照片均会被计入答案(在这个样例中有 4 张)。另外,在这个样例中 (i,j) 为 (1,2) 和 (2,4) 所对应的照片也存在平均的花。
分析:照着题目来就行了,闭着身上所有的眼都能做出来
注:均值p是浮点数
代码:
# include <bits/stdc++.h>
using namespace std;
int main ( ) {
freopen ( "daisy.in" , "r" , stdin ) ;
freopen ( "daisy.out" , "w" , stdout ) ;
long long n, a[ 110 ] , ans= 0 ;
memset ( a, 0 , sizeof ( a) ) ;
cin>> n;
ans+= n;
for ( int i= 1 ; i<= n; ++ i) {
cin>> a[ i] ;
}
for ( int i= 2 ; i<= n; ++ i) {
for ( int j= 1 ; j<= n- i+ 1 ; ++ j) {
double p= 0 ;
for ( int k= 1 ; k<= i; ++ k) {
p+= a[ j+ k- 1 ] ;
}
p/= i;
for ( int l= 1 ; l<= i; ++ l) {
if ( p== a[ j+ l- 1 ] ) {
ans++ ;
break ;
}
}
}
}
cout<< ans << endl;
fclose ( stdin ) ;
fclose ( stdout ) ;
return 0 ;
}
第三题 一成不变
问题描述
Farmer John 最近扩大了他的农场,从奶牛们的角度看来这个农场相当于是无限大了!奶牛们将农场上放牧的区域想作是一个由正方形方格组成的无限大二维方阵,每个方格中均有美味的草(将每个方格看作是棋盘上的一个方格)。Farmer John 的 N 头奶牛(
1
≤
N
≤
50
1≤N≤50
1 ≤ N ≤ 50 )初始时位于不同的方格中,一部分朝向北面,一部分朝向东面。
每一小时,每头奶牛会执行以下二者之一:
如果她当前所在的方格里的草已经被其他奶牛吃掉了,则她会停下。
吃完她当前所在的方格中的所有草,并向她朝向的方向移动一个方格。
经过一段时间,每头奶牛的身后会留下一条被啃秃了的轨迹。
如果两头奶牛在一次移动中移动到了同一个有草的方格,她们会分享这个方格中的草,并在下一个小时继续沿她们朝向的方向移动。
请求出每头奶牛吃到的草的数量。有些奶牛永远不会停下,从而吃到无限多的草。
输入格式
输入的第一行包含 N。以下 N 行,每行描述一头奶牛的起始位置,包含一个字符 N(表示朝向北面) 或 E(表示朝向东面),以及两个非负整数 x 和 y表示方格的坐标。所有 x 坐标各不相同,所有 y 坐标各不相同。
为了使方向和坐标尽可能明确,如果一头奶牛位于方格 (x,y) 并向北移动,她会到达方格 (x,y+1)。如果她向东移动,她会到达方格 (x+1,y)。
输出格式
输出 N 行。输出的第 i 行包含输入中的第 i 头奶牛吃到草的方格的数量。如果一头奶牛可以吃到无限多的草,为这头奶牛输出 “Infinity”。
输入样例
6
E 3 5
N 5 3
E 4 6
E 10 4
N 11 2
N 8 1
输出样例
5
3
Infinity
Infinity
2
5
测试点性质
测试点 2-5 中,所有坐标不超过 100。
测试点 6-10 没有额外限制。
分析:本题其实有点难,就算你能解决无限草场问题,还有一个截胡问题(本可以拦截住,但自己被其他牛堵住),本人就写了个十分的,还没理解
代码:10分
# include <bits/stdc++.h>
using namespace std;
long long n, a[ 60 ] [ 5 ] , x[ 60 ] ;
int main ( ) {
freopen ( "stuct.in" , "r" , stdin ) ;
freopen ( "stuct.out" , "w" , stdout ) ;
memset ( a, 0 , sizeof ( a) ) ;
memset ( x, 0 , sizeof ( x) ) ;
cin>> n;
for ( int i= 1 ; i<= n; ++ i) {
char p;
cin>> p;
if ( p== 'N' ) {
a[ i] [ 1 ] = 1 ;
} else {
a[ i] [ 1 ] = 2 ;
}
cin>> a[ i] [ 2 ] >> a[ i] [ 3 ] ;
}
for ( int i= 1 ; i<= n; ++ i) {
if ( a[ i] [ 1 ] == 1 ) {
for ( int j= 1 ; j<= n; ++ j) {
if ( a[ i] [ 3 ] < a[ j] [ 3 ] && a[ j] [ 1 ] == 2 && a[ i] [ 2 ] > a[ j] [ 2 ] ) {
if ( a[ i] [ 2 ] - a[ j] [ 2 ] < a[ j] [ 3 ] - a[ i] [ 3 ] ) {
x[ i] = a[ j] [ 3 ] - a[ i] [ 3 ] ;
}
}
}
} else if ( a[ i] [ 1 ] == 2 ) {
for ( int j= 1 ; j<= n; ++ j) {
if ( a[ i] [ 2 ] < a[ j] [ 2 ] && a[ j] [ 1 ] == 1 && a[ j] [ 3 ] < a[ i] [ 3 ] ) {
if ( a[ j] [ 2 ] - a[ i] [ 2 ] > a[ i] [ 3 ] - a[ j] [ 3 ] ) {
x[ i] = a[ j] [ 2 ] - a[ i] [ 2 ] ;
}
}
}
}
}
for ( int i= 1 ; i<= n; ++ i) {
if ( x[ i] != 0 ) {
cout<< x[ i] << endl;
} else {
cout<< "Infinity" << endl;
}
}
fclose ( stdin ) ;
fclose ( stdout ) ;
return 0 ;
}