NC206074. 无敌阿姨
描述
输入描述
输入包含多组数据,第一行包含一个数字 ,表示测试数据组数。接下来是T组数据,
每组数据第一行为三个整数 分别表示楼的层数,阿姨的体力值以及抱着被子上楼的体力消耗值。
第二行 n 个整数 表示每层的被子数。
输出描述
每组数据输出包含一个整数,表示阿姨把所有的被子都拿出去需要的次数。
示例1
输入:
1 4 5 1 1 1 2 4
输出:
3
说明:
第一次阿姨先从第一层拿一床被子,再上到第二层拿1床被子,再上到第三层拿一床被子,其中拿被子消耗体力为3,上楼消耗体力为2;第二次阿姨先从第三层拿一床被子,再上到第四层拿三床被子,其中拿被子消耗体力为4,上楼消耗体力为1;第三次阿姨直接从第四层拿一床被子消耗体力为1,全部为拿被子消耗的体力。C(clang11) 解法, 执行用时: 13ms, 内存消耗: 376K, 提交时间: 2021-02-21 20:56:27
#include<stdio.h> int main() { int t,m,n,tp,b,k; scanf("%d",&t); { while(t--) {tp=1;//次数 scanf("%d%d%d",&n,&m,&k); int p=m; while(n--) { scanf("%d",&b); while(b>p)//当前被子比 体力多 { b-=p; p=m;//恢复 tp++; } p-=b;//体力多 if(n&&p<=k)//上不了下一层 { tp++; p=m; } else { p-=k; } } printf("%d\n",tp); } } }
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 504K, 提交时间: 2020-05-23 16:13:06
#include<bits/stdc++.h> using namespace std; int a[1000]; int t,m,n,k; int main() { cin>>t; while(t--) { cin>>n>>m>>k; int sum=0,cnt=0,d=m; for(int i=0; i<n; i++) { cin>>a[i]; if(i) { if(sum) { if(m-sum<=k)cnt++,sum=0; else a[i]+=k+sum; } } cnt+=a[i]/m; sum=a[i]%m; } if(sum)cnt++; cout<<cnt<<endl; } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 404K, 提交时间: 2020-07-01 00:34:46
#include<bits/stdc++.h> using namespace std; int main() { int t,x,n,m,k,ans,T; scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&m,&k); ans=1,t=m; while(n--) { scanf("%d",&x); while(x>t)x-=t,t=m,ans++; t-=x; if(n&&t<=k)ans++,t=m; else t-=k; } printf("%d\n",ans); } return 0; }