python中answer是什么意思_各位大佬,能否帮我看一眼1445 用Python写为什么总是wrong answer...

python代码如下:

class State:

def __init__(self, val, par=None):

self.val = val

self.par = par

self.go = {}

def extend(w):

global res, last

p = last

np = State(p.val + 1)

while p is not None and w not in p.go.keys():

p.go[w] = np

p = p.par

if p is None:

np.par = root

else:

q = p.go[w]

if q.val == p.val + 1:

np.par = q

else:

nq = State(p.val + 1)

# nq.go = copy.deepcopy(q.go) 会造成 Maximum recursion depth exceeded

for k in q.go: nq.go[k] = q.go[k]

nq.par = q.par

q.par = nq

np.par = nq

while p is not None and p.go[w] is q:

p.go[w] = nq

p = p.par

res += np.val - np.par.val

last = np

# fo = open("result.txt", "a")

# fo.write(str(res) + "\r\n")

# fo.close()

while True:

global res, root, last

try:

root = last = State(0)

res = 0

# s = "aabbabd"

s = raw_input()

for i in s:

extend(ord(i) - ord('a'))

print res

except EOFError:

break

已经通过的C++代码如下:

#include

using namespace std;

// 注意要用 long long 和 1000001,要不然得出结果不对

// 因为原题说了字符串长度不超过 1000000,结果它的测试用例真的有一个长度为 1000000 的字符串。。。

// 亲身验证,缺一个都不好使

long long res = 0;

const int MAXN = 1000001;

struct State {

State *par, *go[26];

int val;

State(int _val) : par(0), val(_val) {

memset(go, 0, sizeof go);

}

};

State *root, *last;

void extend(int w) {

State *p = last;

State *np = new State(p->val + 1);

while (p && p->go[w] == 0)

p->go[w] = np, p = p->par;

if (p == 0) {

np->par = root;

} else {

State *q = p->go[w];

if (q->val == p->val + 1) {

np->par = q;

} else {

State *nq = new State(p->val + 1);

memcpy(nq->go, q->go, sizeof q->go);

nq->par = q->par;

q->par = nq;

np->par = nq;

while (p && p->go[w] == q)

p->go[w] = nq, p = p->par;

}

}

res += np->val - np->par->val;

last = np;

//ofstream out;

//out.open("result.txt", ios::out|ios::ate|~ios::trunc);

//out << (char)(w + 97) << " " << res << "\r\n";

//out.close();

}

char str[MAXN];

int main() {

root = last = new State(0);

scanf("%s", str);

int len = strlen(str);

int i = 0;

for (i = 0; i < len; i++)

extend(str[i] - 'a');

// 不知道为啥 CLion 加上输入回显之后,当字符串长度很大时比如 10000

// 上面的循环循环不完,在 i 等于一个值就不走循环了

// cout << i << str[i] << "\n";

cout << res;

return 0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值