首页 > 试题广场 >

找“异数”

[编程题]找“异数”
  • 热度指数:4047 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
定义:数值序列中包含2~16进制整数,如果序列中有一个数,与序列中其他任何一个数大小都不相等,则这个数叫做“异数”。请找出给定数值序列中所有的“异数”.

输入描述:
输入数值序列i行(0<i),每一行分别是进制和数值,以“#”分割。如:n#m, n是整数,代表n进制(1<n<17),m是n进制下的数值.
输入序列以结束符”END”结束。
m的字符集为0-9和A-F,保证数值在十进制下不超过1e9,行数不超过100001行。


输出描述:
输出j行(0<j<=i),每一行都是输入序列的“异数”。要求:
1.按照输入序列的原序输出;
2.如果没有”异数”,输出字符串”None”
3.结束符“END”不用输出
示例1

输入

10#15
4#32
4#33
8#17
END

输出

4#32
//package com.mingzhouL.exer;

/**
 * @author LMZ
 * @create 2020-05-14-11:21
 */

/*
思路:写一个方法,用于将任意进制转为十进制
主函数中,读入一个进制数就放到方法里面求结果
给出三个list分别存储输入序列、当前序列对应的十进制数、所有异数
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        int temp = Integer.MAX_VALUE;//用于记录相同的数值
        ArrayList<String> as = new ArrayList<String>();//存储输入的序列
        ArrayList<Integer> ai = new ArrayList<Integer>();//用于记录当前序列的十进制数
        ArrayList<Integer> ad = new ArrayList<Integer>();//用于记录异数
        while(!(str = br.readLine()).equals("END")){
            as.add(str);
            String[] nowstr = str.split("#");
            int n = Integer.parseInt(nowstr[0]);
            int num = xToten(n,nowstr[1]);
            ai.add(num);
            if(ad.contains(num)){
                temp = num;
                ad.remove(new Integer(num));
            }
            else
                ad.add(num);
        }
        ad.remove(new Integer(temp));//防止还有一个相同数被添加
        for(int i = 0;i<ad.size();i++){
            int index = ai.indexOf(ad.get(i));
            System.out.println(as.get(index));
        }
    }

    public static int xToten(int n,String str){
        if(n==10)return Integer.parseInt(str);
        char[] ch = str.toCharArray();
        int sum = 0;
        for(int i = ch.length - 1,j=0;i>=0;i--){
            if(ch[i]>='0'&&ch[i]<='9')
                sum+=(ch[i]-'0')*(int)Math.pow(n,j++);
            else
                sum+=(ch[i]-'A'+10)*(int)Math.pow(n,j++);
        }
        //System.out.println(sum);
        return sum;
    }
}
有没有大神指点一下,为啥我这个只能通过13.3%呢?
编辑于 2020-05-15 11:19:48 回复(0)

这题map需要注意的是,在key不存在的时候可以自动创建

#include <iostream>
#include <map>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace  std;

int convertValue(int jinzhi, string value) {
    if (jinzhi == 10) return stoi(value);
    int i = 0;
    for (int index = 0;index <value.size();++index) {
        if ('0' <= value[index] && value[index] <= '9')
            i = i*jinzhi + value[index] - '0';
        else i = i*jinzhi + value[index] - 'A'+10;

    }
    return i;
}
struct data {
    string str;
    int value;

};
int main() {
    string str,last="None";
    cin >> str;
    map<int,int> result;
    vector<struct data> string_value;;
    while (str != "END") {
        int n = stoi(str.substr(0, str.find('#')));
        string m = str.substr(str.find('#') + 1);
        int va = convertValue(n, m);

        struct data d = { str,va };
        string_value.push_back(d);
        ++result[string_value.back().value];
        cin >> str;
    }

    for (struct  data i:string_value)    {
        if (result[i.value] == 1) {
            last = i.str;
            cout << last <<endl;
        }
    };
    if (last == "None") {
        cout << "None";
    }

    system("pause");
    return 0;
}
发表于 2019-07-26 17:01:01 回复(0)
#include <bits/stdc++.h> using namespace std; int F(int n, string m){     int s = 0;     int l = m.length();     int p = 1;     for(int i=0;i<l;i++){         char c = m[l-1-i];         if(c>='A')             s += (10+c-'A')*p;         else             s +=(c-'0')*p;         p *= n;     }     return s; } int main(){     string s;     vector<pair<string,int>> S;     unordered_map<int,int> M;     int id = 0;     while(cin>>s){         if(s=="END")             break;         int p = s.find('#');         string n_str = s.substr(0,p);         string m = s.substr(p+1);         int n = stoi(n_str);         int x = F(n,m);         S.push_back({s,x});         M[x]++;     }     int k = 0;     bool isNone = true;     for(int i=0;i<S.size();i++){         int x= S[i].second;         if(M[x]==1){             cout<<S[i].first<<endl;             isNone = false;         }     }     if(isNone)         cout<<"None"<<endl;     return 0; }

发表于 2019-07-15 10:27:53 回复(0)
#include <bits/stdc++.h>
using namespace std;
const int AtoN[] = {10,11,12,13,14,15};
int main()
{    
    string stmp,n="None";
    vector<pair<string,int>> vp;
    map<int,int> m;
    while(cin >> stmp)
    {
        if(stmp=="END")
            break;
        int pos=stmp.find('#');
        string stmp1=stmp.substr(0,pos);
        string stmp2=stmp.substr(pos+1);
        stringstream ss;
        ss<<stmp1;
        int jz;
        ss>>jz;
        int data=0;
        for(int j=0;j<stmp2.size();j++)
        {
            if(stmp2[j]>='0'&&stmp2[j]<='9')
            {
                data*=jz;
                data+=stmp2[j]-'0';
            }
            else
            {
                data*=jz;
                data+= AtoN[stmp2[j]-'A'];
            }
        }
        vp.push_back(make_pair(stmp,data));
        m[vp.back().second]++;
    }
    for(int i=0;i<vp.size();i++)
    {
        if(m[vp[i].second]==1)
        {
            n=vp[i].first;
            cout<<n<<endl;
        }
    }
    if(n=="None")
        cout<<n<<endl;
    return 0;
}

发表于 2019-07-04 20:54:46 回复(2)
""""
进制转换和数组计数
"""
import sys
from collections import Counter

if __name__ == "__main__":
    # sys.stdin = open("input.txt", "r")
    a, b = [], []  # a记录原字符串,b记录十进制的数值
    while True:
        s = input().strip()
        if s == 'END':
            break
        a.append(s)
    for c in a:
        n, m = c.split('#')
        b.append(int(m, int(n)))
    dic = Counter(b)
    ans = []
    for i in range(len(b)):
        if dic[b[i]] == 1:
            ans.append(a[i])
    if not ans:
        print("None")
    else:
        print('\n'.join(ans))

发表于 2019-07-14 20:42:34 回复(0)
import java.io.*;
import java.util.*;
 /*
思路很简单,就是都变成十进制的,变成十进制有函数
Integer.parseInt(val, radix);表示将radix下的val转换为十进制,然后用一个哈希表记录就好了
*/
class Pair{
    public String str;
    public int val;

