結果

問題 No.871 かえるのうた
ユーザー lunnear
提出日時 2019-11-01 22:09:12
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
TLE  
実行時間 -
コード長 1,015 bytes
コンパイル時間 806 ms
コンパイル使用メモリ 82,868 KB
最終ジャッジ日時 2025-01-08 02:13:39
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 46 TLE * 2 MLE * 1
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <list>
#include <cmath>

using namespace std;

typedef long long s8;

struct Frog
{
	s8 pos;
	s8 vol;
	bool check = false;
};

list<s8> getResList(Frog *f, s8 *n, s8 *k)
{
	list<s8> res;
	for(int i = *k - 1; i >= 0; i--)
	{
		if(abs(f[i].pos - f[(*k)].pos) <= f[(*k)].vol)
			res.push_back(i);
		else
			break;
	}
	for(int i = *k + 1; i < *n; i++)
	{
		if(abs(f[i].pos - f[(*k)].pos) <= f[(*k)].vol)
			res.push_back(i);
		else
			break;
	}
	
	return res;
}

int solve(Frog *f, s8 *n, s8 *k)
{
	int ans = 0;
	list<s8> res = getResList(f, n, k);
	for(auto i = res.begin(); i != res.end(); i++)
	{
		if(f[(*i)].check)
			continue;
		
		f[(*i)].check = true;
		ans++;
		ans += solve(f, n, &(*i));
	}
	
	return ans;
}

int main()
{
	s8 n, k;
	cin >> n >> k;
	k--;
	
	Frog frog[n];
	
	for(int i = 0; i < n; i++)
	{
		cin >> frog[i].pos;
	}
	for(int i = 0; i < n; i++)
	{
		cin >> frog[i].vol;
	}
	
	int ans = 1;
	frog[k].check = true;
	ans += solve(frog, &n, &k);
	
	cout << ans << endl;
}

0