2014년 바이두의 별 프로그래밍 대회 - 1차전(2라운드)

2411 단어 프로그램 설계
1001
폭력.
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn = 100100;
int ll[maxn], rr[maxn];
struct node
{
	int x, y, bj;
}e[maxn];


int main()
{
	int cas = 1;
	int T;
	scanf("%d", &T);
	int n;
	while(T--)
	{
		scanf("%d", &n);
		for(int i = 1; i <= n; i++)
		{
			scanf("%d %d", &e[i].x, &e[i].y);
			if(e[i].y == 0)
				e[i].bj = 0;
			else
				e[i].bj = 1;
			//c[i] = e[i].y;
		}
		int now = -1;
		for(int i = 1; i <= n; i++)
		{
			if(e[i].y != 0)
				now = i;
			ll[i] = now;
		}
		now = -1;
		for(int i = n; i >= 1; i--)
		{
			if(e[i].y != 0)
				now = i;
			rr[i] = now;
		}
		for(int i = 1; i <= n; i++)
		{
			if(e[i].bj == 0)
			{
				if(ll[i] != -1 && rr[i] != -1)
				{
					int s1 = abs(e[i].x - e[ll[i]].x);
					int s2 = abs(e[i].x - e[rr[i]].x);
					if(s1 > s2)
						e[i].y = e[rr[i]].y;
					else if(s1 < s2)
						e[i].y = e[ll[i]].y;
					else
					{
						if(e[ll[i]].y > e[rr[i]].y)
							e[i].y = e[ll[i]].y;
						else
							e[i].y = e[rr[i]].y;
					}
				}
				else if(ll[i] != -1)
				{
					e[i].y = e[ll[i]].y;
				}
				else
				{
					e[i].y = e[rr[i]].y;
				}
			}
		}
		int m;
		scanf("%d", &m);
		printf("Case #%d:
", cas++); while(m--) { char str[10]; scanf("%s", str); if(str[0] == 'Q') { for(int i = 1; i <= n; i++) { if(e[i].bj == 0) { if(ll[i] != -1 && rr[i] != -1) { int s1 = abs(e[i].x - e[ll[i]].x); int s2 = abs(e[i].x - e[rr[i]].x); if(s1 > s2) e[i].y = e[rr[i]].y; else if(s1 < s2) e[i].y = e[ll[i]].y; else { if(e[ll[i]].y > e[rr[i]].y) e[i].y = e[ll[i]].y; else e[i].y = e[rr[i]].y; } } else if(ll[i] != -1) { e[i].y = e[ll[i]].y; } else { e[i].y = e[rr[i]].y; } } } int x, sum = 0; scanf("%d", &x); for(int i = 1; i <= n; i++) if(e[i].y <= x) sum++; printf("%d
", sum); } else { int x, y; scanf("%d %d", &x, &y); e[x+1].y = y; } } } return 0; }

좋은 웹페이지 즐겨찾기