4 条题解
-
4
和morgen学长的差不多,改了一点😄 #include<iostream> using namespace std; int n,m,k; bool cheak(int mid) { //sum是当前选mid长度长凳最大容纳总人数 //最大容纳就是空位最少 //紧邻排列且每个排列空一位最优 //m/(mid+1)为最小空位数 int sum=n*(m-m/(mid+1)); if(sum>=k) return 1; return 0; } int main() { int t; cin>>t; while(t--) { cin>>n>>m>>k; //二分找最优 int l=1,r=m; int ans=0; while(l<=r) { int mid=(l+r)/2; if(cheak(mid)) { ans=mid; r=mid-1; } else { l=mid+1; } } cout<<ans<<endl; } return 0; }`` -
1
可以直接求平均值
#include<iostream> using namespace std; int main(){ int t; cin>>t; while(t--){ int n,m,k; cin>>n>>m>>k; if(k<=n*((m+1)/2)){ cout<<"1"<<'\n'; }else{ int a; //求可以坐几列,未满一列算一列 if(k%n==0){ a=k/n; }else{ a=k/n+1; } int b=a/((m-a)+1); //(m-a)是剩的列 if(a%((m-a)+1)==0){ //求平均 cout<<b<<'\n'; } else{ cout<<b+1<<'\n'; } } } return 0; }
- 1
信息
- ID
- 1162
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 127
- 已通过
- 38
- 上传者

