2017-4-8蓝桥杯总结(1) 结果填空部分

来源:互联网 发布:软件项目管理目标 编辑:程序博客网 时间:2024/06/07 13:16

心情很差
睡了一觉醒来心情好多了。

比赛发生了很多影响心情的因素,但想了想,最后还是归于自己学艺不精

本来入门就比巨佬们晚,还好逸恶劳各种偷懒,书是买了不少,天天装逼却没有好好地去看。

学到现在其实什么都不敢说会,就连最基本的qsort,牵扯到结构体,还是不会。

今天听老师们谈了很多队伍的建设,发现他们对ACM的建设真的付出了很多的心血,不断地为我们ACMer找学校的资助,而我却没有好好珍惜他们给我们的机会。

甚至现在我 dfs,bfs,dp,greedy 四大基础算法一个都不会,只能从今天起好好学了。


第一道是水题,记账。

不断输入a,b两个数,a是购买东西的价格,b是折扣。

但真的很烦它的输入,win7的cmd不能用ctrl+v输入数据,这点让我很崩溃,更崩溃的是比赛完大佬说右键粘贴就可以了。
而且我也没有好好地用freopen函数来解决输入问题,所以归根结底还是自己的错。

#define Debug#include <stdio.h>int main(){    #ifdef Debug        freopen("C:\\Users\\Yamork\\Desktop\\read.txt","r",stdin);        freopen("C:\\Users\\Yamork\\Desktop\\read.txt","a",stdout);    #endif    double a,b,sum=0,count=1;    while(~scanf("%lf%lf",&a,&b))    {        sum+=a*b/100;        printf("%lf   %lf\n",sum,count++ );    }    fclose(stdout);    return 0;}

最后验算一下count和输入数据的行数是不是一样保证自己没有输入错就好。

既然吃了这个亏,就来看看freopen函数吧。

FILE freopen(const char restrict filename, const char * restrict mode, FILE * restrict stream);[2]
形参说明:
filename:需要重定向到的文件名或文件路径。
mode:代表文件访问权限的字符串。例如,”r”表示“只读访问”、”w”表示“只写访问”、”a”表示“追加写入”。
stream:需要被重定向的文件流。
返回值:如果成功,则返回该指向该输出流的文件指针,否则返回为NULL。

这个函数是直接放在stdio.h头文件里的,我在这里把r,w,a三种mode都试了一下,r是读取,w是写出,a是追加补充。这里w会把原来的文本清除掉,而a则是在文本文件后追加补充,stream应该就是stdin标准输入流stdout标准输出流两种了。

最后算出来的结果是5136.859500,我当时交上去的好像5300。心态,炸裂!
如果有同学要拿这个代码的话,把文件路径改成自己的就行了,当然如果你想一个一个输入,就直接在#Define Debug前面加注释符号变成//#Define Debug就OK了。


第二道,等差素数列

求长度为10的等差素数列的公差最小值

#include <stdio.h>#include <math.h>using namespace std;int a[100000];bool prime(int n){    for(int i=2;i<=sqrt(n);i++)    {        if(!(n%i)) return 0;    }    return 1;}int main(){    int count;    for(int i=2;i<100000;i++)//将素数全部book一下    {        a[i]=prime(i);    }    for(int i=30;i<1000;i++)//逐渐放大等差    {        for(int tmp=2;tmp<1000;tmp++)//第一个素数元素        {            count=0;            if(a[tmp])//避免不必要的搜索            {                for(int j=tmp;j<10000;j=j+i)                {                    if(count==10)                    {                        printf("%d\n",i);//输出并结束程序                        return 0;                    }                    if(a[j])                    {                        count++;                    }                    else break;//如果连续不上就放弃该搜索状态                }            }        }    }    return 0;}

不是很喜欢这种暴力写题的方式,但比较简单。这里要放大等差,要改变搜索的起始位置,要有终止状态。
最后输出210


第三题,承压计算

