MEGChai MEGChai
  • 文章
    • 随笔
    • 笔记
    • 教程
  • 关于
首页 › 数据结构与算法 › 在线评测 › UVaOJ 400 - Unix ls
AOAPC II

UVaOJ 400 - Unix ls

Chai
2021-11-24 0:00:00在线评测阅读 434

问题描述

p400

原题链接:UVaOJ 400 - Unix ls

相关说明:本题为《算法竞赛入门经典(第2版)》例题 5-8

解法一:字符串排序

读入字符串的时候记录最长文件名长度 max_fl ,再结合文件数量 num 去计算出行列数,排序后输出。值得注意的是,排序后的字符串 vector 需要按照列主序输出,因此需要计算偏移量 idx = c * row + r ,与通常见到的行主序不同。

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <bits/stdc++.h>
 
using namespace std;
 
const int MAX_LINE_LENGTH = 60;
 
int main() {
  int num;
  while (cin >> num) {
    int max_fl = 0;  // max_filename_length
    string name;
    vector<string> filename;
    for (int i = 0; i < num; ++i) {
      cin >> name;
      filename.push_back(name);
      max_fl = max((int)name.length(), max_fl);
    }
    int cols = (MAX_LINE_LENGTH - max_fl) / (max_fl + 2) + 1;
    int rows = (num + (cols - 1)) / cols;  // Ceil
    sort(filename.begin(), filename.end());
    cout << string(60,'-') << endl;
    for (int r = 0; r < rows; ++r) {
      for (int c = 0; c < cols; ++c) {
        int idx = c * rows + r;
        if (idx < num)
          cout << setiosflags(ios::left)
               << setw(c == cols - 1 ? max_fl : max_fl + 2) << filename[idx];
      }
      cout << endl;
    }
  }
  return 0;
}
Python
1
#TODO
AOAPC II UVaOJ
赞赏 赞(0)
订阅
提醒
guest
guest
0 评论
内嵌评论
查看所有评论
  • 0
  • 0
Copyright © 2020-2023 MEGChai.
  • 文章
    • 随笔
    • 笔记
    • 教程
  • 关于
# 生活 # # 心理 # # 编程 # # 音乐 # # 写作 #
Chai
95
文章
4
评论
58
喜欢
wpDiscuz