Problem: 2050C - Uninteresting Number
Language: java

Solution 1 (runtime: 311 ms):
import java.io.*;
import java.util.*;

public class UninterestingNumber {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tokenizer = new StringTokenizer(in.readLine());

        int t = Integer.parseInt(tokenizer.nextToken());
        ArrayList<String> ans = new ArrayList<>();

        for (int i = 0; i < t; i++) {
            tokenizer = new StringTokenizer(in.readLine());
            String n = tokenizer.nextToken();
            int num = simplify(n);

            if (num == 0) {
                ans.add("YES");
                continue;
            }

            int num2 = numTwos(n);
            int num3 = numThrees(n);

            boolean canAdd = false;

            if (num == 1) {
                if (num3 >= 1 && num2 >= 1) {
                    canAdd = true;
                } else if (num2 >= 4) {
                    canAdd = true;
                }
            } else if (num == 2) {
                if (num3 >= 2 && num2 >= 2) {
                    canAdd = true;
                } else if (num3 == 1 && num2 >= 5) {
                    canAdd = true;
                } else if (num2 >= 8) {
                    canAdd = true;
                }
            } else if (num == 3) {
                if (num3 >= 1 || num2 >= 3) {
                    canAdd = true;
                }
            } else if (num == 4) {
                if (num3 >= 2 && num2 >= 1) {
                    canAdd = true;
                } else if (num3 == 1 && num2 >= 4) {
                    canAdd = true;
                } else if (num2 >= 7) {
                    canAdd = true;
                }
            } else if (num == 5) {
                if (num2 >= 2) {
                    canAdd = true;
                }
            } else if (num == 6) {
                if (num3 >= 2) {
                    canAdd = true;
                } else if (num3 == 1 && num2 >= 3) {
                    canAdd = true;
                } else if (num2 >= 6) {
                    canAdd = true;
                }
            } else if (num == 7) {
                if (num2 >= 1) {
                    canAdd = true;
                }
            } else if (num == 8) {
                if (num3 >= 1 && num2 >= 2) {
                    canAdd = true;
                } else if (num2 >= 5) {
                    canAdd = true;
                }
            }

            if (canAdd) {
                ans.add("YES");
                continue;
            }
            ans.add("NO");
        }

        for (String s : ans) {
            System.out.println(s);
        }
    }

    public static int numTwos(String x) {
        int ret = 0;
        for (char a : x.toCharArray()) {
            if ((a - '0') == 2) ret++;
        }
        return ret;
    }

    public static int numThrees(String x) {
        int ret = 0;
        for (char a : x.toCharArray()) {
            if ((a - '0') == 3) ret++;
        }
        return ret;
    }

    public static int simplify(String x) {
        int ret = 0;
        for (char a : x.toCharArray()) {
            ret += (a - '0');
        }
        return ret % 9;
    }
}

Solution 2 (runtime: 296 ms):


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.*;

 

public class Main {

    static class FastReader {

        BufferedReader br;

        StringTokenizer st;

 

        public FastReader() {

            br = new BufferedReader(

                new InputStreamReader(System.in));

        }

 

        String next() {

            while (st == null || !st.hasMoreElements()) {

                try {

                    st = new StringTokenizer(br.readLine());

                }

                catch (IOException e) {

                    e.printStackTrace();

                }

            }

            return st.nextToken();

        }

 

        int nextInt() { return Integer.parseInt(next()); }

 

        long nextLong() { return Long.parseLong(next()); }

 

        double nextDouble() {

            return Double.parseDouble(next());

        }

 

        String nextLine() {

            String str = "";

            try {

                if (st.hasMoreTokens()) {

                    str = st.nextToken("\n");

                }

                else {

                    str = br.readLine();

                }

            }

            catch (IOException e) {

                e.printStackTrace();

            }

            return str;

        }

    }

    public static int check(ArrayList<Integer> arr,int i,int sum,int k,int dp[][]){

            

            if(i==arr.size()){

                return (sum+k)%9==0?1:0;

            }

            if(dp[i][sum]==-1){

            int take= check(arr,i+1,(sum+arr.get(i))%9,k,dp);

            int ntake=check(arr,i+1,sum,k,dp);

             dp[i][sum]= (take+ntake)>0?1:0;

            }

            return dp[i][sum];

    }

    public static boolean helper(ArrayList<Integer> arr,int k){

        int n=arr.size();

        int dp[][]=new int[n][10];

       

            for(int a[]:dp){

                Arrays.fill(a,-1);

            }

        return check(arr,0,0,k,dp)>0;

    }

    public static void solve(FastReader sc){

        String s=sc.next(); 

        int sum=0;

        ArrayList<Integer> arr=new ArrayList<>();

        for(char c:s.toCharArray()){

            int num=c-'0';

            sum=(sum+num)%9;

            if(num==2){

                arr.add(2);

            }

            else if(num==3){

                arr.add(6);

            }

        }

        if(sum!=0){

           if(helper(arr,sum)){

            System.out.println("YES");

           }

           else{

            System.out.println("NO");

           }

        }

        else{

            System.out.println("YES");

        }





    }

    



    

    

    public static void main(String args[]) {

        FastReader sc = new FastReader();

        int t=sc.nextInt();

        while(t-- >0){

            solve(sc);

        }

    }

}