zoukankan      html  css  js  c++  java
  • NJUOJ 上机13 感想

    题目一

      输入一个整数加法算式,然后非降序输出。

        string mystr;
        vector<int> vec;
        while(getline(cin, mystr,'+')) //getline()根据+号作为分隔符读取输入,储存到mystr
            vec.push_back(stoi(mystr)); //stoi()将mystr储存为带符号整数
        
        sort(sum.begin(),sum.end()); //.end()返回末尾元素的下一位置的迭代器
    
        for(size_t i = 0; i < vec.size()-1; i++) //不给最后一个元素输出,放到for结束后输出。vector需要用size_t类型的下标
            cout << vec[i] << '+';
        cout << vec.back();//.back()才是返回最后一个元素的引用

      又学到了新的输入方法。vector好用,不过还需要多学一点再用……

    题目四

      对于一个字符串S,判断它是否能通过重复某一子串至少1次构成。例如“abab“可以由”ab“重复1次构成,而”aba“则不可能通过重复子串构成。

    int n = s.size();
    //...
    // 获取到了一个合法的字串长度,记为c = n / i;
    string t = "";
    for(int j = 0; j < c; j++)
    {
        t+=s.substr(0,i);
    }
    if(t == s)
        return true;
    //...

      通过将指定字串通过复制与原串比较,字串就是s.substr(0,i)

    题目五

      现有一根长度为N的绳子,按照如下两个规则分成K段:
        1) 分割后每段的长度只能为A、B或者C;
        2) 分割后的总段数最大。
      比如绳子长度为5,A、B、C分别为5、3、2,则分成3和2能得到最大段数。

      就是一个买鸡的问题……参考代码是完全搜索,但是理论上可以通过排序ABC来达到一些优化的效果。未经尝试,如果错误请指正。

      

    //a > b > c
    remain = n - a*x - b*y;
    if(remain>=0 && remain%c==0)
        cout << x + y + remain / c; 
    //break, ...

    题目七

      程序设计竞赛中,OJ系统的排名一般遵循以下规则:
      每个参赛者(队伍)都有一个唯一的编号,当比赛结束时,
        1) 通过题数较多的排名高;
        2) 如果通过题数相同,则总花费时间较少的排名高;
        3) 如果经过上面两条后排名仍相同,则按照编号递增排序。
      某道题的花费时间为第一次正确提交的时间加上罚时——之前每次错误提交都会增加20分钟的罚时,队伍的总花费时间为所有通过的题目的花费时间之和。
      现有一张比赛结束时的提交记录表,依据上述规则给出队伍的排名。提交记录表的格式如下:

        队伍编号    问题编号    提交时间(秒)    是否通过
            1                2            3000                      0
            1                2            3100                      1
            2                1            4200                      1


      “是否通过“一列中,1表示正确通过,否则为0。假设一共有3只队伍,那么根据上表,队伍1和队伍2各通过1题,队伍3一道题都没能通过。队伍1总花费时间为3100+1200=4300,队伍2总花费时间为4200。因此最终排名为:2,1,3。

      memset()用来初始化结构体,真是没想到……以前都是拿来初始化动态数组的。

      还有就是排序算法。按理说这个题目是很简单的(在语文能力良好的情况下),记录每一条数据,ac则加罚时,否则wa多少次都不罚时。越到后期每题的耗时就会越高,因为计入总时长的并不是上一题ac的时间到本题ac的时间。

      贴一下排序算法。之前也有这样的思路,但是不知道为什么没有效果……

    struct info {
        int no; //team number
        int ac;  
        int tt; //total time
    };
    bool zhcmp(const info&a, const info &b)
    {
        if (a.ac != b.ac)
        {
            return a.ac > b.ac;
        }
        if (a.tt != b.tt)
        {
            return a.tt < b.tt;
        }
        return a.no < b.no;
    }
  • 相关阅读:
    C# 使用FileSystemWatcher类来对一个日志文件的变化进行实时监测
    C# 高效提取txt文档最后一行数据
    C# 高效提取txt文档最后一行数据
    Bat 批处理之 for/f 详解
    Bat 批处理之 for/f 详解
    windows bat命令 如何获取文件最后一行
    windows bat命令 如何获取文件最后一行
    C#读取文件或者字符流的最后几行,类似linux的tail命令OK
    C#读取文件或者字符流的最后几行,类似linux的tail命令OK
    C#开源文件实时监控工具Tail&TailUI
  • 原文地址:https://www.cnblogs.com/KakagouLT/p/8125185.html
Copyright © 2011-2022 走看看