KeyFC欢迎致辞,点击播放
资源、介绍、历史、Q群等新人必读
KeyFC 社区总索引
如果你找到这个笔记本,请把它邮寄给我们的回忆
KeyFC 漂流瓶传递活动 Since 2011
 

NOIP竞赛结束大家感觉如何

[ 9478 查看 / 37 回复 ]

回复:NOIP竞赛结束大家感觉如何

以下引用粘土火星在2005-11-20 15:18:53的发言:
话说这题,时间大概耗在维护高精度上……


“正整数n的正整数次幂”
突然想到,我为什么会觉得是C呢……难道被虐待习惯了(一般考算法什么都会跑到C上考……)数字向字符串转换都要自己来……zro
TOP

回复:NOIP竞赛结束大家感觉如何

以下引用Miliardo在2005-11-20 15:15:54的发言:


去年提高组的题目……简单到渣……
可惜某去年初赛挂掉了……T_T……

今年貌似难到出题人被诅咒……详情请见OIBH……Orz……


那么先恭喜阁下=v=???去年的渣题咱的分数也没阁下多哼哼哼,大概一辈子会和低级错误沾边了

PS:综上所述和OI有关的WEB SITE和某已经无缘=v=b,也算是种解脱咯

PS:不要再出现比前年还低的分数吧-_-b 80太寒了
AJI,舰狗
TOP

回复:NOIP竞赛结束大家感觉如何

题目都没有看懂orz
TOP

回复:NOIP竞赛结束大家感觉如何

吃完饭后试了一下,不知道对题意有没理解错误-_-d
由于偶不熟悉C和PASCAL(爆),以下源码各位请54……

.386
.model flat,stdcall
option casemap:none

include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib


.DATA
szSignedFormat    db    "%d",0
szUnsignedFormat    db    "%u",0

.CODE

start:

    push    4        ;Power
    push    100        ;Base
    call    GetCycle
    mov    ebp,esp
    push    eax
    push    OFFSET szSignedFormat
    push    ebp
    call    wsprintf
    add    esp,12
    mov    ebp,esp
    push    0
    push    ebp
    push    ebp
    push    0
    call    MessageBox
    push    0
    call    ExitProcess

GetCycle    proc    stdcall

    mov    eax,[esp + 4]
    mov    ebx,eax
    mov    ecx,[esp + 8]
    dec    ecx
    sub    esp,104
    mov    ebp,esp
    and    DWORD PTR[ebp + 100],0

@@:

    xor    edx,edx
    mul    ebx
    jo    Overflow
    dec    ecx
    jnz    @b
   
@@:
   
    push    eax
    push    eax
    push    OFFSET szUnsignedFormat
    push    ebp
    call    wsprintf
    add    esp,12
    pop    eax
    xor    ecx,ecx

@@:

    inc    ecx
    mov    bl,[esp + ecx]
    test    bl,bl
    jz    @f
    mov    [esp + ecx - 1],bl
    jmp    @b

@@:

    dec    ecx
    cmp    ecx,100
    ja    NotFound
    xor    esi,esi
    inc    esi

CompareStringStart:

    mov    edi,esi

CompareStringLoop:

    xor    ebp,ebp

@@:

    mov    bl,[esp + ebp]
    add    edi,ebp
    cmp    edi,ecx
    je    NotMatch
    mov    dl,[esp + edi]
    sub    edi,ebp
    cmp    bl,dl
    jne    NotMatch
    inc    ebp
    cmp    ebp,esi
    jne    @b
    add    edi,esi
    cmp    edi,ecx
    jb    CompareStringLoop
   
FullyMatched:

    mov    [esp + 100],esi

NotMatch:

    inc    esi
    mov    edx,ecx
    shr    edx,1
    cmp    esi,edx
    jbe    CompareStringStart
    cmp    DWORD PTR[esp + 100],0
    je    NotFound
    xor    edx,edx
    mov    eax,ecx
    mov    ecx,[esp + 100]
    div    ecx

EndOfProc:

    add    esp,104
    ret    8
   
Overflow:
NotFound:

    xor    eax,eax
    dec    eax
    jmp    EndOfProc
   
GetCycle    endp
   
end start

编译选项:
ml /c /coff /nologo GetCycle.asm
link /subsystem:windows /libpath:\masm32\lib /nologo GetCycle.obj

很懒就没有做参数录入了,不知道比赛的话这样会不会扣分?
另外精度是个问题……完整的应该要采用浮点寄存器Orz
TOP

回复:NOIP竞赛结束大家感觉如何

#include "string.h"

int cycle(int n,int s,int k){
char x[101],q[101],w[101];
int i=0,j,l,m=0,r,o,p=0;
unsigned long a=1;

for(j=0;j<s;j++)
a*=(unsigned long)n;
printf("%ld\n",a);

while(a)
{
x=a-a/10*10+48;
a=a/10;
i++;
}
x=0;

if(i>k) i=k;

for(j=0;j<i/2;j++)
{r=i/(j+1);
if (i%(j+1)) continue;

for(l=0;l<=j;l++)
{
q[l]=x[m];
m++;
}
q[l]=0;

for(o=0;o<r-2;o++)
{
for(l=0;l<=j;l++)
{
w[l]=x[m];
m++;
}
w[l]=0;
if(strcmp(q,w)) {p=1; break;}}

if(p) continue;
printf("%d\n\n",j);
return (j);
}
if(p) printf("-1\n\n");
return (-1);
}


main(){
int cycle(int n,int s,int k);
int n,s,k=101;
while(k>100||k<1){
printf("input the number as n s k and k<100\n");
scanf("%d%d%d",&n,&s,&k);}
cycle(n,s,k);
}

呃,战完……好乱,请各位指错(有循环的怎么没发现……全是-1- -||||)
请无视诸如变量命名不规范,提示不友好,计算位数有限(特别是第二个参数),乱什么的……
TOP

回复:NOIP竞赛结束大家感觉如何

爆,我把K给忘了(直接去掉第一位)……
TOP

回复:NOIP竞赛结束大家感觉如何

对了要调试着看的话可以用下面的编译选项:
ml /c /coff /Zi /nologo GetCycle.asm
link /debug /debugtype:CV /subsystem:windows /libpath:\masm32\lib /nologo GetCycle.obj

然后直接用OllyDbg加载就可以进行源码级调试了-v-b
(众:需要吗?你都没有用命名变量)
TOP

回复:NOIP竞赛结束大家感觉如何

“正整数n的正整数次幂”,用C来生成的话,就算用unsigned long 格式的数字,最大才10位,绝对不会有100位尾数的。除非自己写一个无穷位乘法器来生成结果,再进行搜索判断。

我来试试。。。。。。
KCDDP KR/KAG区值班室常驻义务值班员

现在在KCDDP的论坛也已经开始潜水了Orz
但是QQ群还是长期在线的
TOP

回复:NOIP竞赛结束大家感觉如何

所以汇编容易做的厚道点吧= =
不然就战去吧……应该也有办法= =
TOP

回复:NOIP竞赛结束大家感觉如何

比赛不可能用汇编伐,源码量&调试难度跟C/PASCAL相比不是一个级别的=_=
C我只能用来写驱动,做数学题还是PASCAL容易啊,继续看PASCAL基础去……

PS:问一下,楼上的战是啥意思?
TOP