作者ssagit (ssagit)
看板C_and_CPP
標題Re: ACM 10696 ... 迴圈只比遞迴快1秒
時間Fri Jul 7 03:57:04 2006
花了三個小時, 能用的髒方法幾乎用上了,
只剩用一個 buffer 一次輸出和 asm 沒用上而已,
時間是 0.131, 目前是第 8 名,
有 Link 有真相,
http://acm.uva.es/p/problemstat.php?p=:10696
下面是我的 Code:
#include <stdio.h>
#include <string.h>
#define MAX 500100
char buf[MAX];
int main()
{
char msg[30]="f91(", s[10], *c=buf, *t1, *t2;
fread(buf, 1, MAX, stdin);
while (1)
{
while (*c<48) c++;
if (*c==48) break;
for (t1=msg+4, t2=s; *c>=48; *t2++=*t1++=*c++);
*t2=0;
if (t2-s>2&&strcmp(s,"100")) {
// strcpy(t1, ") = ");
*(t1)=')';
*(t1+1)=' ';
*(t1+2)='=';
*(t1+3)=' ';
for(t2-=2; --(*t2)<48; (*t2--)+=10);
// strcpy(t1+4, (*s==48) ? s+1 : s);
for(t2= (*s==48) ? s+1 : s, t1+=4; *t2; *t1++=*t2++);
*t1=0;
}
else {
// strcpy(t1, ") = 91");
*(t1)=')';
*(t1+1)=' ';
*(t1+2)='=';
*(t1+3)=' ';
*(t1+4)='9';
*(t1+5)='1';
*(t1+6)=0;
}
puts(msg);
}
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.67.201.44
推 jeunder:害我掉一名的兇手原來是你... \./m 07/07 03:58
→ ssagit:承讓了.... 07/07 03:59
→ jeunder:寫得比我漂亮多了. 另外, 我點了一下你, 戰績輝煌啊, 佩服 07/07 04:00
推 ssagit:其實我解出來的題目還算少的, 有不少人都已經破百了.... 07/07 04:03
推 cplusplus:要破百其實很簡單 不要去鑽這種時間 然後就一直寫就好了 07/07 10:34
→ cplusplus:其實acm裡面簡單的題目很多~~ 07/07 10:34
推 windows2k:樓上就是一個破百的例子 07/07 11:57
推 hellgod:樓上是一個破千的例子 07/07 12:09
推 SHBK:樓樓上是破千的強者 07/07 23:57
→ ssagit:樓樓樓上剛好在第10名, 看了一下, 前25名有3個是台灣人... 07/08 00:48
推 ssagit:重新看了一下這一題的排名, 板上另一位強者只花0.057秒, 07/08 00:50
→ ssagit:不知道他願不願意分享是用什麼方法寫出來的.... 07/08 00:51