今天的這場比賽。。。是可寫的ide
仍是我太菜了測試
連接idea
這是一道數學題spa
前置芝士:餘弦定理code
如圖,點\(\mathcal A\)是走了\(n\)步所到達的點,到原點距離爲\(x\)。(紅線)blog
接下來走一步走到點\(\mathcal B\)(\(\mathcal B\)爲\(\odot A\)上一點且\(r_A=1\),),設其到原點距離\(\mathcal {BO}=y\),(藍線)ci
在$ \bigtriangleup OAB$中,使用餘弦定理,得:
\[ y^2=x^2+1-2x \cos \theta \]
咱們發現\(\cos \theta\)的指望爲零。。。(這一點但願讀者本身思考get
因此,式子化簡成
\[ y^2=x^2+1 \]
由於咱們求的正是\(E(\mathcal D^2)\),咱們上面提到,\(\mathcal A\)是第\(n\)步走到的點,\(\mathcal B\)是第\(n+1\)步走到的點,那麼\(f_{n+1}^2=f_n^2+1,n \ge 1\),因此第\(n\)步時,\(E(\mathcal D^2)=n\)。數學
因此,輸出\(n\)便可。class
另注:本題只有一個測試點
namespace Sol{ inline int Main(){ put(read());//不解釋,嘻嘻 return 0; } }
對於本題,分塊、莫隊均可以寫。代碼等我回來再貼
這裏說一種不嚴格的\(\mathcal O(n^2 \log n)\)。
由於使用了二分,還加了些剪枝,因而卡過了數據。具體能夠看代碼。
namespace Sol{ vector<int>v[maxn]; int n,m,T,ans; int a[maxn]; inline int Main(){ n=read(); m=read(); T=read(); for(int i=1;i<=n;i++){ a[i]=read(); v[a[i]].push_back(i); } while(T--){ ans=0; int l=read(),r=read(),x; if(l==r){puts("0");continue;} for(int i=l;i<=r;i++){ if(r-i<=ans)break;//若是r-i比我當前搜到的答案短,那確定找不到了。continue if(v[x=a[i]].size()<2) continue;//若是找不到當前數字相等的點。continue if(v[x][v[x].size()-1]-i<=ans) continue; // //就是這三個剪枝, int xx=lower_bound(v[x].begin(),v[x].end()-1, r)-v[x].begin(); if(v[x][xx]>r) xx-=1;//以上兩行請本身理解/噴臉 ans=max(ans,v[x][xx]-i);//更新答案 } printf("%d\n",ans); } return 0; } } //不知爲何,這題我用cin,cout居然只有10 pts/jk
目前只知道std是爆搜?\噴臉
//容我回來再補
\[ \mathcal The \quad End \]
\[ \text{我仍然在無人問津的陰雨黴溼之地;和着雨音唱着沒有聽衆的歌曲-《世末歌者》} \]