洛谷 P1540 [NOIP2010 提高组] 机器翻译

题目概括

给定 N 个整数,和一个容量为 M 的“字典”,从头到尾依次翻译,每次翻译先看自家字典,没有的话再看别人的字典并存到自家字典,如果自家字典满了,当前单词的翻译会代替最早进入的。

做题思路

定义一个长度为 M 的字典数组,依次遍历 N 个数,每次翻译先检索字典数组,没有的话加入字典并ans++,当字典满了,就 a[tower % M + 1] = 当前数字。

CODE

90分(第二个测试点WA):

#include<bits/stdc++.h>
using namespace std;
int a[105];
int main(){
	int tower = 0, ans = 0;
	int m, n;
	cin >> m >> n;
	for (int i = 1; i <= n; i++) {
		bool flag = 0;
		int x;
		cin >> x;
		for (int j = 1; j <= m; j++) {
			if (a[j] == x){
				flag = 1;
			}
		}
		if (!flag) {
			a[tower % m + 1] = x;
			tower++;
			ans++;
		}
	}
	cout << ans << endl; 
	return 0;
}

下载数据后发现这个测试点有零,改了一下就AC了。
AC CODE:

#include<bits/stdc++.h>
using namespace std;
int a[105];
int main(){
	memset(a, -1, sizeof(a));
	int tower = 0, ans = 0;
	int m, n;
	cin >> m >> n;
	for (int i = 1; i <= n; i++) {
		bool flag = 0;
		int x;
		cin >> x;
		for (int j = 1; j <= m; j++) {
			if (a[j] == x){
				flag = 1;
			}
		}
		if (!flag) {
			a[tower % m + 1] = x;
			tower++;
			ans++;
		}
	}
	cout << ans << endl; 
	return 0;
}
posted @ 2024-08-19 14:47    阅读(247)  评论(0)    收藏  举报