2017.12.17 USA CO月赛铜组感想

2017.12.17 USA CO月赛感想

First:
第一次打USA CO,贼紧张啊。。。铜组卡了3个小时,不过还好AK了。

Next:
第一题,老刘称之为小学奥数题,貌似可以O(n)过,然而数据量不大,我直接二维bool数组暴力。然而,样例都卡了很久,做完第二题回来才发现坐标有负数。。。改完直接AC,没什么好说的。

Then:
第二题,这题是我花的时间最少的,可能是看题比较仔细,一下子就理解了。关键是要清楚其交换顺序,每次交换将第i号位的数换到a[i]号位上,由于题目给的是交换后的顺序,所以反向读入a数组。
int x;
cin>>x;
a[x]=i;

然后3次模拟,倒推出答案。由于每个数都有多个属性:id,当前位置,和交换后要去的位置,所以自然而然的用了结构体。

And Then:
前两题都没什么,最后一题卡了我两个小时(中间吃了个饭)。。。
读入,模拟我都一条龙地没有问题。然而在判断ans++的时候,如何判断的问题卡了我很久。由于每次都有牛的产奶量变化,可能原来他在榜上,现在与别人并列;可能他原来不在榜上,现在上榜了······所以我最开始用了一堆if语句来判断,然后把自己绕进去了,逻辑一点儿都不闭合,脑袋炸穿。吃完饭,我觉得重新敲模拟计算部分。结果发现了一个神奇的方法:只要用一个bool数组记录牛是否在榜上。每次根据记录改变牛的产奶量后,都用一个for循环找一下最大产奶量,再用一个for循环把每头牛的产奶量与最大值比较,如果一样且该牛不在榜上,把他标记上榜;如果不一样且该牛在榜上,把他拉下榜。这两个if语句只要有一个执行,就ans++。(tle,不存在的。这是铜组题哥们儿)
然而现实很残酷,我连样例都没过。
结果又静态查错半小时,发现最大值没有初始化。我的天哪。。。
以后如果有认为还不错的算法没过样例,把申明的所有变量一个一个看过去,这是我目前认为最有效的查错方法。

Finally:
总之结果算是AK了。。。银组加油吧。。。别被吊锤啊!

你可能感兴趣的:(新しいスタート)