CCF 201909-2小明種リンゴ(続き)(C++)
201909-2小明種りんご(続き)
試験問題番号:201909-2
試験問題名:明ちゃんのりんご(続き)
時間制限:1.0 s
メモリ制限:512.0 MB
問題の説明:
解題プロセス
初めてこの問題を書いたのはCCF試験で90点を取って、もう一度振り返ってみると自分が考えすぎた(あるいは問題がはっきり説明されていない)ことに気づいた.総数と落ちた株の数を求めるのは難しくないはずで、問題とあまり考えが違いません.ここで連続落下組数を求めると,3本の木しかなく,1本ずつ落下している.では、3組ですか、1組ですか.問題は表現されていないと思いますので、初めて問題を作ったときに考えましたが、この状況は1組しかないと思います.ここでは,これらの木が周囲であることをシミュレーションして連続群数を求め,各木を判断すればよい.
ACコード
試験問題番号:201909-2
試験問題名:明ちゃんのりんご(続き)
時間制限:1.0 s
メモリ制限:512.0 MB
問題の説明:
解題プロセス
初めてこの問題を書いたのはCCF試験で90点を取って、もう一度振り返ってみると自分が考えすぎた(あるいは問題がはっきり説明されていない)ことに気づいた.総数と落ちた株の数を求めるのは難しくないはずで、問題とあまり考えが違いません.ここで連続落下組数を求めると,3本の木しかなく,1本ずつ落下している.では、3組ですか、1組ですか.問題は表現されていないと思いますので、初めて問題を作ったときに考えましたが、この状況は1組しかないと思います.ここでは,これらの木が周囲であることをシミュレーションして連続群数を求め,各木を判断すればよい.
ACコード
#include
#include
using namespace std;
struct Tree
{
int apple=0;
bool drop=0;
};
int main()
{
int n;
cin>>n;
Tree t[n];
int m;
int r;
for(int i=0;i<n;i++)
{
cin>>m;
cin>>r;
t[i].apple=r;//
for(int j=1;j<m;j++)
{
cin>>r;
if(r>0)
{
if(r!=t[i].apple)
{
t[i].drop=1;
t[i].apple=r;
}
}
else
t[i].apple+=r;
}
}
int asum=0,dsum=0;
deque <Tree> d;// ,
for(int i=0;i<n;i++)
{
asum+=t[i].apple;
if(t[i].drop)
dsum++;
d.push_back(t[i]);
}
Tree temp,temp1,temp2;
int lsum=0;
for(int i=0;i<n;i++)//
{
temp=t[i];
d.pop_front();
d.push_back(temp);
if(t[i].drop)
{
temp1=d.front();
d.pop_front();
temp2=d.front();
d.push_front(temp1);
if(temp1.drop&&temp2.drop)
lsum++;
}
}
cout<<asum<<' '<<dsum<<' '<<lsum;
return 0;
}