第二周 7.26-8.1

7.26

多校第一场1006的一篇题解看了好几天了。

复习了LCA。只会离线的。

想了很久其中的状态转移。

以及dfs序和求和的方法。

从昨天下午开始码。今天终于码(抄)好了。

一会补在多校那篇里。

先补个BC。

 

HDU 5312 Sequence

按照官方题解。

先看能不能一个。我lower_bound找的。

然后拆两个的时候不能太暴力。会T的。

从两边线性找是可以过的。(然而时间也蛮多。

3-8的情况方便了。

感觉时间主要在2上。目前也不会更快的方法。

第二周 7.26-8.1
 1 # include <iostream>

 2 # include <cstdio>

 3 # include <algorithm>

 4 using namespace std;

 5 int a[20000];

 6 

 7 int main(void)

 8 {

 9     int n;

10     for(int i=0;;i++)

11     {

12         a[i]=3*i*(i-1)+1;

13         if(a[i]>1000000000) {n=i;break;}

14     }

15     int T; cin>>T;

16     while(T--)

17     {

18         int m; scanf("%d",&m);

19         int x=lower_bound(a,a+n,m)-a;

20         if(a[x]==m) {printf("1\n"); continue;}

21         int ans=-1,s=1,t=n-1;

22         while(s<=t)

23         {

24             if(a[s]+a[t]==m) {ans=2;break;}

25             if(a[s]+a[t]>m) t--;

26             if(a[s]+a[t]<m) s++;

27         }

28         if(ans>0) {printf("%d\n",ans); continue;}

29         for(int i=3;i<10;i++)if((m-i)%6==0){ans=i;break;}

30         printf("%d\n",ans);

31     }

32     return 0;

33 }
Aguin

 

你可能感兴趣的:(第二周 7.26-8.1)