NJUPT CCPC和ICPC邀请赛组队选拔赛

运气不错,第一次参加学校的选拔赛我们是第七名,拿到了一个湖南邀请赛的名额。后面的两个队伍和我们做出了相同多的题目,但是我们的罚时比较少。

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;
}

猜你喜欢

转载自blog.csdn.net/qq_37360631/article/details/79859153