Uva 400.Unix is

222

怎么看这道题都是理解比实现难

特别是英语版,最后如何输出被绕进去了

大概意思就是在保证每行不超过60字符的情况下,尽可能让行数最少输出。

注意三目运算符的运算优先度,记得加括号

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

class LOVE{
    private:
        static const int len=65;
        static const int maxn=105;

    public:
        bool Do(){
            int n,Max=0;
            if(!(cin>>n))
                return false;
            cout<<"------------------------------------------------------------\n";
            string str[maxn];
            for(int i=0;i<n;i++){
                cin>>str[i];
                Max=max(Max,(int)str[i].size());
            }
            sort(str,str+n);

            int L,H;
            for(int i=n;i>0;i--){
                L=i;
                H=n/L+(n%L?1:0);
                int size=Max*L+2*(L-1);
                if(size<=60)break;
            }
            //cout<<"\n"<<L<<" "<<H<<"\n";
            for(int i=0;i<H;i++){
                for(int j=0;j<L;j++){
                    cout<<str[i+j*H];
                    for(int k=0;k<(j==L-1?0:2)+Max-(int)str[i+j*H].size();k++)
                        cout<<" ";
                }
                cout<<"\n";
            }
            return true;
        }
};

int main(){
    //freopen("in.txt","r",stdin);
    std::ios::sync_with_stdio(false);
    LOVE LIVE;
    while(LIVE.Do());
    return 0;
}
发布评论
  • 点击查看/关闭被识别为广告的评论