这道题在比赛的时候我知道怎么写,但我怕输入跟第一题一样麻烦,所以心态爆炸就没有写。思路类似杨辉三角的计算,找出最小的一个称重器,题目给出的数字除以它应该能得到一个比值,再乘以最大的那个就能得到答案。

#define Debug#include <stdio.h>#define INF 0x3f3f3f3f#define M 2086458231using namespace std;double a[31][31];int main(){    #ifdef Debug        freopen("C:\\Users\\Yamork\\Desktop\\read.txt","r",stdin);    #endif        double min=INF,max=-INF;    for(int i=1;i<30;i++)        for(int j=1;j<=i;j++)        {            scanf("%lf",&a[i][j]);        }    for(int i=1;i<31;i++)        for(int j=1;j<=i;j++)        {            if(j==1)            {                a[i][j]+=a[i-1][j]/2;            }            else if(j==i)//避免j=1时重复计算,用else if            {                a[i][j]+=a[i-1][j-1]/2;            }            else                a[i][j]+=(a[i-1][j]+a[i-1][j-1])/2;        }    for(int i=1;i<31;i++)    {        printf("%d:\n",i);        for(int j=1;j<=i;j++)        {            printf("%d:",j);            printf("%lf    ",a[i][j] );        }        printf("\n\n");    }    for(int i=30;i<31;i++)    {        for(int j=1;j<=i;j++)        {            if(a[i][j]>max)            {                max=a[i][j];            }            if(a[i][j]<min)            {                min=a[i][j];            }        }    }    printf("%lf,%lf\n",min,max );    printf("%lf\n",1.0*M/min*max );    return 0;}

附上输出

