妈妈的考试
鏈接:https://ac.nowcoder.com/acm/contest/880/A
?初步判斷w1與題目的對錯順序無關(guān),而和題目的對錯個數(shù)有關(guān)。于是計算(s1+s2+……+sn)3?后可以發(fā)現(xiàn) s13+s23+……+sn3?是等于w0的,而各項平方之和是等于n的,同時存在6×w1,于是就可以得到w1=? (w03??+ w0( 2 - 3n ) ) / 6,對右邊求導(dǎo)得到3w02?+( 2 - 3 * n ) ,于是求零點即可。對于第一問,列出不等式并根據(jù)同號得正的方法分類討論一下,求出端點(三個),然后在+-5的范圍內(nèi)取符合條件的極值,但是需要注意取值必需與n同奇偶,并在-n與n之間。對于第二問把求導(dǎo)取得的零點中負(fù)的那個按+-5范圍求值取符合條件的極值即可。+-5的操作是為了防止卡精度,然后注意一下開int128。各種小細(xì)節(jié)沒注意讓我WA了好幾發(fā)。
#include<cstdio> #include<algorithm> #define rep(i,j,k) for(int i=j;i<=k;i++) #include<cmath> #include<cctype>using namespace std; typedef __int128 ll;template <typename T> inline T in(T &x){char c11=getchar(),ob=0;x=0;while(c11^'-'&&!isdigit(c11))c11=getchar();if(c11=='-')c11=getchar(),ob=1;while(isdigit(c11))x=x*10+c11-'0',c11=getchar();if(ob)x=-x;return x; }ll sqrt(ll x) {ll l=0,r=2000000000,mid;while(l!=r){mid=((l+r)>>1)+1;if(ll(mid)*mid<=x) l=mid;else r=mid-1;}return l; }ll g(ll w0,ll n){return (w0*w0*w0+w0*(2-3*n))/6;}void out(ll xx){if(xx){out(xx/10);putchar(xx%10+'0');}}void kw0(ll n){ll a=sqrt(3*n-2);ll ans=9000000000000000000,tp;for(ll i=a-5;i<=a+5;i++){if(i>=-n&&i<=n&&(n-i)%2!=1){tp=g(i,n);if(tp<=0) continue;ans=min(ans,tp);}}a=-a;for(ll i=a-5;i<=a+5;i++){if(i>=-n&&i<=n&&(n-i)%2!=1){tp=g(i,n);if(tp<=0) continue;ans=min(ans,tp);}}a=0;for(ll i=a-5;i<=a+5;i++){if(i>=-n&&i<=n&&(n-i)%2!=1){tp=g(i,n);if(tp<=0) continue;ans=min(ans,tp);}}out(ans);printf(" ");return ; }void kw1(ll n){ll a=(n*3-2)/3,ans=-9000000000000000000;a=-sqrt(a);for(ll i=a-5;i<=a+5;i++){if(i>=-n&&i<0&&(n-i)%2==0){ ans=max(ans,g(i,n));}}out(ans);return ; }int main(){int T;ll n;in(T);rep(i,1,T){in(n);kw0(n);kw1(n);putchar(10);}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/ieqefcr/p/10851093.html
總結(jié)
- 上一篇: Linux 文件系统引起的云盘文件系统异
- 下一篇: LeetCode N-Queens