第二轮PK。。。。

第二轮PK。。。。
昨天的PK就是考人的胆量,敢不敢用暴力。。。

http://acm.tju.edu.cn/toj/showp3237.html
进制转化,天涯3分钟敲好,我5分钟才好,数组开太小WA了,后来一气之下按好好多个999,结果开太大MLE了,悲剧啊。。

http://acm.tju.edu.cn/toj/showp3238.html
很简单的n^2吧(x^2+y^2)预处理下,再O(n)的吧(n-z^2)扫一遍。。。赛后竟然发现n^3的算法都能过

http://acm.tju.edu.cn/toj/showp3239.html
开始的时候就一直在猜。公式推不出。。唉,后来知道数据太挫了,开10000的数组背包下都能过
我一直在想极限数据2 5000 4999.。。。这个你怎么背,汗。。。。
后来得到了风的启发
研究了一个下午。。终于用正常的方法过了。。哈哈
献上我的代码。。按照余数路径找的。。用了bellman_ford算法找到最小点。。
#include < stdio.h >
#include
< string >
#include
< stdlib.h >
#define  inf 0x7FFFFFFF
int  hash[ 5001 ];
int  num[ 5001 ];
int  mod[ 5001 ];
int  gcd( int  a, int  b)
{
    
while (a)
        a 
^=  b  ^=  a  ^=  b  %=  a;
    
return  b;
}
int  cmp( const   void   * a, const   void   * b)
{    
return   * ( int   * )a  -   * ( int   * )b;    }
int  main()
{
    
int  T,n,i,j,buf;
    
bool  flag,flag1;
    
while (scanf( " %d " , & n) == 1 )
    {
        flag1 
=   false ;
        
for (i = 0 ;i < n;i ++ )
        {
            scanf(
" %d " , & num[i]);
            
if (num[i] == 1 )
                flag1 
=   true ;
        }
        
if (flag1) {
            puts(
" 0 " );
            
continue ;
        }
        
if (n == 1 )
            
goto  loop;
        buf 
=  gcd(num[ 0 ],num[ 1 ]);
        
for (i = 2 ;i < n;i ++ )
        {
            
if (buf == 1 )
                
break ;
            buf 
=  gcd(buf,num[i]);
        }
        
if (buf != 1 )
            
goto  loop;

        qsort(num,n,
sizeof (num[ 0 ]),cmp);
        
for (i = 1 ;i < num[ 0 ];i ++ )
            mod[i] 
=  inf;
        mod[
0 =   0 ;
        
for (i = 1 ;i < n;i ++ )
        {
            buf 
=  num[i]  %  num[ 0 ];
            
if (buf  &&  mod[buf]  ==  inf)
                mod[buf] 
=  num[i];
        }
        flag 
=   true ;
        
while (flag)
        {
            flag 
=   false ;
            
for (i = 1 ;i < num[ 0 ];i ++ )
            {
                
if (mod[i] != inf)
                {
                    
for (j = 1 ;j < num[ 0 ];j ++ )
                    {
                        
if (mod[j] != inf  &&  mod[i]  +  mod[j]  <  mod[ (i + j) % num[ 0 ] ])
                        {
                            mod[ (i
+ j) % num[ 0 ] ]  =  mod[i]  +  mod[j];
                            flag 
=   true ;
                        }
                    }
                }
            }
        }
        qsort(mod,num[
0 ], sizeof (mod[ 0 ]),cmp);
        printf(
" %d\n " ,mod[ num[ 0 -   1  ]  -  num[ 0 ]);
        
continue ;
loop:
        puts(
" INF " );
    }
}

http://acm.pku.edu.cn/JudgeOnline/problem?id=3492
北大也有一道一模一样的题目,数据一定不水。。。我的程序bellman哪里写的太挫了,三个循环,导致了超时。。。
做了点小小的优化后就AC了。。还排到了PKU的第一页,哈哈,爽
这么好的题就被TOJ的出题人给水了。。。
4945477 notonlysuccess 3492 Accepted 264K 63MS C++ 2115B 2009-04-09 14:06:29
4945435 notonlysuccess 3492 Accepted 252K 79MS C++ 2137B 2009-04-09 13:59:19
4945000 notonlysuccess 3492 Accepted 248K 188MS C++ 1984B 2009-04-09 12:44:34


http://acm.tju.edu.cn/toj/showp3240.html
曹操和刘备的题(出现了我所喜欢的大耳和曹操)。。题目意思理解后又是水题。。找区间最大值线性扫描能过。。出题人。。你开这么大的数据范围都是吓人的啊?

http://acm.tju.edu.cn/toj/showp3241.html
很简单的,素数筛法筛下就好了。。因为要是奇数,一定要有个2^2,我不小心RE了一小下。。


说实话。。昨天PK赛的水平连选拔赛都比不上
赛后一群人对C无语掉。。
。。。。

你可能感兴趣的:(第二轮PK。。。。)