【nyist】Personal Contest.1比赛总结

这场比赛没有丝毫的心理准备,突然间的就宣布,要进行比赛。不免心中有些忐忑。

不过还好,比赛题目不算难,大三学长有一个AK的。ORZ,需要学长们,仍需努力。

总体来说,这次题目,比较简单,半个小时内AC,3道,足以见的题目的难易程度。当A完第三道的时候,看了一下排名,第二。我擦,瞬间心情放松了起来。不过,也不敢有所懈怠,毕竟,题目比较简单,自己只不过,眼疾手快的水了几道比较水的题目。不过,前3道,有2道是跟风做的,第一道是自己看到的原题。而且是,全场第一个提交的并且AC 的。而且其他的两题,出题速度很快,可以肯定就是,水题。对待水题的态度,就是立刻水他,为以后的题目留下足够的时间去思考。

当水完3道题目后,大家在后来的20分钟之内,出题的速度就没有那么快了。这时,我就很是迷茫了,不知道该跟哪个题。有那么一段时间,自己在犹豫。犹豫了有一小会儿,才决定做D题,因为,现在有人出这道了。看了一下题目,模拟吧。就开始写。大约半个小时,调试出来以后,提交,WA。在提交了5次之后,决定再次读一下题目。发现了一个小的bug,果断改啊。AC。在大约还有一个小时多一点的时间,这道题,AC了。

这会儿看到很多人过了E题,看一下,字符串处理,而且有很多的函数,本来就是可以直接调用的,但是,很多函数直接没有用过,前几天还转过一个有关字符串的文章,但是,没有来的及看,就错过了。不过,看有不少人都给过了,还不算太难,就决定,都自己写了。一个函数,一个函数的慢慢写,写了有快50分钟吧,因为是,一遍写,一遍调试的,所以,比较慢,但是,事实证明,虽然慢,但是,还是很有效果的。1A。

这会儿,时间还有不到20分钟的时间吧,看了其他两道,C题感觉是递推,F题计算几何。递推,以前看过比较简单的,计算几何就没有怎么弄过,由于时间比较短了,没有怎么思考,随便写了一个递推,没有抱着AC的心态去的,但是,果然WA了。自己,有想了一会儿,果断,比赛时间到了。

最后看了一下排名,恩,还行,第三,继续努力。

这次比赛,发挥还可以,我感觉,

最重要的是头脑的清醒,头脑不清醒的话,做出的决定会很不明智的。所以,比赛中,一定要保持头脑的清醒。

再有,比赛,要适时的看rank,看的多了,不好。

嗯,继续走。

比赛时的E题。题目链接:点击打开链接

比较简单的模拟,就是比较繁琐,一个函数一个函数的写的,写一个测试一个,保证没有什么错误,直接提交,直接AC,但是,下来,有人看到我的代码问题,后来,我一看,还真是,Delete 的时候,没有判断i,j的相对大小,所以,但是,测试数据上面是就是大小相反的。我擦,没有注意到,但是,估计测试数据中也没有这种情况,让我给幸运的AC的。不的不说,太幸运了。不过,从这次的这道题来看,还是自己考虑不够周全,其实,在比赛的时候,就一直担心这一点,还是给忽视了。

代码:(比较长点)

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;

const int N=105;
char str[N];

void Insert(){
    int k;
    char A[N];
    scanf("%d%s",&k,A);
    if(k<0||k>strlen(str)) {
        printf("error\n");
        return ;
    }
    char tmp[N];int top1=0;
    for(int i=0;i<k;i++){
        tmp[top1++]=str[i];
    }
    int l=0;
    while(A[l]!='\0'){
        tmp[top1++]=A[l++];
    }
    for(int i=k;i<strlen(str);i++)
    tmp[top1++]=str[i];
    tmp[top1]='\0';
    strcpy(str,tmp);
    printf("%s\n",str);
}

void Double(){
    int len=strlen(str);
    if(len==0) {
        printf("error\n");
        return ;
    }
    for(int i=0;i<len;i++){
        str[i+len]=str[i];
    }
    str[len*2]='\0';
    printf("%s\n",str);
}

