【思维—进制模拟映射】Hot Air Ballooning Gym

来源:互联网 发布:淘宝客服怎么设置挂起 编辑:程序博客网 时间:2024/06/01 10:10

Think:
1知识点:思维题:map/set/进制模拟映射(康拓展开启迪)
2题意:输入一个字符串,判断“不同”字符串的数量,“不同”字符串的定义为出现的数字种类不尽相同
3思路:
将“相同”字符串映射成同一表现形式,然后判断有多少不同表现形式即可
4思路实现:
(1):进制模拟映射,将不同数字赋予不同的权值,然后求和后排序后判断不同数字的个数

vjudge题目链接

以下为Wrong Answer代码——pow()返回值为double类型,需要强制类型转换

#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;int tp, link[1014], book[14];char st[104];int main(){    int n, i, t, sum;    while(~scanf("%d", &n)){        tp = 0;        while(n--){            scanf("%s", st);            sum = 0;            memset(book, 0, sizeof(book));            for(i = 0; st[i] != '\0'; i++){                t = st[i] - '0';                if(!book[t]){                    book[t] = 1;                    sum += pow(10, t);                }            }            link[tp++] = sum;        }        sort(link, link+tp);        int ans = 1;        for(i = 1; i < tp; i++){            if(link[i] != link[i-1]){                ans++;            }        }        printf("%d\n", ans);    }    return 0;}

以下为Accepted代码——十进制模拟映射

#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>using namespace std;int tp, link[1014], book[14];char st[104];int main(){    int n, i, t, sum;    while(~scanf("%d", &n)){        tp = 0;        while(n--){            scanf("%s", st);            sum = 0;            memset(book, 0, sizeof(book));            for(i = 0; st[i] != '\0'; i++){                t = st[i] - '0';                if(!book[t]){                    book[t] = 1;                    sum += (int)pow(10, t);                }            }            link[tp++] = sum;        }        sort(link, link+tp);        int ans = 1;        for(i = 1; i < tp; i++){            if(link[i] != link[i-1]){                ans++;            }        }        printf("%d\n", ans);    }    return 0;}

以下为Accepted代码——二进制模拟映射

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int tp, link[1014], book[14];char st[104];int main(){    int n, i, t, sum;    while(~scanf("%d", &n)){        tp = 0;        while(n--){            scanf("%s", st);            sum = 0;            memset(book, 0, sizeof(book));            for(i = 0; st[i] != '\0'; i++){                t = st[i] - '0';                if(!book[t]){                    book[t] = 1;                    sum += (1<<t);                }            }            link[tp++] = sum;        }        sort(link, link+tp);        int ans = 0;        if(tp) ans++;        for(i = 1; i < tp; i++){            if(link[i] != link[i-1]){                ans++;            }        }        printf("%d\n", ans);    }    return 0;}
原创粉丝点击