7.26
多校第一场1006的一篇题解看了好几天了。
复习了LCA。只会离线的。
想了很久其中的状态转移。
以及dfs序和求和的方法。
从昨天下午开始码。今天终于码(抄)好了。
一会补在多校那篇里。
先补个BC。
HDU 5312 Sequence
按照官方题解。
先看能不能一个。我lower_bound找的。
然后拆两个的时候不能太暴力。会T的。
从两边线性找是可以过的。(然而时间也蛮多。
3-8的情况方便了。
感觉时间主要在2上。目前也不会更快的方法。
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
时间: 2024-11-13 09:45:42