void Delete(){
    int begin,end;
    scanf("%d%d",&begin,&end);
    int len=strlen(str);
    if(len==0){
        printf("error\n");
        return ;
    }
    else if(begin<0||end>len-1){
        printf("error\n");
        return ;
    }
    char tmp[N];
    strcpy(tmp,str);
    for(int i=min(begin,end);i<=max(begin,end);i++){
        tmp[i]='#';
    }
    int top2=0;
    for(int i=0;i<len;i++){
        if(tmp[i]!='#'){
            str[top2++]=tmp[i];
        }
    }
    str[top2]='\0';
    printf("%s\n",str);
}

void Change(){
    int x,y;
    scanf("%d%d",&x,&y);
    int len=strlen(str);
    if(len==0){
        printf("error\n");
        return ;
    }
    if(x>=len||x<0||y<0||y>=len){
        printf("error\n");
        return ;
    }
    swap(str[x],str[y]);
    printf("%s\n",str);
}

void Reverse(){
    int len=strlen(str);
    if(len==0){
        printf("error\n");
        return ;
    }
    char tmp[N];int top3=0;
    for(int i=len-1;i>=0;i--){
        tmp[top3++]=str[i];
    }
    tmp[top3]='\0';
    strcpy(str,tmp);
    printf("%s\n",str);
}

void Rotate(){
    int x;
    scanf("%d",&x);
    int len=strlen(str);
    if(len==0){
        printf("error\n");
        return ;
    }
    char tmp[N*2];int top4=0;
    x=x%len;
    for(int i=x;i<len;i++){
        tmp[top4++]=str[i];
    }
    for(int i=0;i<x;i++){
        tmp[top4++]=str[i];
    }
    tmp[top4]='\0';
    strcpy(str,tmp);
    printf("%s\n",str);
}
int main(){
    int n;
    while(~scanf("%d",&n)){
        getchar();
        gets(str);
        for(int i=1;i<=n;i++){
            char order[N];
            scanf("%s",order);
            if(strcmp(order,"insert")==0){
                Insert();
            }
            else if(strcmp(order,"double")==0){
                Double();
            }
            else if(strcmp(order,"delete")==0){
                Delete();
            }
            else if(strcmp(order,"change")==0){
                Change();
            }
            else if(strcmp(order,"reverse")==0){
                Reverse();
            }
            else if(strcmp(order,"rotate")==0){
                Rotate();
            }
        }
    }
    return 0;
}


F题,美丽的花环,计算几何。没有怎么搞过计算几何,所以,没有什么想法。题解:

代码:

#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const double pi=3.1415926;
double area(double x1,double y1,double R,double x2,double y2,double r){
    double d=sqrt((y1-y2)*(y1-y2)+(x1-x2)*(x1-x2));
    if(d>R+r) return 0;
    double area1=pi*R*R,area2=pi*r*r;
    if(d<=fabs(R-r)) return min(area1,area2);
    double p=(R+r+d)/2;
    double Triarea=sqrt(p*(p-R)*(p-r)*(p-d));
//    double angle1=asin(2*Triarea/(R*d));注意在这儿错了很久.
//    double angle2=asin(2*Triarea/(r*d));主要就是asin和acos的取值范围.
    double angle1=acos((R*R+d*d-r*r)/(2*R*d));
    double angle2=acos((r*r+d*d-R*R)/(2*r*d));
    double Sector1=angle1/pi*area1;
    double Sector2=angle2/pi*area2;
    return fabs(Sector1+Sector2-2*Triarea);
}

int main(){
//    freopen("1.txt","r",stdin);
    double x1,y1,R,r,x2,y2,K;
    while(~scanf("%lf%lf%lf%lf%lf%lf%lf",&x1,&y1,&R,&r,&x2,&y2,&K)){
        double lager=area(x1,y1,R,x2,y2,K);
        double small=area(x1,y1,r,x2,y2,K);
        printf("%.2lf\n",fabs(lager-small));
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值