欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

妈妈的考试

发布时间:2025/7/25 编程问答 54 豆豆
生活随笔 收集整理的这篇文章主要介绍了 妈妈的考试 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

链接:https://ac.nowcoder.com/acm/contest/880/A

 初步判断w1与题目的对错顺序无关,而和题目的对错个数有关。于是计算(s1+s2+……+sn)后可以发现 s13+s23+……+sn是等于w0的,而各项平方之和是等于n的,同时存在6×w1,于是就可以得到w1=  (w03  + w0( 2 - 3n ) ) / 6,对右边求导得到3w0+( 2 - 3 * n ) ,于是求零点即可。对于第一问,列出不等式并根据同号得正的方法分类讨论一下,求出端点(三个),然后在+-5的范围内取符合条件的极值,但是需要注意取值必需与n同奇偶,并在-n与n之间。对于第二问把求导取得的零点中负的那个按+-5范围求值取符合条件的极值即可。+-5的操作是为了防止卡精度,然后注意一下开int128。各种小细节没注意让我WA了好几发。

#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; }

 

转载于:https://www.cnblogs.com/ieqefcr/p/10851093.html

总结

以上是生活随笔为你收集整理的妈妈的考试的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。