其他分享
首页 > 其他分享> > wxy 3.30 牛客练习赛59重现

wxy 3.30 牛客练习赛59重现

作者:互联网

v>

5062 C 赛时解法 直接线性规划啊,2 * a+4 * b<=x和 3*a+b<=y 相加就是 ( a+b ) <=(x+y)/5 x->x-x%2,应为a,b一定是正 整数,所以考虑交点不在第一象限的情况, b或者a/2 # include <bits/stdc++.h> using namespace std; typedef long long LL; int main() { int T; scanf("%d",&T); LL a,aa,b,bb,x,y; LL ans=0; while(T--){ scanf("%lld%lld",&x,&y); ans=0; a=(4*y-x)/10; b=(3*x-2*y)/10; if(b<0){ b=0; a=min(y/3,x/2); ans=a; }else if(a<0){ a=0; b=min(y,x/4); ans=b; }else{ for(LL i=a-10;i<=a+10;++i){ for(LL j=b-10;j<=b+10;++j){ if(i*2+j*4<=x&&i*3+j<=y) ans=max(ans,i+j); } } } printf("%lld\n",ans); } return 0; }# include <bits/stdc++.h> using namespace std; int main() { int T; scanf("%d",&T); while(T--){ int x,y; scanf("%d%d",&x,&y); x-=x%2; printf("%d\n",min((x+y)/5,min(y,x/2))); } return 0; } 二分解法 2a+3b 4a+b 都可以造一个装备,假设能造mid个装备 y-=mid = 2b x/2=a+2a y/2=b x/2-mid=a 此时第一种只用一件b,第二种只用一件a,二分就可以解了 这个是苏同的解法,QAQ,没看懂。。。 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5+5; int T; int x,y; int main(){ cin>>T; while(T--){ cin>>x>>y; int l=0,r=y; while(l!=r){ int mid=l+r+1>>1; int x1=x,y1=y-mid; x1/=2;y1/=2; x1-=mid; if(x1>=0&&y1>=0&&x1+y1>=mid)l=mid; else r=mid-1; } cout<<l<<endl; } } 题解三分 # include <bits/stdc++.h> using namespace std;D 找规律太慢了。。。,找出规律以后一定要小心仔细,不能想当然,先用打表找,实在找不到了再手 画,虽然还是不是很适应打表找规律,但是这个效率更高 int main() { int T; scanf("%d",&T); while(T--){ int x,y; scanf("%d%d",&x,&y); int l=0,r=min(x/2,y/3); while(r-l>10){ int m1=l+(r-l)/3,m2=r-(r-l)/3; if(m1+min((x-2*m1)/4,(y-3*m1))<m2+min((x-2*m2)/4,(y-3*m2))) l=m1; else r=m2; } int ans=0; for(int i=l;i<=r;++i){ ans=max(ans,i+min((x-2*i)/4,(y-3*i))); } printf("%d\n",ans); } return 0; } # include <bits/stdc++.h> using namespace std; typedef long long LL; LL f[100]; int main() { LL ans=3; f[1]=1,f[2]=2; for(int i=3;;++i){ if(i%2) f[i]=f[i-1]*2-1; else f[i]=f[i-1]*2+1; ans+=f[i]; //cout<<i<<" "<<f[i]<<" "<<ans<<endl; if(ans>1e18) break; } int T; scanf("%d",&T); while(T--){ LL n; scanf("%lld",&n); LL now=0; for(int i=1;;++i){ now+=f[i]; if(now>=n){ if(i%2==0){ printf("XiaoHuiHui\n"); }else printf("XiaoQiao\n"); break; } } }return 0; }

标签:练习赛,59,int,scanf,wxy,long,mid,while,LL
来源: https://www.cnblogs.com/fengzlj/p/15941293.html