第二阶段:由于刚接触C++,所以训练一些不需要高深算法的题目,巩固C++语言。
训练如下题型:1008、1108(辗转相除法)、1061、2035(提示:解法一:改进后的暴力。解法二:二分加速)、1021、1205、1071。
训练心得及感想:
1061:很扯淡的用了SWITCH,然后很扯淡的分成3块来计算,到后来才发现N=N%4一条语句就能把N=N%2,N=N%1一起归纳了。N=N%4+4;这个+4算亮点了吧,省去了IF(0==N)。
2035:尝试了次最暴力的解法,很自然的就溢出了。改进后的暴力思路如下:一个大于10000的数乘以一个大于1的整数,无论这个正整数是什么,其结果一定大于10000。即a>10000,d>0…a=b*10000+c…a*d=(b*10000+c)*d=b*10000*d+c*d。当你取最后三位时,前面大于10000的就会自动舍去了,所以只需取模应算。二分加速指的是,如N的100次方可以看成N的50次方的平方,这样就从99次乘法降为50次乘法了。于是乎,作为ACM新手的我很华丽的跳过了,以后再回来实现这个解法吧。
1021:很快的就把算法写出来了,结果RE了。发现一般数据大的题都有规律可循。经过几次删减AC答案原来可以很短,哭笑不得。
1205:之前做一直WA,后来才发现SUM会溢出,要用DOUBLE。
1071:简单的积分问题,主要是熟悉iomanip的应用,还有一种回到高中的感觉,怀念ing。
总结:第二阶段训练的时间很短,从女友家回来没几天,就被父母拉去逛亲戚家。才静下心来训练几天,明天又要去女友家了。不过去拔花生体验一下也是很快乐的。ACM总算入门了,这个假期有ACM有女友,足矣~下阶段打算把算法导论和C++ PRIMER看一部分,然后应该就迎接开学了。
本人的C++版AC解法:
1008
#include <iostream>
using namespace std;
int main()
{
}
1108
#include <iostream>
using namespace std;
int main()
{
}
int gyx(int m,int n)
{
}
1061
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
}
2035
#include <iostream>
using namespace std;
int main()
{
}
1021
#include <iostream>
using namespace std;
int main()
{
}
1205
#include <iostream>
using namespace std;
int main()
{
}
1071
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
}