妈妈的考试
Posted ieqefcr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了妈妈的考试相关的知识,希望对你有一定的参考价值。
链接:https://ac.nowcoder.com/acm/contest/880/A
初步判断w1与题目的对错顺序无关,而和题目的对错个数有关。于是计算(s1+s2+……+sn)3 后可以发现 s13+s23+……+sn3 是等于w0的,而各项平方之和是等于n的,同时存在6×w1,于是就可以得到w1= (w03 + w0( 2 - 3n ) ) / 6,对右边求导得到3w02 +( 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; }
以上是关于妈妈的考试的主要内容,如果未能解决你的问题,请参考以下文章
scratch小瓢虫找妈妈 电子学会图形化编程scratch等级考试二级真题和答案解析2021-6
python预测身高 青少年编程电子学会python编程等级考试一级真题解析2021-12