diff --git a/GESP/灰阶图像.cpp b/GESP/灰阶图像.cpp new file mode 100644 index 0000000..f43196b --- /dev/null +++ b/GESP/灰阶图像.cpp @@ -0,0 +1,91 @@ +#include +using namespace std; +const int N = 256; +//Ͱ +int bucket[N];//0 ~ 255 + +//ԭʼַ +string q[30]; + +//һ16ƵĻҽתΪһ±ֵ +int get(char a, char b) { + return (a - '0') * 16 + (b - '0'); +} + +//һʮƵĻҽֵ[0,255]תʮ[0,FF] +string toHex(int x) { + string res; + int a = x % 16; // 0 ~ 15 + int b = x / 16; // + if (a >= 10) + res = 'A' + a - 10; + else + res = '0' + a; + if (b >= 10) + res = res + 'A' + b - 10; + else + res = res + '0' + b; +} + +//ṹ壬ͰеĻҽװõ +struct Node { + int id;//± + int cnt;// + const bool operator<(const Node &b) const { + if (cnt == b.cnt) + return id < b.id; + return cnt > b.cnt; + } +}; +vector vec;//ҪbucketװNodeŵpУʹýṹ + +int main() { + int n; + cin >> n;//nͼ + for (int i = 1; i <= n; i++) { + string s; + q[i] = s;//ԭʼַ + cin >> s; + for (int j = 0; j < s.size(); j += 2) { + char a = s[j], b = s[j + 1]; + //a='A' b='B' AB + //Ҫ ABжٸ + //+ͰĻǸͰֵ±Ӧʲô + //100һֵɫɫ AB FF + int k = get(a, b); //ҽ׶Ӧλ + bucket[k]++; + } + } + //ҳǰ16λʹƵʸߵĻҽ + //򣬰ʲôأ + //1ǰ + //2һ?ͰСǰ + for (int i = 0; i <= 255; i++) { + vec.push_back({i, bucket[i]}); + } + sort(vec.begin(), vec.end()); + //һѾźvector + //vec[0]~vec[15]; vec[0].id vec[0].cnt + //toHex(vec[0].id) + // AA BB CC DD + + for (int i = 1; i <= n; i++) { //öÿԭʼַÿ2һ飬жСӦеһӽ + for (int j = 0; j < q[0].size(); j += 2) { + char a = q[j], b = q[j + 1]; //0 F ,0 F + //abװĶ̴vecеǰ16ĸ + int x = get(a, b); + int mi = INT_MAX; + int mi_p = 0; + for (int k = 0; k < min(16, vec.size()); k++) { //16зյģΪû16ô + if (mi > abs(vec[k] - x)) { + mi = abs(vec[k] - x); + mi_p = k; + } + } + //mi_p [0,255] -> ʮ + //ǰa,bֵ޸Ϊmi_pҽֵ + cout << toHex(mi_p); + } + } + return 0; +}