讨论 / 求第三个点
swq27 2011-10-17 06:43:00
点我顶贴 收藏 删除
rt
#1 swq27@2008-11-02 07:43:00
回复 删除
查看状态 Show Status

状态题目:ByteLand电脑语言

题目编号:376-ByteLand电脑语言 查看该题

状态: Unaccepted

测评机: Xeost[5]

得分: 90分

提交日期: 2008-11-2 23:38:00

有效耗时: 626毫秒

测试结果1: 通过本测试点|有效耗时172:ms

测试结果2: 通过本测试点|有效耗时63:ms

测试结果3: 输出过少|用户输出数据少于标准输出的50%[标准输出16位|选手输出2位]

测试结果4: 通过本测试点|有效耗时47:ms

测试结果5: 通过本测试点|有效耗时47:ms

测试结果6: 通过本测试点|有效耗时63:ms

测试结果7: 通过本测试点|有效耗时62:ms

测试结果8: 通过本测试点|有效耗时62:ms

测试结果9: 通过本测试点|有效耗时63:ms

测试结果10: 通过本测试点|有效耗时47:ms

#2 飞雪天涯@2009-10-22 05:15:00
回复 删除
用int64,我用longint过不了第三个点

查看状态 Show Status

状态题目:ByteLand电脑语言

题目编号:376-ByteLand电脑语言 查看该题

状态: Accepted

测评机: Xeost[5]

得分: 100分

提交日期: 2009-10-22 20:14:00

有效耗时: 531毫秒

测试结果1: 通过本测试点|有效耗时109ms

测试结果2: 通过本测试点|有效耗时47ms

测试结果3: 通过本测试点|有效耗时47ms

测试结果4: 通过本测试点|有效耗时47ms

测试结果5: 通过本测试点|有效耗时47ms

测试结果6: 通过本测试点|有效耗时47ms

测试结果7: 通过本测试点|有效耗时47ms

测试结果8: 通过本测试点|有效耗时46ms

测试结果9: 通过本测试点|有效耗时47ms

测试结果10: 通过本测试点|有效耗时47ms

提交代码: /*

查看题目 Show Problem

题目:ByteLand电脑语言

问题编号:376 [提交该题] [讨论该问题] [有关讨论] [Who AC] [相关题解] [最优解]

My Flag:Unsubmited

题目类型

其它

描述

ByteLand的人像地球人学习弄了种ByteLand PC语言。

这种语言其实就是DAM语言。

有个机器执行一种DAM语言。

该机器有一个栈,初始时栈里只有一个元素x,随着DAM语言程序的执行,栈里的元素会发生变化。

DAM语言有四种指令:

D指令:把栈顶元素复制一次加到栈顶

A指令:把栈顶元素取出,加到新的栈顶元素中。

M指令:把栈顶元素取出,乘到新的栈顶元素中。

如果执行A或M指令的时候栈内只有一个元素,则机器会发出错误信息。

如果程序无误,那么执行完毕以后,栈顶元素应该是x的多项式,例如,程序DADDMA的执行情况为(栈内元素按照从底到顶的顺序从左至右排列,用逗号隔开):

x→ x,x→2x→2x,2x→ 2x,2x,2x→ 2x,4x^2 →4x^2+2x

给出一段DAM程序,求出执行完毕后栈顶元素。

输入格式

输入:

仅一行,包含一个不空的字符串s,长度不超过12,代表一段DAM程序。

输入程序保证合法且不会导致错误。

输出格式

输出:

输出一行,即栈顶多项式。

须按照习惯写法降幂输出,即:

等于1的系数不要打印,系数为0的项不打印,第一项不打印正号。

一次方不打印’^1’。

样例输入

DADDMA

样例输出

4x^2+2x

*/

#include<iostream>

#include<memory.h>

using namespace std;

struct rec{

__int64 a[100];

rec(){

memset(a,0,sizeof(a));

}

void r_add(int x,__int64 y){

a[x]+=y;

}

void mul(){

for (int i=0;i<100;++i) a[i]<<=1;

}

void output(){

bool first=true;

for (int i=99;i!=0;--i){

if (a[i]==0) continue;

if (!first) cout<<"+";

if (a[i]!=1) cout<<a[i];

cout<<"x";

if (i!=1) cout<<"^"<<i;

first=false;

}

cout<<endl;

}

};

rec stk[24];

int top;

void D(){

stk[top]=stk[top-1];

++top;

}

void A(){

rec a=stk[--top];

for (int i=0;i<100;++i) stk[top-1].r_add(i,a.a[i]);

}

void M(){

rec a=stk[--top];

rec b=stk[--top];

rec c;

for (int i=0;i<100;++i){

if (a.a[i]==0) continue;

for (int j=0;j<100;++j){

if (b.a[j]==0) continue;

c.r_add(i+j,a.a[i]*b.a[j]);

}

}

stk[top++]=c;

}

int main (void){

string s;

cin>>s;

top=1;

stk[0].r_add(1,1);

for (int i=0;i<s.size();++i){

if (s[i]==’D’) D();

if (s[i]==’A’) A();

if (s[i]==’M’) M();

}

stk[top-1].output();

// while (1);

return 0;

}

#3 lijiaming12340@2011-10-17 06:43:00
回复 删除
给你个FP的。。

program ss;

type a=record

mi:array[1..100] of int64;

end;

var s:array[1..100] of a;

b:a;

i,j,k,m,n,t,top:longint;

ch:char;

ans,st:string;

begin

fillchar(s,sizeof(s),0);

top:=1; s[1].mi[1]:=1;

while not eoln do

begin

read(ch);

case ch of

'D':begin inc(top); s[top]:=s[top-1]; end;

'A':begin

for i:=1 to 100 do inc(s[top-1].mi[i],s[top].mi[i]);

fillchar(s[top],sizeof(s[top]),0); dec(top);

end;

'M':begin

fillchar(b,sizeof(b),0);

for i:=1 to 50 do

for j:=1 to 50 do inc(b.mi[i+j],s[top-1].mi[i]*s[top].mi[j]);

fillchar(s[top],sizeof(s[top]),0);

dec(top); s[top]:=b;

end;

end;

end;

ans:='';

for i:=100 downto 1 do

if s[top].mi[i]>0 then

begin

str(s[top].mi[i],st);

if s[top].mi[i]>1 then ans:=ans+st+'x' else ans:=ans+'x';

if i>1 then begin str(i,st); ans:=ans+'^'+st; end;

ans:=ans+'+';

end;

writeln(copy(ans,1,length(ans)-1));

end.

查看更多回复
提交回复