跪求 Hack
查看原帖
跪求 Hack
399150
ShunpowerSHUN理成张楼主2022/5/24 00:28

uDebug 上传了个样例,一点用都没有。

代码在这里:

//Author:Zealous_YH
//Hai Bian & Xiao Bao
#include <bits/stdc++.h>
#define ET return 0
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define ll long long
#define ull unsigned long long
#define bk break
#define ctn continue
#define inf INT_MAX
#define uinf INT_MIN
#define prq priority_queue
#define vr vector
#define pii pair<int,int>
#define pll pair<ll,ll>
#define debug puts("--------Chery AK IOI--------");
#define Yes cout<<"Yes"<<endl;
#define No cout<<"No"<<endl;
#define pt puts("")
#define efor(i,x) for(int i=head[x];i;i=edge[i].nex)
#define fr1(i,a,b) for(int i=a;i<=b;i++)
#define fr2(i,a,b) for(int i=a;i>=b;i--)
#define fv(i,p) for(int i=0;i<p.size();i++)
#define ld long double
#define il inline
#define S setiosflags(ios::fixed)<<setprecision(2)
using namespace std;
const int N=1e5+10;
int edgecnt=1;
int maxn=uinf,minn=inf;
struct Edge{
	int toe,val,nex;
} edge[N];
int head[N];
int low[N],dfn[N],vis[N],sccnum[N];
int tnt,tot;
void add(int x,int y,int w){
	edge[edgecnt].toe=y;
	edge[edgecnt].val=w;
	edge[edgecnt].nex=head[x];
	head[x]=edgecnt++;
}
int lowbit(int x){
	return x&-x;
}
inline void read(int &x){
   int s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){
   		if(ch=='-'){
			w=-1;
   		}
        ch=getchar();
	}
   while(ch>='0'&&ch<='9'){
   		s=s*10+ch-'0';
		ch=getchar();
   }
   x=s*w;
}
inline void write(int x){
    if(x<0){
        putchar('-');
        x=-x;
    }
    if(x>9){
    	write(x/10);
	}
    putchar(x%10+'0');
}
string s[1010];
map <string,int> arr;
map <pair<string,int>,int> got;
bool eq(string s){
	fr1(i,0,s.length()-1){
		if(s[i]=='='){
			return 1;
		}
	}
	return 0;
}
pair<string,string> kni(string s){
	string k="";
	fr1(i,0,s.length()-1){
		if(s[i]!='['){
			k+=s[i];
		}
		else{
			string g="";
			fr1(j,i+1,s.length()-2){
				g+=s[j];
			}
			return mp(k,g);
		}
	}
}
string lef(string s){
	string k="";
	fr1(i,0,s.length()-1){
		if(s[i]!='='){
			k+=s[i];
		}
		else{
			return k;
		}
	}
}
string rig(string s){
	string k="";
	fr2(i,s.length()-1,0){
		if(s[i]!='='){
			k+=s[i];
		}
		else{
			reverse(k.begin(),k.end());
			return k;
		}
	}
}
bool onum(string s){
	fr1(i,0,s.length()-1){
		if(s[i]>'9'||s[i]<'0'){
			return 0;
		} 
	}
	return 1;
}
int tonum(string s){
	int ans=0;
	fr1(i,0,s.length()-1){
		ans=ans*10+s[i]-'0';
	}
	return ans;
}
int checkok(string s){
	if(onum(s)){
		return tonum(s);
	}
	pair<string,string> p=kni(s);
	if(onum(p.se)){
		if(!got.count(mp(p.fi,tonum(p.se)))){
			return -1;
		}
		else if(!arr.count(p.fi)||arr[p.fi]<tonum(p.se)){
			return -1;
		}
		else{
			return got[mp(p.fi,tonum(p.se))];
		}
	}
	else{
		int hh=checkok(p.se);
		if(hh==-1){
			return -1;
		}
		else{
			if(!got.count(mp(p.fi,hh))){
				return -1;
			}
			if(!arr.count(p.fi)||arr[p.fi]<hh){
				return -1;
			}
			else{
				return got[mp(p.fi,hh)];
			}
		}
	}
}
int main(){
	while(1){
		for(tnt=1;;tnt++){
			cin>>s[tnt];
			if(s[tnt]=="."){
				break;
			}
		}
		if(s[1]=="."){
			break;
		}
		tnt--;
		bool f=0;
		fr1(i,1,tnt){
			if(eq(s[i])){
				string s1=lef(s[i]),s2=rig(s[i]);
				pair<string,string> p=kni(s1);
				int in=checkok(p.se);
				int righ=checkok(s2);
				if(in==-1||righ==-1||arr[p.fi]<in){
					cout<<i<<endl;
					f=1;
					break;
				}
				else{
					cout<<p.fi<<" "<<in<<" "<<righ<<endl; 
					got[mp(p.fi,in)]=righ;
				}
			}
			else{
				pair<string,string> p=kni(s[i]);
				int in=checkok(p.se);
				if(in==-1){
					cout<<i<<endl;
					f=1;
					break;
				}
				cout<<p.fi<<" "<<in<<endl;
				arr[p.fi]=in-1;
			}
		}
		if(!f){
			cout<<0<<endl;
		}
	}
	ET;
}
//Teens-in-Times
//HJL 2004.06.15
//Everything For Ji.
//Everything For Lin.
//Everything For You.

目前的情况是我自己也 Hack 不掉,无论您是否看程序,请给我一点 Hack!thx!

2022/5/24 00:28
加载中...