hihocoder1543 SCI表示法
生活随笔
收集整理的這篇文章主要介紹了
hihocoder1543 SCI表示法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題意:任何一個數可以表示為連續整數相加,問這些連續整數的最大長度
題解:假設左右是l,r,那么(l+r)*(l-r+1)/2就是這段序列的和,枚舉2n的所有因子,找到最大的就可以了
我的做法是預處理前綴和,二分找到答案位置然后暴力 。。
#include <bits/stdc++.h> #define ll long long #define maxn 100100 using namespace std; ll a[maxn]; int main(){ll T,n;cin>>T;for(ll i=1;i<=100010;i++) a[i] = i*(i+1)/2;while(T--){cin>>n;ll l=0,r=100001,ans=-1,mid;while(l<=r){mid = (l+r)>>1;if(a[mid]<=n) ans = mid,l = mid+1;else r = mid-1;}if(a[ans] == n) cout<<ans<<endl;else{for(ll i=ans;i>=1;i--){if((n-a[i])%i == 0){cout<<i<<endl;break;}}}}return 0; }?
轉載于:https://www.cnblogs.com/Noevon/p/7287052.html
總結
以上是生活随笔為你收集整理的hihocoder1543 SCI表示法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【看番杂感】Clannad系列观后感(剧
- 下一篇: [基础]PeopleSoft中的作业和调