    public Pair(String str, int val) {
        this.str = str;
        this.val = val;
    }

    @Override
    public String toString() {
        return str;
    }
}

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;

        //保存字符串及其对应的十进制数
        List<Pair> list = new ArrayList<>();
        //保存对应的十进制数及其出现的次数
        Map<Integer, Integer> map = new HashMap<>();
        //输入
        while (!(str = br.readLine()).equals("END")) {
            //获取其对应的十进制的值
            int value = getVal(str);
            list.add(new Pair(str, value));
            map.put(value, map.getOrDefault(value,0) + 1);
        }

        boolean res = false;
        for (int i = 0; i < list.size(); i++) {
            if (map.get(list.get(i).val) == 1) {
                res = true;
                System.out.println(list.get(i));
            }
        }

        if (!res) {
            System.out.println("None");
        }
    }

    private static int getVal(String str) {
        String[] strs = str.split("#");
        //找出进制
        int radix = Integer.parseInt(strs[0]);
        //算出对应的十进制的值
        int val = Integer.parseInt(strs[1], radix);

        return val;
    }
}
发表于 2019-09-01 15:14:13 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;

class Pair {
    String key;
    int val;

    Pair(String key, int val) {
        this.key = key;
        this.val = val;
    }
}


public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String str;
        //保存字符和其对应的十进制值的list集合
        ArrayList<Pair> list = new ArrayList<>();
        //对应的10进制的值和出现的次数
        HashMap<Integer, Integer> map = new HashMap<>();
        while (!(str = bf.readLine()).equals("END")) {
            int value = getValue(str);
            list.add(new Pair(str, value));
            map.put(value, map.getOrDefault(value, 0) + 1);
        }
        boolean reslut = false;
        for (int i = 0; i < list.size(); i++) {
            if (map.get(list.get(i).val) == 1) {
                reslut = true;
                System.out.println(list.get(i).key);
            }
        }
        if (!reslut) {
            System.out.println("None");
        }
    }

    //其他进制转10进制 注意 A表示10,B表示11....
    private static int getValue(String s) {
        String[] strs = s.split("#");
        int x = Integer.parseInt(strs[0]);//进制数
        int sum = 0;
        for (int i = 0; i < strs[1].length(); i++) {
            int n = strs[1].charAt(i) - '0';
            if (n > 9) {
                n = n - 7;
            }
            sum = sum * x + n;
        }
        return sum;
    }
}
发表于 2019-08-01 16:21:31 回复(0)

