• Codeforces Round#1


    A. Theatre Square

      题目大意:有一个长宽为m和n的广场,用边长为a的正方形去铺盖,问铺满最少需要多少正方形

      题解:题目分解为用长度为a的线条分别去覆盖长度为m和n的线条,计算两者的乘积就是答案,在计算时注意整除的情况以及需要开long long防止相乘时范围越界。

    #include <iostream>
    using namespace std;
    int main(){
        long long n,a,m,p1,p2;
        cin>>n>>m>>a;
        if(n%a)p1=n/a+1; else p1=n/a;
        if(m%a)p2=m/a+1; else p2=m/a;
        cout<<p1*p2<<endl; 
        return 0;
    }
    

    B. Spreadsheet

      题目大意:给出两种表达式,根据规则相互转化:一种是RXCY,一种是(字母)(数字),其中第一种变成第二种就是把X原封不动地拿回来,然后Y数字转化为数字,转化规则是,A-Z:1-26,AA-AZ:27-52,BA-BZ……依此类推,比如R23C55就可以转化成BC23。

      题解:进制转化类的问题,注意转化方式特殊,在转化中刚好可以整除时需要特判,此外,首先对于原码格式的判断也要注意,我选择的标志是R和C还有数字的位置。

    #include <cstdio>
    #include <cstring>
    using namespace std; 
    char s[1000005],l;
    void change(){
        int f=0,res=0,res1=0;
        for(int i=0;i<l;i++){
            if(s[i]>='A'&&s[i]<='Z'){res=res*26+s[i]-'A'+1;}
            else{f=i;break;}
        }for(int i=f;i<l;i++)res1=res1*10+s[i]-'0';
        printf("R%dC%d
    ",res1,res);
    }
    void change1(){
        int res=0,res1=0,f=0,x[10005];x[0]=0; 
        for(int i=1;i<l;i++){
            if(s[i]>='A'&&s[i]<='Z'){f=i;break;}
            else{res=res*10+s[i]-'0';} 
        }for(int i=f+1;i<l;i++)res1=res1*10+s[i]-'0';
        while(res1){
            if(res1%26==0){x[++x[0]]=26;res1-=26;res1/=26;}
            else{x[++x[0]]=res1%26;res1/=26;}
        }for(int i=x[0];i;i--)printf("%c",'A'+x[i]-1);
        printf("%d
    ",res);
    }
    int main(int T){
        scanf("%d",&T);
        while(T--){
            scanf(" %s",s);
            int flag=1; l=strlen(s);
            if(s[0]=='R'){
                if(s[1]>='A'&&s[1]<='Z'){flag=1;}
                else for(int i=2;i<l;i++)if(s[i]=='C'){flag=0;}
            }if(flag){change();}else change1();
        }return 0;
    }
    

    C. Ancient Berland Circus

      题目大意:给出一个正多边形上的三个点,求这个正多边形的最小面积。

      题解:由给出的三个点,可以得出这个三角形的外接圆,即这个多边形的外接圆。根据三边计算对应的圆心角,求出它们的最大公约数,就可以得到多边形的边数,有了半径和边数,就可以计算出相应的面积了,需要注意的是,在计算最长边的圆心角时,考虑钝角的问题,所以用剩余的两个小角去计算。

    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    const double EPS=0.01;
    const double PI=3.1415926535897932384626;
    double gcd(double a,double b){return b<EPS?a:gcd(b,fmod(a,b));}
    double dist(double x1,double y1,double x2,double y2){return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));}
    int main(){
        double a[3],A[3],p,c,x1,x2,x3,y1,y2,y3,s,r,k; 
        scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);
        a[0]=dist(x1,y1,x2,y2);a[1]=dist(x1,y1,x3,y3);a[2]=dist(x2,y2,x3,y3);
        sort(a,a+3); p=(a[0]+a[1]+a[2])/2.0;
        s=sqrt(p*(p-a[0])*(p-a[1])*(p-a[2]));
        r=a[0]*a[1]*a[2]/(4*s);
        A[0]=2*asin(a[0]/(2*r));
        A[1]=2*asin(a[1]/(2*r));
        A[2]=2*PI-A[1]-A[0]; 
        p=gcd(A[2],gcd(A[1],A[0]));
        printf("%.6lf
    ",(PI*r*r*sin(p))/p);
        return 0;
    }
    

      

  • 相关阅读:
    [LeetCode] Reverse Linked List II
    [LeetCode] Reverse Linked List
    [LeetCode] Palindrome Linked List
    人工智能之一《tensorflow》
    计算机视觉之《OpenCV开发环境搭建》
    Android Automotive开发之一《编译自己的SDK 》 // TOBEDONE
    Android Automotive开发之一《环境: JDK7&JDK8切换 》
    Android Auto开发之一《开始学习Auto 》
    网络安全之证书、密钥、密钥库等名词解释
    Android开发笔记之《特斯拉-Tesla 代码分析》
  • 原文地址:https://www.cnblogs.com/forever97/p/Codeforces1.html
Copyright © 2020-2023  润新知