这题有问题,还是题面有误啊
查看原帖
这题有问题,还是题面有误啊
890321
mooktian楼主2024/6/12 09:41

第一次提交60分,看了一天也不知道哪里错了,后来看了题解,才看到问题在哪里。

题目里面有这样一句话:

如果绝对值相等,则编号较小的灰阶更近。

但是当你把这个条件加上,就只有60分,不加这个条件就能AC。

这个到底是什么问题。 下面是AC代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,m,a[25][25],b[25][25],vis[256],p[256];
int c(char c1,char c2) {
	int num = 0;
		if(c1 <= '9' && c1 >= '0') num += (c1 - '0')*16;
		else num += (c1 - 'A' + 10)*16;
		if(c2 <= '9' && c2 >= '0') num += (c2 - '0')*1;
				else num += (c2 - 'A' + 10)*1;
	return num;
}
void init() {
	for(int i = 0;i <= 255;i++) p[i] = i;
}
bool cmp(int x,int y) {
	return vis[x] > vis[y] || (vis[x] == vis[y] && x < y);
}
int judge(int x) {
	int md = 300,id;
	for(int i = 0;i < 16;i++) {
		if(abs(x - p[i]) < md) {
			md = abs(x - p[i]), id = i; 
		}//else if(abs(x - p[i]) == md) {
		//	if(p[id] > p[i]) id = i;
		//}
	}
	return id;
}
int main( ) {
init();
cin >> n;
string s;
for(int i = 1;i <= n;i++) {
	cin >> s;
	m = s.size();
	char c1,c2;
	for(int j = 0;j < m;j += 2) {
		c1 = s[j],c2 = s[j+1];
		a[i][j/2+1] = c(c1,c2);
		vis[a[i][j/2+1]]++;
	}
}
sort(p,p+256,cmp);
for(int i = 0;i < 16;i++) printf("%02X",p[i]);
printf("\n");
for(int i = 1;i <= n;i++) {
	for(int j = 1;j <= m/2;j++) {
		printf("%X",judge(a[i][j]));
	}
	printf("\n");
}
return 0;
}

这个是60分代码,唯一差别就是加了这个条件。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,m,a[25][25],b[25][25],vis[256],p[256];
int c(char c1,char c2) {
	int num = 0;
		if(c1 <= '9' && c1 >= '0') num += (c1 - '0')*16;
		else num += (c1 - 'A' + 10)*16;
		if(c2 <= '9' && c2 >= '0') num += (c2 - '0')*1;
				else num += (c2 - 'A' + 10)*1;
	return num;
}
void init() {
	for(int i = 0;i <= 255;i++) p[i] = i;
}
bool cmp(int x,int y) {
	return vis[x] > vis[y] || (vis[x] == vis[y] && x < y);
}
int judge(int x) {
	int md = 300,id;
	for(int i = 0;i < 16;i++) {
		if(abs(x - p[i]) < md) {
			md = abs(x - p[i]), id = i; 
		}else if(abs(x - p[i]) == md) {
			if(p[id] > p[i]) id = i;
		}
	}
	return id;
}
int main( ) {
init();
cin >> n;
string s;
for(int i = 1;i <= n;i++) {
	cin >> s;
	m = s.size();
	char c1,c2;
	for(int j = 0;j < m;j += 2) {
		c1 = s[j],c2 = s[j+1];
		a[i][j/2+1] = c(c1,c2);
		vis[a[i][j/2+1]]++;
	}
}
sort(p,p+256,cmp);
for(int i = 0;i < 16;i++) printf("%02X",p[i]);
printf("\n");
for(int i = 1;i <= n;i++) {
	for(int j = 1;j <= m/2;j++) {
		b[i][j] = judge(a[i][j]);
		printf("%X",b[i][j]);
	}
	printf("\n");
}
return 0;
}
2024/6/12 09:41
加载中...