Submission #335184

#TimeUsernameProblemLanguageResultExecution timeMemory
335184VodkaInTheJarFortune Telling 2 (JOI14_fortune_telling2)C++14
4 / 100
3079 ms2364 KiB
	#include <bits/stdc++.h>
	#pragma GCC optimize("O3")
	#define endl '\n'

	using namespace std;

	const int maxn = 2e5 + 3; 

	int n, k; 
	int a[maxn], b[maxn], t[maxn];
	void read()
	{
		cin >> n >> k;
		for (int i = 1; i <= n; i++)
		cin >> a[i] >> b[i];
		
		for (int i = 1; i <= k; i++)
		cin >> t[i];
	}

	void solve()
	{
		long long ans = 0;
		for (int i = 1; i <= n; i++)
		{
			vector <int> v; 
			for (int j = 1; j <= k; j++)
			{
				if (t[j] >= max(a[i], b[i]))
				v.push_back(1);
				
				else 
				if (t[j] >= min(a[i], b[i]))
				v.push_back(2);
			}
			
			int diff = 1;
			for (int j = 0; j < (int)v.size()-1; j++)
			if (v[j] != v[j+1])
			diff++;
			
			int cnt = 0;
			for (auto j: v)
			{
				if (j == 2)
				break;
				
				cnt++;
			}
			
			if (cnt == (int)v.size())
			{
				ans += (cnt & 1) ? b[i] : a[i];
				continue;
			}
			
			int first;
			if (cnt % 2 == 0)
			{
				if (cnt != 0)
				diff--;
				
				first = 2;
			}
			
			else 
			first = 1; 
			
			cnt = 0;
			for (int j = (int)v.size()-1; j >= 0; j--)
			{
				if (v[j] == 2)
				break;
				
				cnt++;
			}
			
			if (cnt % 2 == 0 && cnt != 0)
			diff--;
			
			int temp;
			if (diff == 0)
			temp = 0;
			
			else
			if (a[i] >= b[i])
			{
				if (first == 1)
				temp = diff;
				
				else 
				temp = diff + 1; 
			}
			
			else 
			{
				if (first == 2)
				temp = diff;
				
				else 
				temp = max(1, diff - 1);
			}
			
			if (temp & 1)
			ans += b[i];
			
			else
			ans += a[i];
		}
		
		cout << ans << endl; 
	}

	int main()
	{
		ios_base::sync_with_stdio(false);
		cin.tie(nullptr);
		cout.tie(nullptr);

		read();
		solve();
	}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...