自己的写法好麻烦
本质是忘了 substr() 函数
最初这个题是没有啥思路的,不过确实,它很简单
应该锻炼见到题目就有思路的能量,不能每次都想那么长时间
题目描述
王嘉然在摸鱼时想出了一个01串的压缩算法,该算法如下:
首先将01串切分,相邻三个一组(比如一个长度为6的01串,切分后前三个一组,后三个一组),之后,使每个组对应一个小写字母,要求内容相同的组所对应的字母相同,把每个组都替换为相对应的字母,并且替换后得到的字符串字典序最小。
但是大聪明杜向晚显然没有理解这个算法,她需要一个人帮她完成01串的压缩
输入
第一行一个整数n(n <= 105)
第二行输入一个字符串s,|s| = 3 * n
输出
输出一个字典序最小的字符串
样例输入 Copy
3
010000010
样例输出 Copy
aba
本人代码
#include <iostream>
using namespace std;
const int N=300010; // 小细节 ,最初写的100010; 数组会越界的
char a[N];
int b[N];
int n;
bool d[10];
char y[10];
int main()
{
int cnt=0;
cin>>n;
cin>>a;
for(int i=0;i<n*3;i+=3)
{
int sum=0;
sum=(a[i]-'0')*4+(a[i+1]-'0')*2+(a[i+2]-'0');
b[cnt++] = sum; // 每三个字符转化为对应的 10 进制数
}
int t=0;
for(int i=0;i<cnt;i++)
{
if(!d[b[i]]) // 如果这个数字没出现过,给它赋值为一个字母 ( 从 a 开始 )
{
d[b[i]]=true;
y[b[i]]='a'+t;
t++;
}
}
for(int i=0;i<cnt;i++) cout<<y[b[i]]; // 输出对应的字母 即可
return 0;
}
第二题就是一个结构体排序,我忘记了,sort 自定义排序
然后我就用最看不起的冒泡 A 掉了这题
如果所用时间相同 ,按输入顺序输出 重点就是这
#include <iostream>
using namespace std;
const int N=5050;
struct node{
char a[10];
int h,m,s;
};
//
//bool cmp(const int h,const int m,const int s)
//{
// return h<
//}
node dy[N];
int n;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>dy[i].a>>dy[i].h;
getchar();
cin>>dy[i].m;
getchar();
cin>>dy[i].s;
}
//sort(dy,dy+n,cmp);
for(int i=0;i<n-1;i++)
{
for(int k=0;k<n-1;k++)
{
if(dy[k].h>dy[k+1].h) swap(dy[k],dy[k+1]);
else if(dy[k].h==dy[k+1].h&&dy[k].m>dy[k+1].m) swap(dy[k],dy[k+1]);
else if(dy[k].h==dy[k+1].h&&dy[k].m==dy[k+1].m&&dy[k].s>dy[k+1].s) swap(dy[k],dy[k+1]);
}
}
for(int i=0;i<n;i++)
{
if(i!=n-1) cout<<dy[i].a<<endl;
else cout<<dy[i].a;
}
return 0;
}