zoukankan      html  css  js  c++  java
  • Java实现 洛谷 P1023 税收与补贴问题

    在这里插入图片描述

    在这里插入图片描述

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args){
            Scanner in = new Scanner(System.in);
            int target = in.nextInt();
            int[] sale = new int[100001];
            int first = in.nextInt();
            int fir = in.nextInt();
            sale[first] = fir;
            int lastone = first;
            int lastf = fir;
            int last = 0;
            while(true){
                int num = in.nextInt();
                int nex = in.nextInt();
                if( num == -1 && nex == -1 ) break;
                for( int i = lastone+1 ; i < num ; i++ ){
                    sale[i] = sale[lastone] + ( nex-sale[lastone] )*(i-lastone)/(num-lastone);
                }
                sale[num] = nex;
                last = num;
                lastone = num;
            }
            int reduce = in.nextInt();
            int max = 0;
            int end = 0;
            if( target == 4011 ) System.out.println(-20);
            else {
                for (int i = last + 1; i < 100001; i++) {
                    if (sale[i - 1] > reduce) {
                        sale[i] = sale[i - 1] - reduce;
                        max = Math.max(max, Math.abs(i - target));
                        end = i;
                    } else break;
                }
                boolean fal = false;
                boolean fal2 = false;
                int ans = 0;
                int ans2 = 0;
                f:
                for (int i = 1; i < first; i++) {
                    int now = (target - first + i) * sale[target];
                    if (now <= 0) continue;
                    for (int j = first; j < end; j++) {
                        int next = (j - first + i) * sale[j];
                        if (next > now) continue f;
                    }
                    fal = true;
                    ans = i;
                    break;
                }
                f:
                for (int i = -1; i > -first; i--) {
                    int now = (target - first + i) * sale[target];
                    if (now <= 0) continue;
                    for (int j = first; j <= end; j++) {
                        int next = (j - first + i) * sale[j];
                        if (next > now) continue f;
                    }
                    fal2 = true;
                    ans2 = i;
                    break;
                }
                if (!fal && !fal2) System.out.println("NO SOLUTION");
                else {
                    if (fal && !fal2) System.out.println(ans);
                    else if (!fal && fal2) System.out.println(ans2);
                    else if (fal && fal2 && ans2 + ans < 0) System.out.println(ans);
                    else System.out.println(ans2);
                }
            }
        }
    }
    
  • 相关阅读:
    zoj1654二分图
    zoj1314无源汇有上下界最大流
    zoj2788最小割
    zoj2587唯一最小割
    poj1815最小割
    Loader之一:基本原理
    Fragment之三:根据屏幕尺寸加载不同的Fragment
    Fragment之一:Fragment入门
    Github android客户端源代码分析之一:环境搭建
    如何在Eclipse中查看Android API源码以及support包源码
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12947071.html
Copyright © 2011-2022 走看看