运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。
case通过率为86.67%---多提交几次也能过,哈哈哈

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        Map<Integer,Integer> map  = new LinkedHashMap<>();
        Map<Integer,String> map1  = new HashMap<>();
        while (scanner.hasNext()){
            String str = scanner.nextLine();
            if (str.equals("END")){
                break;
            }
            String[] a = str.split("#");
            int num = Integer.parseInt(a[1],Integer.parseInt(a[0]));
            map1.put(num,str);
            map.put(num, map.getOrDefault(num, 0)+1);
        }
        scanner.close();
        int sign = 0;
        for (int key: map.keySet()){
            if(map.get(key) == 1){
                sign = 1;
                System.out.println(map1.get(key));
            }
        }
        if(sign == 0){
            System.out.println("None");
        }
    }
}

参考其他大佬的思路,进过修改,第一次也没通过93%
后面提交几次都通过

import java.util.*;
public class Main{
    static class  pair{
        String key;
        int val;
        pair(String key, int val){
            this.key = key;
            this.val = val;
        }
    }
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        Map map  = new HashMap();
        ArrayList list = new ArrayList();
        while (scanner.hasNext() ){
            String str = scanner.nextLine();
            if (str.equals("END")){
                break;
            }
            String[] a = str.split("#");
            String a1 = a[1];//数
            int a0 = Integer.parseInt(a[0]);
            int num = Integer.parseInt(a1,a0);
            list.add(new pair(str, num));
            map.put(num, map.getOrDefault(num, 0)+1);
        }
        int sign = 0;
        for(int i = 0; i < list.size(); i++){
            if(map.get(list.get(i).val) == 1){
                sign = 1;
                System.out.println(list.get(i).key);
            }
        }
        if(map.size() == 0 || sign == 0){
            System.out.println("None");
        }
    }
}
编辑于 2019-08-27 16:17:35 回复(1)
#include<bits/stdc++.h>
using namespace std;

//unordered_map<char,int> mp={{'A',10},{'B',11},{'C',12},{'D',13},{'E',14},{'F',15},{'G',16}};

int main()
{
    string str;
    vector<string> vec;
    //unordered_set<string> S;
    while(getline(cin,str) && str!="END")
    {
        vec.push_back(str);  
    }
    vector<int> nums;
    unordered_map<int,int> cnt;
    for(auto & s:vec)
    {
        int pos=s.find("#",0);
        int jz=stoi(s.substr(0,pos));
        pos++;
        //cout<<jz<<endl;
        int res=0;
        for(int i=pos;i<s.size();i++)
        {
            res+=pow(jz,s.size()-1-i)*(s[i]>='A'?(s[i]-'A'+10):(s[i]-'0'));
        }
        //cout<<res<<endl;
        nums.push_back(res);
        cnt[res]++;
    }
    bool flag=false;
    for(int i=0;i<vec.size();i++)
    {
        if(cnt[nums[i]]==1)
        {
             cout<<vec[i]<<endl;
            flag=true;
        }
    }
    if(!flag) cout<<"None"<<endl;
    return 0;
}

发表于 2020-09-14 18:40:06 回复(0)
#include<bits/stdc++.h>
using namespace std;
const int N = 100;

int f(char *num, int m) {
	int ans = 0;
	int n = strlen(num);
	for (int i = 0,j = n - 1;j >= 0; ++i,--j) {
		int k = 0;
		if(num[j] >= 'A' && num[j] <= 'F')
			k = 10 + num[j] - 'A';
		else
			k = num[j] - '0';
		ans += k * ((int)pow(m, i));
	}
	return ans;
}

