本文主要是介绍Contest1002 - HHU ACM 综合训练1 C题 Boxes and Balls(找规律),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题意:给定一个盒子,盒子里装着n个球。每次操作如下:给定一个空盒子,所有装有球的盒子都要给空盒子一个球,之后将没有球的盒子拿走按球个数排序。排序后的数字序列看做一个状态,有时候每次操作后状态保持不变。现在给定一个数m,问在不超过m的情况下可以保持状态不变的初始球数最大为多少。
思路:找规律。会发现只要出现1,2,3,4....这样的序列即可满足状态不变要求,即m为1+2+3+4+....的和。因此只要求出最接近n的m,采用求根公式再求和即可。
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std; int main(){ int t; cin>>t; for(int i=1;i<=t;i++){ long long n; scanf("%lld",&n); long long x=(sqrt(1+8*n)-1)/2; long long ans=(x+1)*x/2; //if(ans>n) //ans=x*(x-1)/2; printf("Case #%d: ",i); cout<<ans<<endl; } return 0;
}
这篇关于Contest1002 - HHU ACM 综合训练1 C题 Boxes and Balls(找规律)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!