蓝桥杯打卡Day5


文章目录

  • 日志排序
  • 重复者

一、日志排序IO链接

 本题思路:本题就是根据就是排序的知识点,在sort内部可以使用仿函数来改变此时排序规则。

#include <bits/stdc++.h>

const int N=10010;
int n;
std::string logs[N];

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);std::cout.tie(nullptr);
    
    while(std::getline(std::cin,logs[n]))
        if(logs[n].size()) n++;
        else break;
    //内部排序
    sort(logs,logs+n,[&](std::string&a,std::string&b){
        std::stringstream sstreama(a),sstreamb(b);
        
        //将空格分开的字符串读入sa,sb中
        std::string sa[4],sb[4];
        for(int i=0;i<4;i++){
            sstreama>>sa[i];
            sstreamb>>sb[i];
        }
        
        //如果当前消耗时间相等,则需要判断当前开始时间
        if(sa[3]==sb[3]) return sa[1]+sa[2]<sb[1]+sb[2];
        
        double ta,tb;
        std::sscanf(sa[3].c_str(),"%lf(s)",&ta);
        std::sscanf(sb[3].c_str(),"%lf(s)",&tb);
        return ta<tb;
    });
    
    for(int i=0;i<n;++i) std::cout<<logs[i]<<std::endl;
    return 0;
}

二、重复者IO链接

 本题思路:对于第q层来说我们需要递归找出第q-1层的图形然后将其存储下来然后和原来图形来更新第q层的图形。

#include <bits/stdc++.h>

int n;
std::vector<std::string> p;

std::vector<std::string> dfs(int k)
{
    if(k==1) return p;
    
    std::vector<std::string> last=dfs(k-1);//找出上一版本的字符串
    int m=last.size();
    
    std::vector<std::string> res(n*m,std::string(n*m,' '));//当前版本串
    
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            if(p[i][j]!=' ')
                for(int x=0;x<m;x++)
                    for(int y=0;y<m;y++)
                        res[i*m+x][j*m+y]=last[x][y];
    
    return res;
}

int main()
{
    while(std::cin>>n,n){
        //清空当前的版本串
        p.clear();
        getchar();
        
        for(int i=0;i<n;i++){
            std::string s;
            std::getline(std::cin,s);
            p.push_back(s);
        }
        
        int q;
        std::cin>>q;
        auto res=dfs(q);
        for(auto& str:res)
            std::cout<<str<<std::endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_67458830/article/details/132757534
今日推荐