写在前面
好久没更新公众号和博客了,因为最近在研究新的方向,所以很少发文。
笔者接触编程只有一年,这一年间主要研究启发式算法在运筹学中的应用。但是由于编程基础薄弱,在进一步研究复杂运筹学问题时发现基础算法不过关导致写出的代码运行速度很慢,因此很苦恼。所以决定这个暑假补习一下基础算法,主要是刷一些简单的ACM入门题。偶尔会发一些刷题笔记(偶尔!)。和作者有类似目标的同学可以一起交流共勉!
目前在看的教程:
北京理工大学ACM冬季培训课程
算法竞赛入门经典/刘汝佳编著.-2版
课程刷题点
Virtual Judge
下面继续Day1。(上传密码xzmtql)
第二天刷题习惯了一点,但还是遇到很多奇奇怪怪的事情。。。等明天考完试放假了,好好刷一刷。。。哎。。。
Day1-C - A problem of sorting
本来刷了两道题,以为自己明白一点输入输出了,结果这题还是被输入输出搞了一下。

简单的说就是输入人名+生日年份,按年龄排序。乍一看和A一样,所以写的时候就换了用pair写(上次用的struct)。结果提交WA。再仔细一看,哦,人名可以有space,那直接cin就有问题了。要考查的应该是getline、cin.getline。(这个北理第一讲的学长还特地提到过)
把getline和cin.getline都写了一遍想起来以前查过string转int,可以用int atoi(const char *nptr); str.c_str转string 为char 型数组(我突然发现自己不知道markdown怎么打出两个星号)。大概是这样:
string str;
getline(cin, data);
int num = atoi(data.c_str());
然后第二个坑点,getline()前面如果用了cin读取一行的数据,后面的回车符不读取,getline()的时候就会读取。所以cin或者scanf后要加一个cin.get()。
白花花的时间就浪费在这些没打好的基础上啊!!!
再记一下cin.getline得到的是char*,可以通过strlen得到长度。
Mark一下完整代码:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
// #define LOCAL
bool comp(pair<string, int>p1, pair<string, int>p2)
{
return p1.second > p2.second;
}
int main()
{
#ifdef LOCAL
freopen("data.in", "r",

一位编程新手在暑期深入学习基础算法,通过刷ACM入门题提升编程技能,记录了在解决排序和三角形分区问题中遇到的挑战及解决方案。
最低0.47元/天 解锁文章
173

被折叠的 条评论
为什么被折叠?



