CCF 201909-2小明種リンゴ(続き)(C++)


201909-2小明種りんご(続き)
試験問題番号: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;
}