記事のディレクトリ
トピックリンク 。
アルゴリズムのアイデア
ケーキをトラバースして、この人用か次の人用かを判断します。判断基準は、この人の手にあるケーキの量がkに達したかどうかです。達すると、次の人に渡されます。
注意最後のケーキは、現在の人にあげても次の人にあげても、まだ数えていない人が一人いるので、忘れずに数えてください。
複数のレビューの質問、複数のレビューの質問。
コードの説明
上記の注意点は、私が書いたwhileループのifの2つのブランチの観点からも考慮することができ
ます。1。最初のブランチを入力します。明らかに、ansに変更はなく、現在の人を含める必要があります。
2. 2番目のブランチに入ると、このケーキを次の人に渡しました。次の人を無視しないように注意してください。
#include<iostream>
using namespace std;
int n = 0, k = 0, a = 0;
int cake = 0, ans = 0;// cake 当前朋友得到的蛋糕量,ans 分到了蛋糕的朋友数量
//注意,可能最后一个朋友没有得到满足,但还是分到了蛋糕
int main()
{
scanf("%d%d", &n, &k);
while (n--)
{
scanf("%d", &a);//蛋糕 a_i
if (cake < k)
{
cake += a;
}
else
{
ans++; //这位朋友满足了
cake = a;
//啊,蛋糕差点玩掉了
}
}
//所以最后一个人无论如何得算进去
ans++;
printf("%d", ans);
return 0;
}
結果分析
スコアは100ポイント、所要時間は0ミリ秒(速すぎる、システムが応答しない)、2.531MBのスペースを使用します。