思维题训练

A.Lucky Numbers

暴力,关键点在于出现了9就退出,这样每次查询最多经过10次。一个思维点。

import java.io.*;
import java.util.*;
public class Main {
    static Scanner cin=new Scanner(System.in);
    public static void main(String[] args) throws IOException {
        int t=cin.nextInt();
        while(t-->0){
            int l=cin.nextInt(),r=cin.nextInt();
            int ans=0,mx=-1;
            for(int i=r;i>=l;i--){
                int tmp=fun(i);
                if(tmp>mx){
                    mx=tmp;ans=i;
                }
                if(mx==9) break;;
            }
            System.out.println(ans);
        }
        System.out.close();
    }
    public static int fun(int x){
        int mi=Integer.MAX_VALUE-5,mx=0;
        while(x>0){
            int g=x%10;
            mi=Math.min(mi,g);mx=Math.max(mx,g);
            x/=10;
        }
        return (mx-mi);
    }
}

B. Playing in a Casino

观察每个数字被加减的次数,列出公式
注意开long

import java.io.*;
import java.util.*;
public class Main {
    static Scanner cin=new Scanner(System.in);
    static int N=300010;
    public static void main(String[] args) throws IOException
    {
        int t = cin.nextInt();
        while (t-- > 0)
        {
            long n=cin.nextInt(),m=cin.nextInt();
            List<List<Long>> e=new ArrayList<>();
            for(int i=0;i<m;i++) e.add(new ArrayList<>());
            for(int i=0;i<n;i++)
            {
                for(int j=0;j<m;j++)
                {
                    long x=cin.nextInt();
                    e.get(j).add(x);
                }
            }
            long ans=0;
            for(List<Long> l:e)
            {
                Collections.sort(l);
                for(int j=0;j<n;j++)
                    ans+=j*l.get(j)-(n-j-1)*l.get(j);
            }
            System.out.println(ans);
        }
        System.out.close();
    }
}

A. Showstopper

相比较大数都放A中,小数都放B中。

import java.io.*;
import java.util.*;
public class Main {
    static Scanner cin=new Scanner(System.in);
    static int N=700010;
    static int a[]=new int[N],b[]=new int[N];
    public static void main(String[] args) throws IOException
    {
        int t = cin.nextInt();
        while (t-- > 0)
        {
            int n=cin.nextInt();
            for(int i=1;i<=n;i++) a[i]=cin.nextInt();
            for(int i=1;i<=n;i++)
            {
                b[i]=cin.nextInt();
                if(a[i]<b[i])
                {
                    int tmp=a[i];a[i]=b[i];b[i]=tmp;
                }
            }
            int mx1=0,mx2=0;
            for(int i=1;i<=n;i++)
            {
                mx1=Math.max(mx1,a[i]);
                mx2=Math.max(mx2,b[i]);
            }
            if(mx1==a[n]&&mx2==b[n])
                System.out.println("Yes");
            else
                System.out.println("No");
        }
        System.out.close();
    }
}

B. Three Sevens

先都放到列表中,然后从后往前便利,将用到的数字都放到集合中,则当天没用到的即为答案。

import java.io.*;
import java.util.*;
public class Main {
    static Scanner cin=new Scanner(System.in);
    static int N=700010;
    public static void main(String[] args) throws IOException
    {
        int t = cin.nextInt();
        while (t-- > 0)
        {
            int m=cin.nextInt();
            Set<Integer> set=new HashSet<>();
            List<List<Integer>> list=new ArrayList<>();
            for(int i=0;i<m;i++)
            {
                List<Integer> l1=new ArrayList<>();
                int n=cin.nextInt();
                for(int j=0;j<n;j++)
                    l1.add(cin.nextInt());
                list.add(l1);
            }
            int flag=0;
            int a[]=new int[m];
            for(int i=m-1;i>=0;i--)
            {
                List<Integer> l1=list.get(i);
                for(int j:l1) {
                    if(!set.contains(j))
                        a[i]=j;
                    set.add(j);
                }
                if(a[i]==0) {
                    System.out.println(-1);
                    flag=1;
                    break;
                }
            }
            if(flag==0){
                for(int i=0;i<m;i++)
                    System.out.print(a[i]+" ");
                System.out.println();
            }
        }
        System.out.close();
    }
}

你可能感兴趣的:(思维题,算法)