运气不错,第一次参加学校的选拔赛我们是第七名,拿到了一个湖南邀请赛的名额。后面的两个队伍和我们做出了相同多的题目,但是我们的罚时比较少。
A.水题
#include<iostream>
using namespace std;
int p1,q1,p2,q2;
int main(){
while(cin>>p1>>q1>>p2>>q2){
if((p1*p2)%(q1*q2)==0) cout<<"1"<<endl;
else cout<<"0"<<endl;
}
return 0;
}
B题
概率题目,WA了。。。后面补。
#include<iostream>
#include<cstring>
#include<cmath>
#define inf 0x3f3f3f
using namespace std;
int main(){
double a[10],b[10]; //记录概率
double sum,d;
int p;
double mi=inf;
sum=0;p=-1;
for(int i=0;i<6;i++) {
cin>>a[i];
sum+=(i+1)*a[i];
}
if(fabs(sum-3.5)<1e-3) {cout<<"0.000"<<endl;}
else{
d=fabs(sum-3.5); //abs是求整数的决定值,fabs求双精度的绝对值
for(int i=0;i<6;i++){
b[i]=d/a[i];
}
//b[]中存储了需要变化多少
for(int i=0;i<6;i++){
//确定b[i]是不是整数
if(fabs(b[i]-(int)b[i])-1<1e-10){
if(b[i]<mi){
mi=b[i];
}
}
}
cout<<mi<<".000"<<endl;
}
return 0;
}
C题
题意分析,就是输入一个数字n,然后第一行有n-1个数,第二行有n-2个数。以此类推,第n-1行有一个数。然后把1~(n-1)求和为sum。题目要求sum/2在第几行。由于n取到了10e9,采取二分法,比较k-1行数据总个数,k行数据总个数和sum/2的关系,进行二分。
由于开始的时候,没有分奇数和偶数,WA了两次。奇数的中间值是sum/2+1,偶数是sum/2.
#include<iostream>
using namespace std;
typedef long long ll;
int main(){
ll n;
while(cin>>n){
if(n==2) {cout<<"1"<<endl;}
else {
ll sum=n*(n-1)/2;
ll r=n-1;
ll l=1;
//处理奇数和偶数的情况
if(sum%2==0){ sum/=2;}
else {sum=sum/2+1;}
while(l<=r){
ll mid=(l+r)/2;
//a是到mid-1行为止所有的元素个数,b是到mid行所有元素的个数
ll a=(2*n-mid)*(mid-1)/2;
ll b=(2*n-1-mid)*mid/2;
if(sum>b){ l=mid+1;}
if(sum<=a) {r=mid-1;}
if(sum>a &&sum<=b) { cout<<mid<<endl; break;}
}
}
}
return 0;
}
F题
等差数列题目,一个数列一共有10项,其中8项为0,2项给出,判定是否能构成等差数列。
注意输出的格式,每输出一个打印空格,但是最后一个不需要打空格。
#include<iostream>
#include<cstring>
using namespace std;
void print(int x,int d){
for(int i=0;i<10;i++){
cout<<x+i*d;
if(i<=8) { cout<<" ";}
}
cout<<endl;
}
int main(){
int a[12],b[2]; //用来记录非0元素的下标
int d1,d2,d;
int p=0;
for(int i=0;i<10;i++){
cin>>a[i];
if(a[i]!=0)
{
b[p++]=i;
}
}
int sta=b[0];
int ed=b[1];
d1=a[ed]-a[sta];
d2=ed-sta;
if(d1%d2!=0) { cout<<"-1"<<endl; }
else{
d=d1/d2; //公差
int x=a[sta]-sta*d; //计算出首项
print(x,d);
}
return 0;
}
G题
水题,实际上是解一个方程,输出所有可能解的情况。
ax+by=n,分成4种情况讨论即可。
#include<iostream>
using namespace std;
void print(int a,int b){
cout<<a<<" "<<b<<endl;
}
int main(){
int n;
cin>>n;
for(int b=1;b<=n/2;b++){
if((n)%(2*b)==0){
if(b!=1)
print(b,b);
}
if((n-b)%(b+b)==0){
if(b!=1)
print(b,b);
}
if((n)%(2*b+1)==0){
print(b+1,b);
}
if((n-b-1)%(2*b+1)==0){
print(b+1,b);
}
}
return 0;
}