map<string, int> vis;

map<int, int> mark;

int main() {
	char s[N];
	vector<string> V;
	while (cin >> s) {
		if (strcmp(s, "END") == 0) break;
		int n, m;
		char num[N];
		sscanf(s, "%d#%s", &m, num);
		int k = f(num, m);
		vis[s] = k;
		mark[k]++;
		V.push_back(s);

		//cout<<s<<" = "<<k<<endl;
	}
	bool fg = true;
	for (auto it : V) {
		int k = vis[it];
		if (mark[k] == 1) {
			cout << it << endl;
			fg = false;
		}
	}
	if (fg) {
		cout << "None" << endl;
	}

	return 0;
}

发表于 2022-09-10 13:22:19 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        Map<Integer,Integer> map=new LinkedHashMap<>();
        Map<Integer,String> map1=new HashMap<>();
        while(sc.hasNext()){
            String s=sc.next();
            int flag=0;
            if(s.equals("END")){
                for(int key:map.keySet()){
                    if(map.get(key)==1){
                        flag=1;
                        System.out.println(map1.get(key));
                    }
                }
                if(flag==0)
                    System.out.println("None");
                break;
            }
            String[] strs=s.split("#");
            int n=Integer.parseInt(strs[0]);
            int num=Integer.parseInt(strs[1],n);
            if(map.containsKey(num)){
                map.put(num,2);
            }else{
                 map.put(num,1);
                map1.put(num,s);
            }
        }
        sc.close();
    }
}

发表于 2021-03-16 21:36:57 回复(0)
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Scanner;

public class Main {


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = "";
        HashMap<String, Integer> map = new HashMap<>(); //保存A-F的值
        map.put("A",10);
        map.put("B",11);
        map.put("C",12);
        map.put("D",13);
        map.put("E",14);
        map.put("F",15);
        int sum = 0;
        HashMap<Integer, String> map2 = new HashMap<>();
        LinkedHashMap<Integer,Integer> map1 = new LinkedHashMap<>();
        while (true){
            str = sc.next();
            if (str.equalsIgnoreCase("END")) break;
            String[] split = str.split("#");
            int n = Integer.parseInt(split[0]);
            String s = split[1];
            StringBuilder builder = new StringBuilder(s);
            String s1 = builder.reverse().toString(); //反转字符串,方便求值
            for (int i = 0; i < s1.length(); i++) {
                String substring = s1.substring(i, i + 1);

                if(map.get(substring) != null){
                    sum += map.get(substring) * Math.pow(n, i);
                }
                else {
                    sum += Integer.parseInt(substring) * Math.pow(n, i);
                }

            }
            map1.put(sum,map1.get(sum)==null?1:map1.get(sum)+1);
            map2.put(sum,str);
            sum = 0;
        }
        int flag = 0;

        for (Integer key: map1.keySet()){
            if (map1.get(key) == 1){
                flag = 1;
                System.out.println(map2.get(key));
            }
        }

        if (flag == 0){
            System.out.println("None");
        }
    }
}

发表于 2020-09-07 23:19:46 回复(0)
from collections import Counter
InputOrigin,INS,A = [],[],[]

while 1:
    a = input()
    if a == 'END':
        break
    InputOrigin.append(a)
    strjn,numstr =a.split('#')
    INS.append( int( numstr.lower(), int(strjn)) )

finddiff = Counter(INS)

for i in range(len(INS)):
    c = finddiff[INS[i]]
    A.append(c)
    if c == 1:
        print(InputOrigin[i])
        continue
if min(A) > 1:
    print('None')
发表于 2020-07-31 17:58:09 回复(0)
刚开始还以为只有一个异数,直接按一个数做的,懒得改了,错误代码,改改就能用,给大家一个参考吧,话说牛客网的代码提交系统***,类都要我自己手动写,也不会自动导包,还得用Scanner来接受输入,应该做成leetcode那种只写方法体的
package nowcoder;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
    	Main test = new Main();
        Scanner in = new Scanner(System.in);
        List<String> list = new ArrayList<>();
        int i = 0;
        while (true) {
            list.add(in.nextLine());
            if ("END".equals(list.get(i))) break;
            i++;
        }
        System.out.println(test.findDistincatNumber(list));
        
    }
    
    public String findDistincatNumber(List<String> list) {
        int sys,num,reg1 = 0,reg2 = 0,dec = 0;
        String r1 = "null",r2 = null;
        for (String s : list) {
        	if ("END".equals(s)) break;
            sys = Integer.valueOf(s.split("#")[0]);
            num = Integer.valueOf(s.split("#")[1]);
            dec = 0;
            int index = 1;
            while (num != 0) {
                dec = (num % 10) * index + dec;
                index *= sys;
                num /= 10;
            }
            if (reg1 != 0 && reg2 != 0) return dec == reg1 ? r2 : r1;
            if (reg1 == 0 || reg1 == dec) {
                reg1 = dec;
                r1 = s;
                continue;
            }
            if (reg2 == 0) {
                reg2 = dec;
                r2 = s;
                continue;
            }
        }
        return "None";
    }
}


