玄关求hack,91pts WA on #9
查看原帖
玄关求hack,91pts WA on #9
1047592
mondayrain楼主2025/1/10 14:31

rt

#include <bits/stdc++.h>
using namespace std;

string a , b;
map <pair <string , int> , int> mp;  //mp[make_pair(a , b)]表示a[b]
map <string , int> len;  //mp[a]表示数组a的长度
bool is_num(string s)
{
  for(int i = 0;i < s.size();i ++)
  {
    if(!(s[i] >= '0' && s[i] <= '9')) return false;
  }
  return true;
}
int getv(string s)
{
  if(is_num(s))
  {
    int aa = 0;
    for(int i = 0;i < s.size();i ++)
    {
      aa = aa * 10 + (s[i] - '0');
    }
    return aa;
  }
  int p = 0;
  string ss;
  string id;
  while(p < s.size() && s[p] != '[')
  {
    ss += s[p];
    p ++;
  }
  p ++;
  while(p < s.size() && s[p] != ']')
  {
    id += s[p];
    p ++;
  }
  if(!len.count(ss)) return -1;
  int id2 = 0;
  if(is_num(id))
  {
    for(int i = 0;i < id.size();i ++)
    {
      id2 = id2 * 10 + (id[i] - '0');
    }
  }
  else
  {
    id2 = getv(id);
  }
  if(id2 >= len[ss]) return -1;
  return mp[make_pair(ss , id2)];
}
int main()
{
  while(cin >> a >> b)
  {
    if(a == "int")
    {
      int p = 0;
      string s;
      string ln;
      while(p < b.size() && b[p] != '[')
      {
        s += b[p];
        p ++;
      }
      p ++;
      while(p < b.size() && b[p] != ']')
      {
        ln += b[p];
        p ++;
      }      
      int tmp = getv(ln);
      if(tmp == -1)
      {
        cout << -1;
        return 0;
      }
      len[s] = tmp;
    }
    else if(a == "cout")
    {
      int tmp = getv(b);
      cout << tmp << endl;
      if(tmp == -1)
      {
        return 0;
      }
    }
    else
    {
      int p = 0;
      string s;
      string ln;
      while(p < a.size() && a[p] != '[')
      {
        s += a[p];
        p ++;
      }
      p ++;
      while(p < a.size() && a[p] != ']')
      {
        ln += a[p];
        p ++;
      }
      int ll = getv(ln);
      if(ll >= len[s])
      {
        cout << -1;
        return 0;
      }
      int bb = getv(b);
      mp[make_pair(s , ll)] = bb;
    }
  }
  return 0;
}
2025/1/10 14:31
加载中...