zoukankan      html  css  js  c++  java
  • Verbal Arithmetic Puzzle

    2020-01-02 12:09:09

    问题描述:

    问题求解

    这个问题不就是小学奥数题么?都知道要暴力枚举,但是如何巧妙的枚举才是问题的关键。在打比赛的时候,我用了全排列算法,TLE了。

    借鉴了别人的解法,确实实现的要优雅很多,因此在此做一个记录。

        public int[] pow_num = new int[]{1, 10, 100, 1000, 10000, 100000, 1000000};
        public boolean isSolvable(String[] words, String result) {
            Set<Character> seen = new HashSet<>();
            boolean[] isFirst = new boolean[128];
            int[] char_count = new int[128];
            for (String word : words) {
                for (int i = 0; i < word.length(); i++) {
                    char c = word.charAt(i);
                    if (!isFirst[c] && i == 0 && word.length() > 1) isFirst[c] = true;
                    char_count[c] += pow_num[word.length() - i - 1];
                    seen.add(c);
                }
            }
            for (int i = 0; i < result.length(); i++) {
                char c = result.charAt(i);
                if (!isFirst[c] && i == 0 && result.length() > 1) isFirst[c] = true;
                char_count[c] -= pow_num[lresult.length() - i - 1];
                seen.add(c);
            }
            char[] chs = new char[seen.size()];
            int idx = 0;
            for (char c : seen) chs[idx++] = c;
            return helper(char_count, isFirst, chs, new boolean[10], 0, 0);
        }
        
        private boolean helper(int[] char_count, boolean[] isFirst, char[] chs, boolean[] used, int step, int diff) {
            if (step == chs.length) return diff == 0;
            for (int i = 0; i < 10; i++) {
                char c = chs[step];
                if (used[i] || (i == 0 && isFirst[c])) continue;
                used[i] = true;
                if (helper(char_count, isFirst, chs, used, step + 1, diff + char_count[c] * i)) return true;
                used[i] = false;
            }
            return false;
        }
    

      

  • 相关阅读:
    D3学习笔记一
    Python生成pyc文件
    Linux上用户之间对话
    uwsgi错误invalid request block size
    Nginx的Permission denied错误
    CentOS7关闭防火墙
    CentOS7.0安装Nginx
    应用IBatisNet+Castle进行项目的开发
    再论IBatisNet + Castle进行项目的开发
    DotNet软件开发框架
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/12132264.html
Copyright © 2011-2022 走看看