发表于 2020-06-14 19:47:02 回复(0)
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <limits.h>
#include <unordered_map>

using namespace std;

void findDifferentValue() {
    int i;
    string s;
    vector<string> vec;
    vector<pair<string, int>> res;
    unordered_map<int, int> mp;
    while (getline(cin, s)) {
        if (s != "END") {
            int pos = s.find("#");
            string front = s.substr(0, pos);
            string back = s.substr(pos + 1);
            int buf = stoi(front);
            int x = stoi(back, nullptr, buf);
            //int x = trans(buf, back);
            res.push_back({ s, x });
            mp[x]++;
        }
        else {
            break;
        }
    }
    bool isNone = true;
    for (int i = 0; i < res.size(); i++) {
        int x = res[i].second;
        if (mp[x] == 1) {
            cout << res[i].first << endl;
            isNone = false;
        }
    }
    if (isNone) {
        cout << "None" << endl;
    }
}

int main(){
    findDifferentValue();
    return 0;
}
编辑于 2020-05-06 20:46:59 回复(0)
c++实现,思路很清晰,感觉实现起来有点繁琐,稍不注意,考虑情况就可能缺啦。
注意事项都在注释中了
#include<iostream>
#include<cstdlib>
#include<map>
#include<vector>
#include<string>
using namespace std;
int shift(string a, string b)    //int 最大值是4打头的十位数,返回为int类型可满足题意
{
    int c = atoi(a.c_str());   //不把d转成int类型的原因是,c进制的value数位可能超过十;atoi的参数为字符数组类型,所以用c_str()转一下
    int d = b.length();
    int ret = 0, mul = 1;
    int i = d-1;
    while(i>=0)
    {
        int temp = b[i]-48;  //这里是做好value数位出现A-F和0-9的分支匹配
        if(b[i]<'0' || b[i]>'9')
        {
            temp = 10+b[i]-'A';
        }
        ret+=(temp)*mul;
        i--;
        mul*=c;
    }
    return ret;
}
int main()
{
    map<int, int> mp;
    vector<string> str;
    vector<int> vec;
    string index, value, temp;
    while(cin>>temp)
    {
        if(temp=="END")
            break;
        int p = temp.find('#');
        index = temp.substr(0, p);
        value = temp.substr(p+1);
        str.push_back(temp);
        vec.push_back(shift(index,value));
    }
    int k = vec.size();
    for(int i = 0; i < k; ++i)
        mp[vec[i]]++;
    int tag = 0;
    for(int i = 0; i < k; ++i)
    {
        if(mp[vec[i]]==1)
        {
            cout<<str[i]<<endl;
            tag = 1;
        }
    }
    if(tag==0)      //这里做好无异数的返回提示
        cout<<"None";
    return 0;
}


发表于 2019-10-05 14:21:29 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

	public static void main(String[] args) throws IOException {		
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		String line="";
		StringBuilder sb=new StringBuilder();
		while((line=br.readLine())!=null&&(!("END".equals(line)))){	
			sb.append(",");
			sb.append(line);
		}
		String input=sb.toString();
		Map<Double,Integer> map=new LinkedHashMap<>();
		if(!(input.isEmpty())&&input.startsWith(",")){
			String[] inputArr=input.substring(1).split(",");
	
			Set<Integer> set=new HashSet<>();
			for(int k=0;k<inputArr.length;k++){			
				String[] sArr=inputArr[k].split("#");
				double num=Double.parseDouble(sArr[0]);	
				byte[] b=sArr[1].getBytes();
				double[] newB=new double[b.length];
				for(int i=0;i<b.length;i++){
					char bChar=(char)b[i];
					if(bChar>='A'&&bChar<='F'){
						newB[i]=(char)b[i]-'0'-7;
					}else{
						newB[i]=(char)b[i]-'0';
					}
					
				}
				double result=0.0d;
				if(10!=num){
					int index=newB.length-1;
					for(int j=0;j<newB.length;j++){
						result=result+newB[j]*Math.pow(num,index);
						index--;
					}	
				}else{
					result=Double.parseDouble(sArr[1]);
				}		
				if(map.get(result)!=null){
					set.add(map.get(result));	
					set.add(k);					
				}else{
					map.put(result,k);
				}				
			}			
			for(int i=0;i<inputArr.length;i++){
				if(!set.contains(i)){
					System.out.println(inputArr[i]);
				}
               
			}
             if(set.size()==inputArr.length){
                    System.out.println("None");
             }
		}
	}

}

