社区讨论
样例过了,但0pts,下了个数据点,答案是对的,why
P5756 [NOI2000] 程序分析器参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo1p9bq0
- 此快照首次捕获于
- 2023/10/23 00:45 2 年前
- 此快照最后确认于
- 2023/11/03 01:25 2 年前
rt
CPP
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
string Code[3000+5];
bool Code_Ending;
int cnt,nxt[3000+5];
#define INF 1e7//阈值
int get_int(string s,int l,int r){
int ret=0;
for(int i=l;i<=r;i++)ret=(ret*10)+(s[i]-'0');
return ret;
}
map<char ,int> var;
int now,f;
void running(int x){
cnt++;//先累加
if(Code[x]=="END"){//结束句
cout<<cnt<<endl;
exit(0);
}
if(cnt>INF){//死循环
cout<<"-1\n";
exit(0);
}
string s=Code[x];
for(int i=0;i<s.length();i++){
if(s[i]=='I'&s[i+1]=='F'){
char c;
c=s[i+3];
int k=0;
for(i=i+5;s[i]!=' ';i++)k=(k*10)+(s[i]-'0');
i+=4;//跳过 GO,此时 i 指向转移语句
int gowhr=get_int(s,i,s.length()-1);
if(var[c]==k){
f=0;now=gowhr;break;
}
}
else if(s[i]=='G'&s[i+1]=='O'){
int gowhr=get_int(s,i+3,s.length()-1);
f=0;now=gowhr;break;
}else if(s[i]=='+'){
var[s[i-1]]+=(s[i+1]-'0');
f=0;now=nxt[x];break;
}else if(s[i]=='?'){
f=0;now=nxt[x];break;
}
}
}
int main(){
var.clear();
int H;
while(cin>>H){
getchar();
getline(cin,Code[H]);
}
int last=0;
for(int i=0;i<=3000;i++){
if(Code[i]=="")continue;
nxt[last]=i,last=i;
}
for(now=0;now<=3000;){
if(Code[now]==""){now=nxt[now];continue;}
f=1;
running(now);
if(f)now=nxt[now];
}
return 0;
}
下了一个数据点,测出来是对的
回复
共 0 条回复,欢迎继续交流。
正在加载回复...