⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pku1684.cpp

📁 这是ACM 方面的资料 是PKU的 北京大学的出来的
💻 CPP
字号:
// C DDL
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define SIZE 110
#define INF 100000

char line[SIZE][SIZE]; 
int N;

char ID[SIZE];
int ID_val[SIZE];
int ID_cnt;
int ID_use[SIZE];

void id_init()
{
	int i;
	for (i = 0; i < SIZE; i++)
	{
		ID_val[i] = -INF;
		ID_use[i] = 0;
	}
	ID_cnt = 0;
}

int add_id(char c)
{
	int i;
	for (i = 0; i < ID_cnt; i++)
	{
		if (ID[i] == c)
		{
			if (ID_use[i])
			{
				ID_use[i] = 0;
				return 1;
			}
			return 0;
		}
	}
	ID[ID_cnt] = c;
	ID_val[ID_cnt] = 0;
	ID_cnt++;
	return 1;
}

int inc_id(char c, int v)
{
	int i;
	for (i = 0; i < ID_cnt; i++)
	{
		if (ID[i] == c)
		{
			ID_val[i] += v;
			ID_use[i] = 1;
			return 1;
		}
	}
	return 0;
}

int set_id(char c, int v)
{
	int i;
	for (i = 0; i < ID_cnt; i++)
	{
		if (ID[i] == c)
		{
			ID_val[i] = v;
			ID_use[i] = 1;
			return 1;
		}
	}
	return 0;
}

int get_id(char c)
{
	int i;
	for (i = 0; i < ID_cnt; i++)
	{
		if (ID[i] == c)
		{
			ID_use[i] = 1;
			return ID_val[i];
		}
	}
	return -INF;
}

void init()
{
	int i;
	scanf("%d\n", &N);
	for (i = 1; i <= N; i++)
		gets(line[i]);
}

void To_upper(char cmd[])
{
	int i;
	for (i = 0; i < strlen(cmd); i++)
	{
		if (cmd[i] > 'Z')
			cmd[i] -= 32;
	}
}

void solve()
{
	int k = 1;
	char cmd[10], id[5];
	int lable, ic, id_v;
	id_init();
	while (k <= N)
	{
		sscanf(line[k], "%s", cmd);
		To_upper(cmd);
		if (strcmp(cmd, "DCL") == 0)  //定义 
		{
			sscanf(line[k], "%s %s", cmd, id);
			if (!add_id(id[0]))
				printf("%d 1\n", k);	//定义错误 
			k++;
			continue;
		}
		else if (strcmp(cmd, "END") == 0)
			break;
		else if (strcmp(cmd, "INC") == 0)
		{
			sscanf(line[k], "%s %s", cmd, id);
			if (!inc_id(id[0], 1))
				printf("%d 2\n", k);
			k++;
			continue;
		}
		else if (strlen(cmd) == 1)
		{
			sscanf(line[k], "%s = %d", id, &ic);
			if (!set_id(id[0], ic))
				printf("%d 2\n", k);
			k++;
			continue;
		}
		else if (strcmp(cmd, "DEC") == 0)
		{
			sscanf(line[k], "%s %s", cmd, id);
			if (!inc_id(id[0], -1))
				printf("%d 2\n", k);
			k++;
			continue;
		}
		else
		{
			sscanf(line[k], "%s %s", cmd, id);
			if (id[1] == 0 && isalpha(id[0]))
			{
				sscanf(line[k], "%s %s %d", cmd, id, &lable);
				id_v = get_id(id[0]);
				if (id_v == -INF)
					printf("%d 2\n", k);
				k = id_v > 0 ? lable : k+1;
				continue;
			}
			else
			{
				sscanf(line[k], "%s %d", cmd, &lable);
				k = lable;
				continue;
			}
		}
	}
}

int main()
{
	int t, T;
	scanf("%d", &T);
	for (t = 1; t <= T; t++)
	{
		init();
		printf("%d\n", t);
		solve();
	}
	return 0;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -