level 0 热身赛的签到题

基本上只要不看错题或者不马虎就不可能做错。

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    cin>>s;
    cout<<s<<"saikou";
}

level 2 爱心

这里先检讨一下,赛前没有预估Java语言的System.out.print的时间,导致O(n^2)输出无法通过。本题的时限已经延长到c/c++ 2s,其他语言4s。
这道题如果采用字符二维数组、赋值后输出则有可能输出多余的空格。正确算法是观察爱心的形状,每行输出对应的字符'*'和空格就可以了。

#include<bits/stdc++.h>
using namespace std;
int main(){
    cout<<"I love U forever.\n";
    int n,i,j;
    cin>>n;
    for(i=0;i<n;i++){
        for(j=0;j<n-i;j++)putchar(' ');
        for(j=0;j<n+2*i;j++)putchar('*');
        for(j=0;j<n-i-1;j++)putchar(' ');
        putchar(' ');
        for(j=0;j<n-i-1;j++)putchar(' ');
        for(j=0;j<n+2*i;j++)putchar('*');
        cout<<endl;
    }
    int temp=0;
    for(i=6*n-1;i>0;i-=2){
        for(j=0;j<temp;j++)putchar(' ');
        for(j=0;j<i;j++)putchar('*');
        cout<<endl;
        temp++;
    }
}

level 5 太阳花田

这是今年上半年校赛的一道题,当时的通过率也非常惨:
图片说明
图片说明
(比赛只有4个人过A题)
这道题的思路如下:
首先题目里没有说长和宽的大小关系,所以不妨设长大于宽。
根据矩形长和宽以及圆的直径的关系分类讨论即可。
显然圆心和矩形重心重合即可。
一共四种情况:
,最大重合面积为矩形。
,最大重合面积为圆抠掉4个弓形
,最大重合面积为圆抠掉2个弓形
,最大重合面积为圆形。
弓形的面积可以用一个扇形减去等腰三角形求出。
依次计算输出即可。

#include<bits/stdc++.h>
using namespace std;
const double pi=3.1415926536;
int main(){

    double x,y,r;
    cin>>x>>y>>r;
    x/=2,y/=2;
    if(x>y)swap(x,y);

    double ma=(sqrt(x*x+y*y));
    if(r>=ma)printf("%.2lf",4*x*y);
    else if(r<=x)printf("%.2lf",pi*r*r);
    else if(r<=y){
        double h=sqrt(r*r-x*x);
        printf("%.2lf",2*asin(x/r)*r*r+2*h*x);
    }
    else{
        double h1=sqrt(r*r-x*x),h2=sqrt(r*r-y*y);
        printf("%.2lf",(2*pi-4*acos(x/r)-4*acos(y/r))*r*r/2+2*h1*x+2*h2*x);
    }
}