网址压缩

题目大意:我们现在的任务是给定𝑁个只包含小写字母的字符串,你需要输出对这𝑁个字符串进行压缩的结果。你可以使用任意的压缩算法,但你需要保证满足如下的性质:1、压缩的结果字符串仍然只有小写字母。2、压缩的结果不能是空串,且长度必须要比原来的字符串短。3、相同的字符串压缩结果必须相同,不同的字符串压缩结果必须不同。任意满足上述条件的压缩方法都是正确的,所以你的目标就是对给定的𝑁个字符串进行压缩。数据保证有解。

按长度排个序,然后a,b,c,…z,aa,ab,ac….就可以了

关键是就是模拟

代码如下:

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <map>

using namespace std;

map<string, bool> mp;
map<string, string> Hash;

struct yhm
{
string s, res, id;
}q[1666];

inline bool cmp1(yhm a, yhm b)
{
return a.s.length() < b.s.length();
}

inline bool cmp2(yhm a, yhm b)
{
return a.id < b.id;
}

signed main()
{
int i, n = read();
for (i = 1; i <= n; ++ i) getline(cin, q[i].s), q[i].id = i;
sort(q + 1, q + n + 1, cmp1);

char p1 = 'a', p2 = 'a', p3 = 'a'; int num = 1;

for (i = 1; i <= n; ++ i)
{
string now = q[i].s;
if (mp[now])
{
q[i].res = Hash[now];
continue;
}

string x;

if (num == 1) x = p1, Hash[now] = q[i].res = x;
else if (num == 2) x = p2, x += p1, Hash[now] = q[i].res = x;
else if (num == 3) x = p3, x += p2, x += p1, Hash[now] = q[i].res = x;

int num_now = num;
if (num_now == 1)
{
if (p1 == 'z') ++ num, p1 = 'a';
else ++ p1;
}
if (num_now == 2)
{
if (p1 == 'z')
{
if (p2 == 'z') ++ num, p1 = p2 = 'a';
else ++ p2, p1 = 'a';
}
else ++ p1;
}
if (num_now == 3)
{
if (p1 == 'z')
{
if (p2 == 'z')
{
if (p3 == 'z') ++ num, p1 = p2 = p3 = 'a';
else ++ p3, p1 = p2 = 'a';
}
else ++ p2, p1 = 'a';
}
else ++ p1;
}
mp[now] = true;
}

sort(q + 1, q + n + 1, cmp2);

for (i = 1; i <= n; ++ i) cout << q[i].res << '\n';

return 0;
}

后记:

这次考试在评测的时候,第二题编译错误挂了40分,第一题没有SPJ挂了90分

我依旧是倒数

今天下午考试头疼别疼,一直低烧,很难受,但是硬撑着,期望得分是100+40+10pts,这个水平属于中游

我觉得我可以,我也有实力去搞第三题,但是在那种环境下,我实在没办法投入精力去想,我觉得我能做到150pts已经很棒了

而180就已经是前三名了

这个分数的变化非常大,也非常好得到,并不是不会,通常都是差一点点的小细节

我从来不知道别人怎么看我,我也从来不觉得自己比他们差,我不知道我比他们强在哪里,但是我自信比他们强

或许可以称为自负,wlj学长说,最终的CSP/NOIp都会见分晓的

虎瘦雄心在,人穷志不短

无论落魄到什么地步,都不要触碰做人的底线,心怀勇气的走下去,只有这样才能逐渐摆脱困境