文章目录
- 日志排序
- 重复者
一、日志排序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;
}