SGU

目标:国家集训队!

Viczjy @ 2005-05-17 21:36

今天在这道题目上吃苦头了
主要是过去一直用的快排今天严重超时了
从今往后要用下面这种快排了:

procedure qsort(fp,rp:longint);
var i,j,k:longint;
    x,tmp:rec;
 begin
    x:=data[(fp+rp)div 2];
    i:=fp;j:=rp;
    repeat
        while  (data[j].l>x.l) do dec(j);
        while  (data.l<x.l) do inc(i);
        if i<=j then begin tmp:=data;data:=data[j];data[j]:=tmp;inc(i);dec(j);end;
    until i>j;
    if fp<j then qsort(fp,j);
    if i<rp then qsort(i,rp);
 end;


 
Viczjy @ 2005-05-16 16:56

今天终于把这个道题AC了,真高兴:)
之前做了很长时间,就是一直搞不懂那个n*log(n)的求一组解的方法
现在终于想明白了,
ax+by=c
(b mod a)*x1+a*y1=c;

有y=x1;x=y1-(b div a)*x1;
这个其实把两个方程比较一下就可以得出这个结论了
具体的可以参见黑书63页


 
Viczjy @ 2005-05-13 21:30

这道题就是DFS
不过好像不是太容易过哦
我在这道题目上花了1个多小时,哎。。。还是太菜了


 
Viczjy @ 2005-05-13 10:26

这个题大致思路是不停的除5;把5都剔出来最后一起乘
但这个程序的那个系数实在不知道怎么推出来的,先把它背下来吧:
const tail:array[ 0..9 ]of integer=(6,6,2,6,4,4,4,8,4,6);
var   i,j,k:longint;
     five,ans:longint;
     a:array[ 0..100 ]of integer;
     l:longint;
     s:string;
begin
     repeat
       readln(s);l:=length(s)-1;
       for i:=0 to l do a[ i ]:=ord(s[ l-i+1 ])-ord('0');
       while (a[ l ]=0) and (l>0) do dec(l);
       five:=0;ans:=1;
       while (l>0) or (a[ l ]>1) do
        begin
          ans:=ans*tail[ a[ 0 ] ] mod 10;
          for i:=l downto 1 do
           begin
            a[ i-1 ]:=a[ i-1 ]+a[ i ] mod 5*10;
            a[ i ]:=a[ i ] div 5;
           end;
          a[ 0 ]:=a[ 0 ] div 5;
          while (a[ l ]=0) and (l>0) do dec(l);
          five:=(five+(a[ 0 ]+a[ 1 ]*10)) mod 4;
        end;
       for i:=1 to five do ans:=ans*8 mod 10;
       writeln(ans);
     until seekeof;
end.


 
Viczjy @ 2005-05-11 11:58

如果X<1,那么位数=1+小数部分*k
否则位数=trunc(ln(x)/ln(10)*k)+1+小数部分*k


 
日历
网志分类
· 所有网志 (19)
最新的评论
站内搜索
友情链接
· 我的歪酷 非非共享界
· Only the Strong Survive(Allen's Blog)

订阅 RSS

0012150

歪酷博客

本模版系 歪酷博客Zazamu Studio 授权使用 请尊重知识产权