题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4049
题意:判断代码是否死循环,是的话输出No,不是输出Yes
思路:死循环的特点是重复,所以只要判断同样的r是否在同一行出现过,如果出现1次以上,就是死循环。
代码:
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#define maxn 10009
#define MOD 256
using namespace std;
int n;
bool zt[257][maxn];
int v[maxn], k[maxn];
char ss[maxn][4];
int main() {
int t;
cin >> t;
while (t--)
{
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%s", ss[i]);
if (ss[i][1] == 'd') {
scanf("%d", &v[i]);
}
else {
scanf("%d %d", &v[i], &k[i]);
}
}
int r = 0;
bool ff = 0;
for (int i = 1; i <= n; i++) {
if (zt[r][i]) {
ff = 1;
break;
}
zt[r][i] = 1;
if (ss[i][1] == 'd') {
r += v[i];
r %= MOD;
}
else if (ss[i][1] == 'e') {
if (r == v[i]) {
i = k[i] - 1;
}
}
else if (ss[i][1] == 'n') {
if (r != v[i]) {
i = k[i] - 1;
}
}
else if (ss[i][1] == 'l') {
if (r < v[i]) {
i = k[i] - 1;
}
}
else if (ss[i][1] == 'g') {
if (r > v[i]) {
i = k[i] - 1;
}
}
}
if (ff) printf("No\n");
else printf("Yes\n");
memset(zt, 0, sizeof zt);
}
return 0;
}