小毅儿提示您:看后求收藏(二千零一十九年ACM一十月末总结,点醒梦中人,小毅儿,笔趣阁),接着再看更方便。

请关闭浏览器的阅读/畅读/小说模式并且关闭广告屏蔽过滤功能,避免出现内容无法显示或者段落错乱。

下面是我进大学以后第一次进队(ACM:一种全国性的计算机比赛)后,进行了第一次模拟比赛,一开始大一进队一共有50个人,到了现在(不到一年),仅剩23个人了(现在的大二还剩7个人)。

当时的我是真正意义上的小萌新,看看当时写的总结,还是挺有感慨的。。。

......

2019年ACM10月末总结

从开学到现在,来到队里也有蛮长时间的了,也迎来了队内的第一次正规的模拟比赛,心情说不紧张肯定是假的,但在真正开始比赛的期间,紧张感,压迫感,是加大还是减少,谁又能说的清楚,反正赛已经比完了,结局已定,往事不堪回首……

但回顾这些日子以来,自己从编程零基础到现在C语言的知识已经基本掌握(C++的知识点大部分也都会),看着一行一行代码从自己手中产生,再一个删除键从眼前消失,细细回想好像真的码下了不少代码。

废话不多说,这个比赛的主旨还是巩固自己不会的知识点,还是让代码来说话更能体现这篇总结最根本的价值吧。

下面是对这次比赛的一些解析,如果对这方面不敢兴趣的人,可以直接跳过这部分,看最后的总结。。。(如果不感兴趣:题目1001-1006,直接跳到1006解析那里就可以了)

头文件我就省了,不然占了不少行。。。

1001.qp师哥的亲切关怀,最水的题

这道题一开始就错了,而且错了两次(自己表示心态受到了影响),看到是最水的题自己都做不出来,还是蛮难过的(不过到了最后还好,别人也做不出来)。

代码

intin()

{

dble,b;

>>>b;

(1t<<int(*b+1e-8)<<endl;

(2)int=*b;

retrn0;

}

0.58100

57(如果不加1e-8的话,就会出现精度损失)

Prgrendedithexide:0

知识点

(1)最重要的:精度问题

(2)以前也有专门研究过,就是关于四舍五入到百分位或是十分位,跟直接取整数部分的一些区别,我觉得还是比较有用的。

先说这道题的直接取整数吧,答案直接用int直接转换,没什么可以说的。

再说关于四舍五入的问题(以四舍五入到百分位为例):

1.在输出时直接控制就行(例printf(“%6.2d”,),或者直接把那个6去掉printf(“%.2d”,),这两种都是可行的,是四舍五入,而不是直接舍去百分号之后的部分。

2.在大量数据都需要控制的时候用到下图的绿色字体

intin()

{

dble=1.666;

(2);

retrn0;

}

1.67

Prgrendedithexide:0

3.当然还有更正宗的解法(以ney为例)

ney=ney*100+0.5;

ney=(int)(ney);将ney乘100加上0.5后的值取整

ney/=100;

第一种方法在需要大量小数运算的情况下容易损失精度,这三种方法应当灵活运用。

1002.第几天

这道题在超时一次后就过了(在刚W掉1001两次之后,又超时了简直心态爆炸),不过还好bg让我在最短时间内找出来了。

下面直接附上自己的代码(如果大佬们有其他的,更好的,更简单的可无视我的)

代码

int[13]={0,31,0,31,30,31,30,31,31,30,31,30,31};

vidjdge(intx)

{

if(x%400==0||(x%4==0&p;&p;x%100!=0))

{

[2]=29;

}

else[2]=28;

}

intin()

{

std::is::sy_ith_();

intx,y,z,s;

hile(nf(“%d/%d/%d“,&p;x,&p;y,&p;z)!=EOF)因为一开始用的都in,这次有/,换用nf输入,却没有加!=EOF,让它坑了自己一把,因为超时,我还加了一行std::is::sy_ith_(),当然如果我不加!=EOF的话没什么卵用

{

s=0;

jdge(x);

fr(inti=1;i<=y-1;i++)

{

s=s+[i];

}

s=s+z;

}

retrn0;

}

错误分析

in与nf转换之间不熟悉,hile的括号内in用习惯了,不加!=EOF,但在使用nf的情况下切记不可马虎。(因为这道题比较简单就不详解了)

1003.你能找到这个数字么

错误分析

(我是从头开始一道一道题做的)好吧,我承认我做不出这道题来。(一直到最后也没A出来)

在经历了四次超时后,当别人都A出好几题来的时候,当时间缓慢爬过一个多小时之后,我仍在做1003,自认为是简单题,可能这就是高估自己能力的代价吧。

啊,多么痛的领悟~~

啊,我想哭但是哭不出来~~

回顾一下我是怎么说服自己在超时一次后又把代码交上的

(1)三个fr循环都是500的,肯定超时啦(我没考虑到,能力有限)

(2)所以第二次我就简单的加入了一行std::is::sy_ith_();

思想简单的我以为这就行了,所以再挂一次。

(3)第三次我又in全都转换为nf,t全都转化为printf,以为这样能过,好吧是我单纯了。

(4)第四次,我终于长了点心眼从自己的程序入手,看能不能简化(自认为超时的程序是对的,毕竟样例过了,好吧,样例过了的,程序错的时候大有时候),我把程序中加入了brek终止,以为这样可以阻止超时,当然现在看透一切的我对以前的我起不了任何歹心,毕竟是自己蠢。

在四次超时后,我实在是想不出任何办法了,才做的下一题(差距就此产生)

代码(在讲过之后又错了2次)

#ilde

#ilde

#ilde

singnesestd;

int[505],b[505][505],d[250005];

intin()

{

intL,N,M;

int=0;(不能写在hile里,不然的值在每次循环都会变为0;

hilein>>L>>N>>M)

{

fr(inti=1;i<=L;i++in>>[i];

fr(inti=1;i<=N;i++in>>b[i];

fr(inti=1;i<=M;i++in>&gt[i];

inttt=0;

fr(inti=1;i<=L;i++)

{

fr(intj=1;j<=N;j++)

{

d[++tt]=[i]+b[j];

}

}

srt(d+1,d+1+tt);

intS;

>S;

intn;

fr(inti=1;i<=S;i++)

{

>n;

ints=0;

fr(intj=1;j<=M;j++)

{

int=ler_bnd(d+1,d+1+tt,n[j])-d;

if(d[]==n[j])

{

s=1;

brek;

}

}

if(s==0t<<“NO“<<endl;

}

}

retrn0;

}

知识点

(1)还是对++i和i++的理解不够

[j++]=I相当于[j]=I;j++;

d[++tt]=[i]相当于tt++;d[tt]=[i];

以前我总是分开用,在括号内刚一看见还是有些不太习惯(人总得去适应不是)。

(2)关于ler_bnd()和pper_bnd()的常见用法

(当时师哥在讲ler_bnd的时候我就是半懂非懂,果然要是用在实际编码上,我这个半吊子水平立马漏出了原形。从此得出真理:古人诚不欺我,实践才是检验真理的唯一标准,)

本章未完,点击下一页继续阅读。

都市言情小说相关阅读More+

极限微操

印无双

普渡慈航

Ho1N

与子卿书信三十五年

书信子卿

段氏大表哥

无心柳

六指儿

朝令夕行

劫斩

揽境