发表于 2019-09-25 23:58:46 回复(0)
Java 有 整数进制转换的API
发表于 2019-09-06 15:35:18 回复(0)
python2的特点:运行时间较快,内存占用较大
python3的特点:运行时间慢,内存占用小。建议考试用python2,AC率可能会提升。
这里给出一个清晰的解答,但是是笨方法,没有特殊库的调用。
本题两个注意事项:
1,进制转换的处理
2,顺序输出符合条件的字符串。
import sys
def num(s):
    s = s.split('#')
    base,n = int(s[0]),s[1][::-1]
    number = 0
    for i in range(len(n)):
        if n[i].isdigit():
            number += (base**(i))*int(n[i])
        else:
            temp = ord(n[i])-ord('A')+10
            number += (base**(i))*temp
    return number
def answer(res):
    dic = {}
    ans = []
    for i in range(len(res)):
        tem = num(res[i])
        ans.append(tem)
        if tem in dic:
            dic[tem].append(i)
        else:
            dic[tem] = [i]
    found = False
    for i in range(len(ans)):
        if len(dic[ans[i]])==1:
            found = True
            print(res[i])
    if not found:
        print('None')
if __name__=='__main__':
    res = []
    for line in sys.stdin.readlines():
        s = line.strip()
        if s=='END':
            break
        res.append(s)
    answer(res)


发表于 2019-08-18 21:59:29 回复(0)
#include<bits/stdc++.h>
using namespace std;
// 定义结构体变量
typedef struct Ti{
    // 原始字符串
    string s;
    // 字符串序号
    int id;
    // 其转化为10进制的值
    int value;
}T;
 // 统一为10进制
int compute(int m,string s)
{
    int res = 0;
    int l = s.size();
    for(int i=0;i<l;i++)
    {
        if(s[i]>='0'&&s[i]<='9')
        {
            res += int(pow(m,l-i-1))*(s[i]-'0');
        }
        else{
            res+= int(pow(m,l-i-1))*(s[i]-'A'+10);
        }
    }
    return res;
}
bool cmp1(T t1,T t2)
{
    return t1.value<t2.value;
}
bool cmp2(T t1,T t2)
{
    return t1.id<t2.id;
}
int main()
{
    vector<T>v;
    string str;
   // priority_queue<T,vector<T>,cmp> Q;
    vector<T>ans;
    int i = 0;
    while(cin>>str&&str!="END")
    {
        T t;
        t.s = str;
        t.id = i;
        
        int pos = str.find('#');
        // 取得是几进制
        string jinzhi  = str.substr(0,pos);
        int base = stoi(jinzhi);
        // 该进制下的数值表示
        string temp = str.substr(pos+1);
        // 转换
        t.value = compute(base,temp);
        v.push_back(t);
        i++;
    }
    if(v.size()==1) {
        cout<<v[0].s<<endl;
        return 0;
    }
    sort(v.begin(),v.end(),cmp1);
    if(v[0].value!=v[1].value)
        ans.push_back(v[0]);
    if(v[v.size()-1].value!=v[v.size()-2].value)
        ans.push_back(v[v.size()-1]);
    for(int i=1;i<v.size()-1;i++)
    {
        if(v[i].value!=v[i-1].value&&v[i].value!=v[i+1].value)
            ans.push_back(v[i]);
    }
    if(ans.size()==0) { cout<<"None"<<endl; return 0;}
    sort(ans.begin(),ans.end(),cmp2);
    for(int i=0;i<ans.size();i++)
        cout<<ans[i].s<<endl;
    return 0;
}

发表于 2019-08-14 21:17:20 回复(0)