1:
1:7.000000
2:
1:8.500000 2:11.500000
3:
1:11.250000 2:18.000000 3:13.750000
4:
1:14.625000 2:16.625000 3:22.875000 4:8.875000
5:
1:15.312500 2:16.625000 3:23.750000 4:24.875000 5:5.437500
6:
1:15.656250 2:16.968750 3:28.187500 4:32.312500 5:19.156250 6:3.718750
7:
1:14.828125 2:25.312500 3:28.578125 4:31.250000 5:29.734375 6:16.437500 7:5.859375
8:
1:12.414063 2:26.070313 3:31.945313 4:34.914063 5:36.492188 6:32.085938 7:16.148438 8:8.929688
9:
1:11.207031 2:24.242188 3:33.007813 4:40.429688 5:44.703125 6:37.289063 7:29.117188 8:17.539063 9:5.464844
10:
1:12.603516 2:22.724609 3:35.625000 4:45.718750 5:49.566406 6:44.996094 7:40.203125 8:26.328125 9:14.501953 10:3.732422
11:
1:10.301758 2:23.664063 3:33.174805 4:45.671875 5:52.642578 6:55.281250 7:50.599609 8:36.265625 9:22.415039 10:13.117188 11:4.866211
12:
1:6.150879 2:17.982910 3:31.419434 4:42.423340 5:50.157227 6:59.961914 7:58.940430 8:48.432617 9:34.340332 10:21.766113 11:12.991699 12:4.433105
13:
1:12.075439 2:21.066895 3:33.701172 4:38.921387 5:47.290283 6:64.059570 7:60.451172 8:62.686523 9:43.386475 10:37.053223 11:22.378906 12:15.712402 13:11.216553
14:
1:10.037720 2:19.571167 3:30.384033 4:43.311279 5:50.105835 6:64.674927 7:65.255371 8:67.568848 9:54.036499 10:43.219849 11:37.716064 12:27.045654 13:16.464478 14:12.608276
15:
1:8.018860 2:20.804443 3:32.977600 4:37.847656 5:51.708557 6:60.390381 7:73.965149 8:71.412109 9:68.802673 10:51.628174 11:48.467957 12:33.380859 13:29.755066 14:17.536377 15:9.304138
16:
1:12.009430 2:17.411652 3:28.891022 4:38.412628 5:47.778107 6:61.049469 7:72.177765 8:80.688629 9:75.107391 10:64.215424 11:52.048065 12:48.924408 13:37.567963 14:30.645721 15:19.420258 16:13.652069
17:
1:14.004715 2:15.710541 3:31.151337 4:34.651825 5:51.095367 6:58.413788 7:72.613617 8:78.433197 9:79.898010 10:70.661407 11:65.131744 12:59.486237 13:47.246185 14:36.106842 15:28.032990 16:19.536163 17:10.826035
18:
1:9.002357 2:22.857628 3:27.430939 4:34.901581 5:44.873596 6:63.754578 7:74.513702 8:77.523407 9:87.165604 10:78.279709 11:71.896576 12:71.308990 13:59.366211 14:44.676514 15:41.069916 16:27.784576 17:21.181099 18:14.413017
19:
1:11.501179 2:24.929993 3:32.144283 4:35.166260 5:48.887589 6:61.314087 7:75.134140 8:82.018555 9:84.344505 10:90.722656 11:84.088142 12:75.602783 13:66.337601 14:60.021362 15:43.873215 16:41.427246 17:26.482838 18:18.797058 19:13.206509
20:
1:14.750589 2:20.215586 3:36.537138 4:39.655272 5:46.026924 6:57.100838 7:75.224113 8:87.576347 9:88.181530 10:91.533581 11:88.405399 12:81.845463 13:75.970192 14:64.179482 15:58.947289 16:45.650230 17:42.955042 18:30.639948 19:19.001783 20:9.603254
21:
1:12.375295 2:19.483088 3:29.376362 4:44.096205 5:49.841098 6:60.563881 7:69.162476 8:83.400230 9:95.878939 10:98.857555 11:94.969490 12:90.125431 13:84.907827 14:76.074837 15:67.563385 16:54.298759 17:45.302636 18:44.797495 19:31.820866 20:23.302519 21:13.801627
22:
1:12.187647 2:22.929191 3:25.429725 4:44.736283 5:54.968651 6:62.202489 7:69.863178 8:79.281353 9:95.639585 10:102.368247 11:100.913523 12:99.547461 13:90.516629 14:84.491332 15:77.819111 16:67.931072 17:57.800698 18:46.050066 19:41.309180 20:29.561692 21:25.552073 22:10.900814
23:
1:8.093824 2:19.558419 3:30.179458 4:38.083004 5:54.852467 6:61.585570 7:70.032834 8:83.572266 9:89.460469 10:103.003916 11:106.640885 12:107.230492 13:101.032045 14:93.503981 15:84.155221 16:74.875092 17:69.865885 18:53.925382 19:47.679623 20:43.435436 21:32.556883 22:23.226443 23:9.450407
24:
1:11.046912 2:17.826121 3:28.868939 4:39.131231 5:54.467736 6:61.219019 7:68.809202 8:84.802550 9:87.516367 10:104.232192 11:110.822400 12:109.935688 13:106.131268 14:98.268013 15:94.829601 16:81.515157 17:78.370488 18:65.895633 19:56.802502 20:48.557530 21:45.996159 22:29.891663 23:25.338425 24:10.725203
25:
1:6.523456 2:16.436517 3:27.347530 4:35.000085 5:49.799483 6:60.843377 7:70.014110 8:79.805876 9:90.159458 10:104.874280 11:113.527296 12:113.379044 13:116.033478 14:108.199641 15:101.548807 16:97.172379 17:80.942822 18:77.133061 19:64.349068 20:54.680016 21:53.276845 22:45.943911 23:35.615044 24:23.031814 25:8.362602
26:
1:5.261728 2:13.479986 3:28.892023 4:40.173807 5:45.399784 6:58.321430 7:67.428744 8:82.909993 9:90.982667 10:106.516869 11:117.200788 12:117.453170 13:118.706261 14:121.116559 15:109.874224 16:107.360593 17:91.057601 18:85.037942 19:73.741064 20:63.514542 21:61.978430 22:53.610378 23:49.779478 24:32.323429 25:23.697208 26:12.181301
27:
1:9.630864 2:16.370857 3:28.186005 4:43.532915 5:49.786796 6:56.860607 7:64.875087 8:82.169369 9:95.946330 10:100.749768 11:116.858829 12:118.326979 13:127.079716 14:121.911410 15:121.495392 16:113.617408 17:102.209097 18:97.047771 19:82.389503 20:73.627803 21:69.746486 22:60.794404 23:56.694928 24:45.051453 25:30.010319 26:25.939254 27:15.090650
28:
1:11.815432 2:20.000861 3:28.278431 4:41.859460 5:54.659856 6:60.323701 7:65.867847 8:78.522228 9:97.057849 10:100.348049 11:112.804298 12:124.592904 13:129.703347 14:128.495563 15:128.703401 16:119.556400 17:113.913252 18:108.628434 19:91.718637 20:79.008653 21:79.687145 22:67.270445 23:67.744666 24:58.873191 25:42.530886 26:34.974786 27:23.514952 28:13.545325
29:
1:10.907716 2:24.908146 3:28.139646 4:40.068946 5:53.259658 6:64.491778 7:68.095774 8:77.195037 9:93.790039 10:101.702949 11:111.576174 12:121.698601 13:136.148126 14:134.099455 15:136.599482 16:133.129900 17:121.734826 18:115.270843 19:101.173535 20:87.363645 21:85.347899 22:74.478795 23:71.507555 24:66.308928 25:55.702038 26:41.752836 27:31.244869 28:22.530139 29:7.772663
30:
1:5.453858 2:17.907931 3:26.523896 4:34.104296 5:46.664302 6:58.875718 7:66.293776 8:72.645406 9:85.492538 10:97.746494 11:106.639562 12:116.637387 13:128.923363 14:135.123790 15:135.349469 16:134.864691 17:127.432363 18:118.502835 19:108.222189 20:94.268590 21:86.355772 22:79.913347 23:72.993175 24:68.908242 25:61.005483 26:48.727437 27:36.498853 28:26.887504 29:15.151401 30:3.886331
min:3.886331 max:135.349469
72665192664.000000

