NC14314. Split
描述
输入描述
第一行两个正整数𝑆,𝑀
输出描述
输出一个非负整数表示答案
如果无法达到𝑀的收益输出−1
示例1
输入:
765 271828
输出:
14
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 484K, 提交时间: 2019-03-22 20:06:11
#include<bits/stdc++.h> using namespace std; #define int long long int s,m,l,r,ans,mid,a,b; bool pd(int x) { a=s/x;b=s%x; return(s*s-a*a*(x-b)-(a+1)*(a+1)*b)/2>=m; } signed main() { scanf("%lld%lld",&s,&m); l=1;r=s; while(l<=r) { mid=(l+r)/2; if(pd(mid))ans=mid,r=mid-1; else l=mid+1; } cout<<ans-1; return 0; }
C++ 解法, 执行用时: 5ms, 内存消耗: 312K, 提交时间: 2021-09-10 21:03:12
#include<bits/stdc++.h> using namespace std; int main() { int a,b; cin>>a>>b; for(int i=1;i<a;i++) { int f=a,c,d,e=0; for(int j=1;j<=i;j++) { c=f/(i-j+2); d=f-c; e+=c*d; f=d; } if(e>=b) { cout<<i; return 0; } } cout<<-1; return 0; }
C 解法, 执行用时: 8ms, 内存消耗: 312K, 提交时间: 2022-04-20 19:41:02
#include<stdio.h> int main() { int a,b; scanf("%d %d",&a,&b); for(int i=1;i<a;i++) { int f=a,c,d,e=0; for(int j=1;j<=i;j++) { c=f/(i-j+2); d=f-c; e+=c*d; f=d; } if(e>=b) { printf("%d",i); return 0; } } printf("-1"); return 0; }