首页 > 技术文章 > 2020/4/11组队赛 部分解题报告与补题报告

yy0826 2020-04-15 14:59 原文

 D - A Simple Math Problem

 

          题意:给定正整数a,b,寻找是否有满足条件的x,y

                 X+Y=a;

                 lcm(X,Y)=b;

           

 

 

 

#include<cmath>
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
int gcd(int a,int b)
{
    if(b==0)
        return a;
    else
        return gcd(b,a%b);
}
int main()
{
    int a,b,x,y,k1,k2,m,d;
    while(cin>>a>>b)
    {
        m=gcd(a,b);
        d=a*a-4*m*b;
        if(d<0)
        {
            cout<<"No Solution"<<endl;
        }
        else
        {
            int d1=sqrt(d);
            if(d1*d1!=d)
            {
                cout<<"No Solution"<<endl;
            }
            else
            {
                x=(a-d1)/2;
                y=(a+d1)/2;
                cout<<x<<' '<<y<<endl;
            }
        }
    }
    return 0;
}
View Code

 

H - To begin or not to begin

 

 题意:给K个黑球和一个红球,Bob和Alice不放回的从中取球,先拿到红球的胜利

           Alice先开始,如果先开始取的赢的概率大输出1,先开始取的赢的概率小输出2,平局输出3

          n=k+1

          Alice获胜的概率为

 

 

 

  k为奇数(n为偶数)p=1/n+ (n-2)/2 * 1/n = 1/2;

  k为偶数(n为奇数)p=1/n +(n-1)/2 * 1/n =(n+1)/2;

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int main(){
       int k;
    while(scanf("%d",&k)!=EOF){
        if(k&1){
            cout<<"0"<<endl;
        }else{
            cout<<"1"<<endl;
        }
    }
    return 0;
}
View Code

 

I - Convex

   题意:输入n和d,表示点的数量和它们到原点的距离(所有点到原点的距离都相等)。

              再输入n个整数,表示角度。n个数的和总是360。

              将每个三角形面积相加即为n边形的面积。

              圆里三角形的面积为S=1/2*r*r*sin(弧度);

              弧度=角度*PI/180;

          

            

 

 

#include<cmath>
#include<cstdio>
#include<iostream>
using namespace std;
#define PI 3.1415926
int main(){
    
    int n,d;
    double num;
    while(scanf("%d %d",&n,&d)!=EOF){
        double sum=0;
        for(int i=1;i<=n;i++){
            cin>>num;
            num=num*PI/180;
            sum+=d*d*sin(num)/2;
        } 
        printf("%.3f\n",sum);
    }
    return 0;
}
View Code

 

 

J - Find Small A

 

   题意:给n个数,每个数都可以由32位的二进制数表示,每八位可以表示一个字符,

              将这八位转换为十进制判断是否等于97(a的ascii码),计算可以找到多少个a

               因为2^8=256,对于输入的每个数num,若num%256==97,则counts++

              然后num=num/256,直到num=0;

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>
using namespace std;
int main(){
    int n;
    long long num;
    while(scanf("%d",&n)!=EOF){
        long long counts=0;
        while(n--){
            cin>>num;
            while(num){
                if(num%256==97)
                counts++;
                num=num/256;
            }
        }
        cout<<counts<<endl;
    }
      return 0;
}
View Code

 

推荐阅读