如果没算错最后答案应该是72665192664了,然而当时这题我没写呀~


第四题,方块切割

听说大佬们都是直接暴力搜索36^2的复杂度,写完大题回来发现答案算好了交上去的。然而我连写都没写,很烦。
这题从思路上来讲就是一笔画,因为对称结构,所以左半部分可以忽视,整个图可以分解成49个点,但简化一下只看半张图,从最中间的点出发,看到达除了出发点所在的边以外的边的走法共有多少种就可以了。

 #include <stdio.h> using namespace std;int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};//右,下,左,上int a[7][4],d[7][7],t[7][7],count=0,tx,ty;void dfs(int y,int x){    if(a[y][x]==1)    {        count++;        return;    }    for(int i=0;i<4;i++)    {        tx=x+dx[i];        ty=y+dy[i];        if(0<=tx&&tx<4&&0<=ty&&ty<7&&d[tx][ty]!=1)        {            d[x][y]=1;//对于搜过的地方设置路障            dfs(ty,tx);        }        d[x][y]=0;//消灭路障    }}int main(){    int sx=0,sy=3;    for(int i=0;i<7;i++)    {        if(i<4&&i>=0)        {            a[0][i]=1;            a[6][i]=1;        }        if(i<3&&i>=0)            a[i][0]=1;//因为四个方向对称,所以上面的当作出口        a[i][3]=1;    }    dfs(3,0);    printf("%d\n",count );    return 0;}

我最后得到的结果是328

估计在大神眼里就是水题吧,我算出来的结果,我自己都不知道对不对。这一方面的题做得太少了,我还需要加强训练。一直在想如何搜索才能让一笔画遍历整个轮廓又不会搜索同一条路径里的元素。后来发现只要循环完清零就可以了。

杂七杂八的队列啊,栈啊,一直在想,发现想太多。希望有不对的地方大神们能帮忙挑出来!今天先做到这吧!明天继续加油。

0 0
原创粉丝点击