Life of xhu

About

开题搞掂! & HOJ_1430(wa) & HOJ_1435

Mar 05, 2014

  |   #日常   |   #HOJ

今天终于搞定了开题报告,看了半天的文档才知道我到底要做什么,真是残念啊。。。

话说回来,明天要是让我自己说我还能说明白,如果听我讲的老师问什么问题,我可能就要扑街了>_<

嗯,只要不被毙掉就好,我已经做好出丑的准备了~

闲暇之余看了看我想做的code2pdf项目,百度上当然是一个结果都没有,google上也没有,上Github一看,倒是有几个脚本语言的项目是这个名字,但是都不符合我的要求,因为我需要生成的PDF里能有带有源码高亮,这个我觉得用Javascript是最好做的,因为现成的高亮库很多,而且在页面上生成后就可以直接输出PDF了,这绝对是一大优势。

至于Ruby,我看了看一些代码高亮的gem,大部分都只支持在网页上渲染,这不符合我的要求,因为我需要是一个能在本地渲染好然后输出到PDF,找了半天,有一个gem让我眼前一亮,就是rouge

这个gem之所以吸引我,就是因为它提供了一个终端的指令rougify,这个指令可以对特定文件进行高亮输出,然后我想,如果我使用这个gem,在内部获得高亮并输出到PDF就可以了。而且在阅读rouge源码的过程中,我发现这个gem不愧是号称最轻量级的代码高亮gem,真是写的太简洁优美了,只要花点时间,调用这个gem的parserlexer应该不难。

刚刚还收到了去哪儿网通知笔试的邮件,毕设开题也差不多了,马上就要投入找工作的节奏中去了。

Fight!!

~~~~~~~~~~~~我是萌萌的昏割线~~~~~~~~~~~~~

1430(未完成):这道题感觉应该是很简单的,其实就是对车辆的路程时间循环相加,当结果大于等于到达车站的时间时求余,余数最小的就是等待时间最少的情况。

题目很简单,很快就写出代码了,结果WA,上POJ一看,有些输入情况可能在行末有空格,加上判定语句,有空格的情况结果正确了,提交,还是WA,然后又改了一些地方,可是始终没办法,就是不停地WAWAWA。。。

算了,不纠结这种纯数学题了,放代码吧:

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cstdlib>
using namespace std;

typedef struct Route{
    int durations[15];
    int num_of_durations;
}Route;

int main(){
    Route routes[30];
    string sl, el, line;
    char tmp[10];
    int N, at, sum, min, tmp1;
    while(cin >> sl && sl != "ENDOFINPUT"){
        cin >> N;
        for(int i = 0; i <= N; i++){     //不知道为什么第1次也就是i = 0的时候循环体没有执行,所以改成了<= N
            getline(cin, line);
            for(int j = 0, k = 0, count = 0; j < line.length(); j++){
                int l;
                if(j == line.length() - 1){
                    if(line[j] == ' '){
                        for(l = 0; l < j - k; l++)
                            tmp[l] = line[k + l];
                    }else{
                        for(l = 0; l <= j - k; l++)
                            tmp[l] = line[k + l];
                    }
                    tmp[l] = '\0';
                    routes[i].durations[count++] = atoi(tmp);
                    routes[i].num_of_durations = count;
                    break;
                }else if(line[j] == ' '){
                    for(l = 0; l < j - k; l++)
                        tmp[l] = line[k + l];
                    tmp[l] = '\0';
                    k = j + 1;
                    routes[i].durations[count++] = atoi(tmp);
                }
            }
        }
        cin >> at;
        cin >> el;
        min = INT_MAX;
        for(int i = 1; i <= N; i++){
            sum = 0;
        tmp1 = 1;
            while(tmp1++){
                sum += routes[i].durations[(tmp1 - 2) % routes[i].num_of_durations];
                if(sum >= at){
                    if(sum - at <= min)
                        min = sum - at;
                    break;
                }
            }
        }
        cout << min << endl;
    }
}  

1435:简单的大整数求和,这道题我使用C++string做的,感觉很方便啊有木有,真的想不到C++原来已经这么屌了,真的越来越喜欢这门语言了~

对了,C++中的string,和C中的char *本质上是一样的,也就是说,C++string型变量本身就是代表地址,在需要传址的地方,不需要使用取址符号&

代码如下:

#include <iostream>
#include <string>
using namespace std;

string add(string str1, string str2){
    int len1 = str1.length(), len2 = str2.length(), plus = 0, tmp;
    string result = "";
    if(len1 > len2){
        for(int i = 0; i < len1 - len2; i++)
            str2 = "0" + str2;
    }else if(len2 > len1){
        for(int i = 0; i < len2 - len1; i++)
            str1 = "0" + str1;
    }
    for(int i = str1.length() - 1; i >= 0; i--){
        tmp = str1[i] - '0' + str2[i] - '0' + plus;
        if(tmp > 9){
            tmp -= 10;
            plus = 1;
        }else
            plus = 0;
        result = (char)(tmp + '0') + result;
    }
    if(plus)
        result = "1" + result;
    return result;
}

int main(){
    string input, sum;
    sum = "0";
    while(cin >> input && input != "0"){
        sum = add(sum, input);
    }
    cout << sum << endl;
}