• 第二次刷题感受——路漫漫其修远兮,吾将上下而求索。


      这一周,我们的团队进行了第二次刷题,6道题目对于团队的几个大佬来说不算太难,他们三下五除二,很快就有人6题通关了。真是厉害!但是这次似乎有几个题目超出了我这个菜鸟级的认知,好多高级的算法还没有学,甚至没有听说过。几个小时下来,忙了一身汗,依然分数惨淡。我真盼着快点学习D2、D3的课程。但是我还是对自己满意的,毕竟通过自己的努力还是作对了一部分。没做上的题目,我先通过看他们的博客,收藏起来,慢慢研究吧。下面我就把我刷的几道题觉得收获比较大的写写总结吧。

    1、递归的妙用:比如在P1010 幂次方

      这个题目中(题目要求不在赘述了)主要收获:递归方法的使用

      因为刚刚学完了D1课程里的递归算法,觉得比较神奇,所以这道题我就尝试了一下,效果挺好。具体如下:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 void dg(int x){
     4     while(x>0){
     5         int zhishu=0,p=1; 
     6         while(x>=p*2){//找出比X小的最大的2的几次方的数。 
     7             p*=2;
     8             zhishu++;
     9         }
    10         x-=p; 
    11         if(zhishu==0){//如果是0次方,直接输出。 
    12             cout<<"2("<<zhishu<<")";
    13         }else if(zhishu==1){//如果是1次方,也直接输出。 
    14             cout<<2;
    15         }else{//否则,进入递归 
    16             cout<<"2(";
    17             dg(zhishu);
    18             cout<<")";
    19         }
    20         if(x>0){//除了最后一位,其余输出“+". 
    21             cout<<"+";
    22         }
    23     }
    24 }
    25 int main(){
    26     int n;
    27     cin>>n;
    28     dg(n);
    29 return 0;
    30 }

    2、“难吃”的奶酪:P1433 吃奶酪

      这道题目挺有意思的,就仔细研究起来,但是尝试了几种办法之后,都是失败。最后看了一位网上大佬的思路,豁然开朗,真是厉害。自己尝试着编写自己的代码。基本上样例输入输出都没问题,但就是最后一组数据总是超时超限,尝试修改了几次也是不行。看来还是那里没弄清楚。还请各位高手们多多指教啊。

     1 #include<iostream>
     2 #include<cmath>
     3 #include<cstdio>
     4 using namespace std;
     5 int n,l[1003];
     6 double sum;
     7 double r[1003][1003];
     8 struct node{
     9     double x;
    10     double y;
    11 }zb[1003];
    12 void f(int zg,int sz,double cd){
    13     if(cd>sum){
    14         return;
    15     }
    16     if(zg==n){
    17         sum=min(sum,cd);
    18         return;
    19     } 
    20     for(int i=1;i<=n;i++)
    21         if(!l[i])
    22         {
    23             l[i]=1;
    24             f(zg+1,i,cd+r[sz][i]);
    25             l[i]=0;
    26         }
    27 } 
    28 int main(){
    29      scanf("%d",&n);
    30     for(int i=1;i<=n;i++){
    31      scanf("%lf%lf", &zb[i].x, &zb[i].y);
    32     } 
    33     zb[0].x=0;
    34     zb[0].y=0;
    35     for(int i=0;i<n;i++)
    36         for(int j=i+1;j<=n;j++)
    37             r[i][j]=r[j][i]=sqrt((zb[i].x-zb[j].x)*(zb[i].x-zb[j].x)+(zb[i].y-zb[j].y)*(zb[i].y-zb[j].y));
    38     sum=99999999.9; 
    39     f(0,0,0);
    40     printf("%.2lf
    ",sum);
    41     return 0;
    42 return 0;
    43 }

            总结:加入团队一周的时间里,让我认识了很多大佬级的朋友,也学到了很多很多东西。真心佩服,他们真的太厉害了!我这几天也刷了不少题目。虽然有时候花费几个小时研究几道题,但是还是觉得收获颇丰,很开心。虽然我接触c++还不到一年,但是觉得编程还是挺神奇的。我也相信只要坚持学下去,我也一定会越来越厉害的。也期盼着能继续在团队里,向大家学习。

  • 相关阅读:
    装配Bean
    百练
    东软小选拔
    俄罗斯乘法
    POJ
    ACdream
    javascript 链式作用域
    ie6/7 bug
    onreadystatechange 和 status
    瀑布流 <<转>>
  • 原文地址:https://www.cnblogs.com/yanxinyi-cpp/p/12895707.html
Copyright © 2020-2023  润新知