码迷,mamicode.com
首页 > 其他好文 > 详细

bestcoder杯回顾

时间:2015-05-13 19:32:26      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

题目列表:hdu5214~5223

 

5214:

当时第一反应是由递推公式推出通项公式,事实证明这就是作!大!死!

因为通项公式是这样的:L[n]=a^(n-1)*(b+L[1])-b

于是就需要快速幂。然而用了快速幂还是慢。。。【实际上是被卡在了7000ms多一点点。。。】

其实直接放到数组里一项一项递推就行。。速度并不慢还省事

另外本题还有一个point:被mod的那个数字很奇怪,所以直接用unsigned int存就行。不仅省空间还不用mod了(溢出相当于自动mod)

当时没想起来这个于是用了long long,于是数组存不下,于是T^T

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #define LL  unsigned int
 5 //#define MOD 4294967296
 6 using namespace std;
 7 LL N,L1,R1,a,b,c,d,T;
 8 LL ll[10000010],rr[10000010];
 9 LL li,ri;
10 
11 int main()
12 {
13     scanf("%d",&T);
14     while(T--)
15     {
16         scanf("%d%d%d%d%d%d%d",&N,&L1,&R1,&a,&b,&c,&d);
17         ll[1]=L1;   rr[1]=R1;
18         if(L1>R1)   swap(L1,R1);
19         LL minl=L1,minr=R1,maxl=L1,maxr=R1;
20         for(LL i=2;i<=N;i++)
21         {
22             ll[i]=ll[i-1]*a+b;
23             rr[i]=rr[i-1]*c+d;
24             li=ll[i],ri=rr[i];
25             if(li>ri)   swap(li,ri);
26             if (ri<minr)
27             {
28                 minl=li;
29                 minr=ri;
30             }
31             if (li>maxl)
32             {
33                 maxl=li;
34                 maxr=ri;
35             }
36         }
37         bool ok=false;
38         //cout<<minl<<","<<minr<<"  "<<maxl<<","<<maxr<<endl;
39         for(LL i=1;i<=N;i++)
40         {
41             li=ll[i];   ri=rr[i];
42             if(li>ri)   swap(li,ri);
43             //cout<<li<<","<<ri<<endl;
44             if((li>minr)&&(ri<maxl))
45             {
46                 ok=true;
47                 break;
48             }
49         }
50         if (ok) printf("YES\n");    else printf("NO\n");
51     }
52     return 0;
53 }
View Code

 

 

5223:

这题当时交给队友了。。。。

题意:给出若干L,R,A,表示gcd(p[L],p[L+1],...,p[R])=A。要求解出原数组p[]

sol:首先来看几个有代表性的情况:

1 9 7     1 9 6    1 9 8    1 9 3    1 9 4    1 9 8    1 5 3 

2 5 3     2 5 4    2 5 4    2 5 7    2 5 6    2 5 4    2 7 7

stupid     stupid     stupid    stupid     stupid    ok      ok

对所有的L,R,A,令p[i]=lcm(p[i],A)(L<=i<=R)。最后再验证一遍

其实最后验证的时候求区间的gcd可以用优化的方法(类似RMQ的那个)。本题数据小懒得用了= =

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 using namespace std;
 5 #define LL long long
 6 
 7 LL  p[1010];             //array
 8 int L[1010],R[1010];     //Li,Ri
 9 LL  A[1010];             //Ansi
10 int T,N,Q;
11 
12 LL gcd(LL a,LL b)                  //辗转相除法,返回gcd(a,b)
13 {
14     if (b==0) return a;
15     return gcd(b,a%b);
16 }
17 
18 LL lcm(LL a,LL b)
19 {
20     LL t=gcd(a,b);
21     t=a*b/t;
22     return t;
23 }
24 
25 LL ggcd(int l,int r)
26 {
27     LL aa=p[l];
28     for(int i=l+1;i<=r;i++)
29         aa=gcd(aa,p[i]);
30     return aa;
31 }
32 
33 LL llcm(int l,int r)
34 {
35     LL aa=p[l];
36     for(int i=l+1;i<=r;i++)
37         aa=lcm(aa,p[i]);
38     return aa;
39 }
40 
41 int main()
42 {
43     scanf("%d",&T);
44     while(T--)
45     {
46         scanf("%d%d",&N,&Q);
47         for(int i=0;i<=1000;i++)p[i]=1;
48         for(int i=1;i<=Q;i++)
49         {
50             scanf("%d%d%I64d",&L[i],&R[i],&A[i]);
51             //LL t=llcm(L[i],R[i]);
52             //t=lcm(t,A[i]);
53             for(int j=L[i];j<=R[i];j++)
54                 p[j]=lcm(p[j],A[i]);
55                 //p[j]=t;
56         }
57         bool ok=true;
58         for (int i=1;i<=Q;i++)
59         {
60             LL t=ggcd(L[i],R[i]);
61         //    printf("%d,%d = %I64d\n",L[i],R[i],t);
62             if (t!=A[i])    ok=false;
63         }
64         //            for(int i=1;i<=N;i++)
65         //                printf("%d ",p[i]);
66         //            printf("\n");
67         if(ok)
68         {
69             for(int i=1;i<N;i++)
70                 printf("%I64d ",p[i]);
71             printf("%I64d\n",p[N]);
72         }
73         else
74             printf("Stupid BrotherK!\n");
75     }
76     return 0;
77 }
View Code

 

bestcoder杯回顾

标签:

原文地址:http://www.cnblogs.com/pdev/p/4501231.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!