[模拟]ZOJ3480 Duck Typing
题意:给了一坨...按题目意思输出就好了...
给一组案例
begin
class d
class c:d
class b:c
class a:b
def d.m
def d.n
call a.m
end
答案应该是
class dclass c:dclass b:cclass a:b
def d.m
def d.n
invoke d.m
建立的类应该是这样的
a:b:c:d
d有method m和n
那么call a、b、c的n、m时都应invoke d的
map<string, bool> mp_class, mp_method;
map<string, string> mp_super[];
map<string, int> s_num;
bool dfs(string name, string method)
{
if(mp_method[name+"."+method])
{
printf("invoke ");
cout<<name<<"."<<method<<endl;
return true;
}
for(int i=;i<s_num[name];i++)
if(dfs(mp_super[i][name], method))
return true;
return false;
}
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
getchar();
char s[];
mp_class.clear();
mp_method.clear();
s_num.clear();
while(gets(s))
{
if(s[]=='b')
continue;
if(s[]=='e')
break;
int n=strlen(s);
if(s[]=='c' && s[]=='l') // class
{
int i;
for(i=;i<n;i++)
if(s[i]==':')
break;
if(i==n) // ding yi
{
string name="";
for(int j=;j<n;j++)
name+=s[j];
if(mp_class[name]==)
{
mp_class[name]=;
puts(s);
}
else
puts("oops!");
}
else
{
string name="", super="";
for(int j=;j<i;j++)
name+=s[j];
for(int j=i+;j<n;j++)
super+=s[j];
if(mp_class[name] || !mp_class[super])
puts("oops!");
else
{
mp_class[name]=;
mp_super[s_num[name]++][name]=super;
puts(s);
}
}
}
else if(s[]=='d') // def
{
int i;
for(i=;i<n;i++)
if(s[i]=='.')
break;
string name="";
for(int j=;j<i;j++)
name+=s[j];
string method=name+".";
for(int j=i+;j<n;j++)
method+=s[j];
if(!mp_class[name])
puts("oops!");
else if(mp_method[method])
{
printf("redef ");
cout<<method<<endl;
}
else
{
mp_method[method]=;
printf("def ");
cout<<method<<endl;
}
}
else if(s[]=='u') // undef
{
string name="";
for(int i=;i<n;i++)
name+=s[i];
if(!mp_method[name])
puts("oops!");
else
{
printf("undef ");
cout<<name<<endl;
mp_method[name]=;
}
}
else // call
{
int i;
for(i=;i<n;i++)
if(s[i]=='.')
break;
string na="";
for(int j=;j<i;j++) // class
na+=s[j];
string name="";
for(int j=i+;j<n;j++) // method
name+=s[j];
if(mp_method[na+"."+name])
{
printf("invoke ");
cout<<na<<"."<<name<<endl;
continue;
}
if(!dfs(na, name))
puts("oops!");
// bool flag=0;
// string cur=na;
// while(s_num[na])
// {
// for(int k=0;k<s_num[na];k++)
// if(mp_method[mp_super[k][na]+"."+name])
// {
// printf("invoke ");
// cout<<mp_super[k][na]<<"."<<name<<endl;
// flag=1;
// break;
// }
// }
// if(!flag)
// puts("oops!");
}
}
puts("");
}
return ;
}
ZOJ 3480
[模拟]ZOJ3480 Duck Typing的更多相关文章
- Monkey Patch/Monkey Testing/Duck Typing/Duck Test
Monkey Patch Monkey Testing Duck Typing Duck Test
- 什么是“鸭子类型(duck typing)”?
在计算机编程世界里会接触到一个知识点 —— duck typing,叫“鸭子类型”. 它有一个形象的解释: “当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这只鸟就可以被称为鸭子. ...
- 鸭子类型duck typing(动态)
在程序设计中,鸭子类型(duck typing)是动态类型的一种风格.在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定.这个概念的名字来源于由Ja ...
- Python 中的Duck Typing
在学习Python的时候发现了鸭 子类型这个术语,听起来好像很有意思一样,所以把它记下来. 鸭子类型(Duck Typing)的名字来源于"鸭子测试": "当看到一只鸟走 ...
- this inspection detects names that should resolved but don't. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases. Top-level and class-level items are sup
输入第一行代码:import logging;logging.basicConfig(level==logging.INFO) 提示:this inspection detects names tha ...
- duck typing
在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格.在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决 ...
- 【PyCharm编辑器】之无法导入引用手动新建的包或类,报:This inspection detects names that should resolve but don't. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases.
一.现象描述 如下图所示,手动新建个类包calculator.py,想在test.py文件引用它,发现一直报红线,引用失败 Unresolved reference 'calculator' less ...
- 鸭子类型(Duck Typing)
鸭子类型(Duck Typing) 动态类型.没有类型检验.不关注类型,关注方法 相当于静态类型语言的多态 这是程序设计中的一种类型推断风格,这种风格适用于动态语言(比如PHP.Python.Ruby ...
- 什么是鸭子类型(duck typing)
"当看到一仅仅鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这仅仅鸟就能够被称为鸭子." 我们并不关心对象是什么类型,究竟是不是鸭子,仅仅关心行为. 比方在python中.有 ...
随机推荐
- iOS动画——弹窗动画(pop动画)
用pop动画简单实现弹窗的缩放和渐变,感觉这个动画常用,就写一下博客 pop动画是Facebook推出的动画引擎,请自行到GitHub上搜索下载拖拽导入xcode项目中. 更多pop动画使用和原理可网 ...
- 手机看youtube的方法|一个好用的VPN
俗话说:网络无国界.但是由于天朝的限制,我们无法访问YouTube .谷歌.twitter等一些国外网站. 这个时候我们就需要FQ.最直接有效的方法就是:VPN(虚拟专用网络). 虚拟专用网络的功能是 ...
- 我的博客已搬迁到http://www.lsworks.net
我的博客已搬迁到http://www.lsworks.net
- 在慕课学习Bootstrap
---恢复内容开始--- 可以用class=“h1”等给元素加h1样式 <h>------<small>----</small></h> < ...
- 【转载】Linux小白福利:《超容易的Linux系统管理入门书》(三)在虚拟机上安装Linux
本篇是Linux小白最佳实践第3篇,目的就是让白菜们自己动手安装个Linux玩玩.如果你是Linux小白,请务必亲自动手来安装.不想安装多个操作系统的,虚拟机是最佳选择,一台电脑上可以用虚拟机安装7. ...
- 应注意的Flex&Bison潜规则
1.Flex的二义性模式 语法分析器匹配输入时匹配尽可能多的字符串 如果两个模式都可以匹配的话,匹配在程序中更早出的模式. 针对这一点的理解,在语法分析文件当中,token的识别,应从特殊到一般的过程 ...
- 教您如何使用MySQL group_concat函数
MySQL group_concat函数是典型的字符串连接函数,下面就为您介绍MySQL group_concat的语法,希望对您学习MySQL group_concat函数有所帮助. MySQL g ...
- 处理器在 protected mode 下的 protection
前言 实模式,保护模式,分段,分页,虚拟内存,内核态,用户态,如果你对这些术语之间的关系非常熟悉,那就不用继续看了.这篇主要记录我对用户态/内核态的一些理解,如有不对还请指教. 下述说明均为 x86- ...
- Android Handler 原理
在android中提供了一种异步回调机制Handler,使用它,我们可以在完成一个很长时间的任务后做出相应的通知 handler基本使用: 在主线程中,使用handler很简单,new一个Handle ...
- sublime 设置localhost 2
最近sidebar用不了了,提示更新然后就自动卸载了: 研究了下其他方式实现: Sublime Text 2 Sublime Text 3 都可以使用: 菜单 --> Tools --> ...