A:

题意:给定A个N元,B个一元,问是否可以凑成S元。

思路:A*i+j=S 即 A*I<=S<=A*I+B 即min(S/N,A)+B>=S;

/*
@author nimphy
@create 2019-11-05-10:34
about:CF1256A
*/

import java.util.*;

public class CF1256 {
    public static void main(String[] args) {
        Scanner In = new Scanner(System.in);
        int Q, A, B, N, S;
        Q = In.nextInt();
        while (Q-- > 0) {
            A = In.nextInt();
            B = In.nextInt();
            N = In.nextInt();
            S = In.nextInt();
            int I = Math.min(S / N, A) * N;
            //System.out.println(I);
            if (I + B >= S) System.out.println("YES");
            else System.out.println("NO");
        }
    }
}

B:

题意:给定一个排列,现在让你做一套操作,使得字典序最小。

思路:贪心,先尽量把1提到前面,然后是2....,如果满足{位置交换没用过,而且比左边的小就换}

/*
@author nimphy
@create 2019-11-05-11:34
about:CF1256B
*/

import java.util.*;

public class CF1256 {
    static int[] a = new int[1010];
    static boolean[] vis = new boolean[1010];

    public static void main(String[] args) {
        Scanner In = new Scanner(System.in);

        int Q, N;
        Q = In.nextInt();
        while (Q-- > 0) {
            N = In.nextInt();
            for (int i = 1; i <= N; i++) {
                a[i] = In.nextInt();
                vis[i] = false;
            }
            for (int i = 1; i <= N; i++) {
                int pos=0;
                for (int j = 1; j <= N; j++) {
                    if (a[j] == i) {
                        pos = j;
                        break;
                    }
                }
                while (pos > i && !vis[pos]&&a[pos]<a[pos-1]) {
                    int t = a[pos];
                    a[pos] = a[pos - 1];
                    a[pos - 1] = t;
                    vis[pos] = true;
                    pos--;
                }
            }
            for (int i = 1; i <= N; i++) {
                System.out.print(a[i]+" ");
            }
            System.out.println();
        }
    }
}

C:

思路:贪心+情况可能多-----忽略。

------------------------------白嫖了输入优化--------------------------------------

D:

题意: 给定N,K和一个01串,你可以交换相邻的字符,但是次数不超过K次,求最后的最小字典序串。

思路:结论是,把前面的0移动到越前面,字典序最小。 那么我们从前往后扫‘0’,如果前面有x个‘1’,那么它可以和前面第min(x,K)个位置交换。

/*
@author nimphy
@create 2019-11-05-11:34
about:CF1256C
*/

import java.io.*;
import java.util.*;

public class CF1256 {

    private static boolean doLocalTest = System.getSecurityManager() == null;
    private Scanner sc = new Scanner(System.in);
    private PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));

    public static void main(String[] args) {
        long executionTime = 0;
        if (doLocalTest) {
            executionTime = System.currentTimeMillis();
            try {
                System.setIn((new FileInputStream("in")));
//                System.setOut(new PrintStream(new File("out")));
            } catch (FileNotFoundException e) {
                doLocalTest = false;
            }
        }
        CF1256 cf1256 = new CF1256();
        cf1256.solve();
        if (doLocalTest) {
            cf1256.out.println("======== [ End of Output] ========");
            cf1256.out.println("> Time Spent: " + (System.currentTimeMillis() - executionTime) + " ms");
        }
        cf1256.out.flush();
    }

    static char[] a;
    static char[] ans = new char[10010];

    void solve() {
        int T, N;
        long K;
        T = sc.nextInt();
        while (T-- > 0) {
            N = sc.nextInt();
            K = sc.nextLong();
            a = sc.next().toCharArray();
//            System.out.println(Arrays.toString(a));
            int pre = 0;
            for (int i = 0; i < N && K > 0; i++) {
                if (a[i] == '1') {
                    pre++;
                    continue;
                }
                if (pre == 0) continue;
                int t = pre;
                if (K < t) t = (int) K;
                a[i - t] = '0';
                a[i] = '1';
                K -= t;
            }
            for (int i = 0; i < N; i++) out.print(a[i]);
            out.println();
        }
    }
}

class Scanner {
    private BufferedReader bufferedReader;
    private StringTokenizer stringTokenizer;

    Scanner(InputStream in) {
        bufferedReader = new BufferedReader(new InputStreamReader(in));
        stringTokenizer = new StringTokenizer("");
    }

    String nextLine() {
        try {
            return bufferedReader.readLine();
        } catch (IOException e) {
            throw new IOError(e);
        }
    }

    boolean hasNext() {
        while (!stringTokenizer.hasMoreTokens()) {
            String s = nextLine();
            if (s == null) {
                return false;
            }
            stringTokenizer = new StringTokenizer(s);
        }
        return true;
    }

    String next() {
        hasNext();
        return stringTokenizer.nextToken();
    }

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

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

E:

题意:给的大小为N的集合,然后分组,每组元素个数不小于3个,代价是每组的最大值减最小值之和,求分组是的代价最小。

分组越多越好,那么可以假设最多6个一组。    懒得写了,毕竟要输出具体分组。(还不会java的结构体排序)

F:

题意:给定两个字符数组A[] , B[],长度相同。 现在你可以选择可以长度len,然后进行任意轮操作,每轮操作是反转一段A和一段B,其长度都是len,问最后是否可以相同。

思路:发现len选2最优,因为你无论len选多大,都可以由len=2转移过来,达到同样的效果;   那么现在len=2了,又发现,如果某一组有相同的字符,那么另外一组可以任意排列,所以YES;    而如果A和B都是各异的字符,那么如果逆序对的奇偶性相同,则YES。

/*
@author nimphy
@create 2019-11-05-11:34
about:CF1256F
*/

import java.io.*;
import java.util.*;

public class Main {

    private static boolean doLocalTest = System.getSecurityManager() == null;
    private Scanner sc = new Scanner(System.in);
    private PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));

    public static void main(String[] args) {
        long executionTime = 0;
        if (doLocalTest) {
            executionTime = System.currentTimeMillis();
            try {
                System.setIn((new FileInputStream("in")));
//                System.setOut(new PrintStream(new File("out")));
            } catch (FileNotFoundException e) {
                doLocalTest = false;
            }
        }
        Main fcy = new Main();
        fcy.solve();
        if (doLocalTest) {
            fcy.out.println("======== [ End of Output] ========");
            fcy.out.println("> Time Spent: " + (System.currentTimeMillis() - executionTime) + " ms");
        }
        fcy.out.flush();
    }

    String a,b;
    int[] num1=new int[26];
    int[] num2=new int[26];
    void solve() {
        int T, N;
        long K;
        T = sc.nextInt();
        while (T-- > 0) {
            N = sc.nextInt();
            a=sc.next();
            b=sc.next();
            for(int i=0;i<26;i++) num1[i]=num2[i]=0;
            for(int i=0;i<N;i++) {
                num1[a.charAt(i)-'a']++;
                num2[b.charAt(i)-'a']++;
            }
            boolean Flag=true;
            for(int i=0;i<26;i++) if(num1[i]!=num2[i]) Flag=false;
            if(!Flag) {
                out.println("NO");
                continue;
            }
            for(int i=0;i<26;i++) if(num1[i]>1||num2[i]>1) Flag=false;
            if(!Flag) {
                out.println("YES");
                continue;
            }
            long inv1=0,inv2=0;
            for(int i=0;i<26;i++) num1[i]=num2[i]=0;
            for(int i=0;i<N;i++){
                for(int j=a.charAt(i)-'a'+1;j<26;j++) inv1+=num1[j];
                for(int j=b.charAt(i)-'a'+1;j<26;j++) inv2+=num2[j];
                num1[a.charAt(i)-'a']++;
                num2[b.charAt(i)-'a']++;
            }
            if(Math.abs(inv1-inv2)%2==0) out.println("YES");
            else out.println("NO");
        }
    }
}

class Scanner {
    private BufferedReader bufferedReader;
    private StringTokenizer stringTokenizer;

    Scanner(InputStream in) {
        bufferedReader = new BufferedReader(new InputStreamReader(in));
        stringTokenizer = new StringTokenizer("");
    }

    String nextLine() {
        try {
            return bufferedReader.readLine();
        } catch (IOException e) {
            throw new IOError(e);
        }
    }

    boolean hasNext() {
        while (!stringTokenizer.hasMoreTokens()) {
            String s = nextLine();
            if (s == null) {
                return false;
            }
            stringTokenizer = new StringTokenizer(s);
        }
        return true;
    }

    String next() {
        hasNext();
        return stringTokenizer.nextToken();
    }

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

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

CF1256(div3 java题解)的更多相关文章

  1. 【剑指offer】(第 2 版)Java 题解

    [剑指offer](第 2 版)Java 题解 第一章 面试的流程 略... 第二章 面试需要的基础知识 面试题 1. 赋值运算符函数 面试题 2. 实现 Singleton 模式 Solution ...

  2. 试题 历届试题 核桃的数量 java题解

    资源限制 时间限制:1.0s   内存限制:256.0MB 问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的要求是: ...

  3. TopCoder SRMS 1 字符串处理问题 Java题解

    Problem Statement   Let's say you have a binary string such as the following: 011100011 One way to e ...

  4. LeetCode108_Convert SortedArray to BinarySearchTree(将有序数组转成二叉排序树) Java题解

    题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST ...

  5. 7.15实习培训日志 java题解

    周末总结 本周主要学习了markdown,git,docker等工具的使用.在本周的学习中,初步了解了markdown,git,docker的使用.本周的静态博客部署中,对于怎么显示一个博客内容,有两 ...

  6. LeetCode234_PalindromeLinkedList (推断是否为回文链表) Java题解

    题目: Given a singly linked list, determine if it is a palindrome. Follow up: Could you do it in O(n) ...

  7. L1-027 出租 (20 分) java题解

    下面是新浪微博上曾经很火的一张图: 一时间网上一片求救声,急问这个怎么破.其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index[1]=0 对 ...

  8. L1-023 输出GPLT (20 分) java题解 GPLT天梯赛防坑技巧

    上题目先 给定一个长度不超过10000的.仅由英文字母构成的字符串.请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符.当然,四种字符(不区分大小写)的个数不一定是一样多的 ...

  9. 试题 历届试题 翻硬币 java题解

    问题描述 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:**oo***oooo 如 ...

随机推荐

  1. pytest--配置

    说到配置,大家可能想到的是不经常更改的内容,比如Django里的settings.py文件,或者我们做自动化的时候,把测试环境的域名和正式环境的域名放到一个配置文件里,所有的接口都从这个文件里读取.这 ...

  2. 洛谷P3702 [SDOI2017]序列计数

    题目大意: Alice想要得到一个长度为\(n\)的序列,序列中的数都是不超过\(m\)的正整数,而且这\(n\)个数的和是\(p\)的倍数. Alice还希望,这\(n\)个数中,至少有一个数是质数 ...

  3. CF1221G Graph And Number(容斥,搜索,FMT)

    至今觉得这场 edu 的 G 比 EF 都要简单-- 不知道为什么出题人要把 \(m=0\) 放进去,先特判掉. 要求至少一个 \(0\),至少一个 \(1\),至少一个 \(2\),容斥一波,变成总 ...

  4. vue使用--环境搭建与基本项目创建说明

    桃之夭夭,思绪纷飞. 一.环境搭建 1.安装node.js(包含包管理工具npm) 安装包可以到node官网进行下载,穿梭>>> 根据自己的操作系统下载相应版本的安装包,运行后按照操 ...

  5. 深度解密Go语言之context

    目录 什么是 context 为什么有 context context 底层实现原理 整体概览 接口 Context canceler 结构体 emptyCtx cancelCtx timerCtx ...

  6. JVM&NIO&HashMap简单问

    JVM&NIO&HashMap简单问 背景:前几天在网上看到关于JVM&NIO&HashMap的一些连环炮的面试题,整理下以备不时之需. 一.JVM Java的虚拟机的 ...

  7. 微软宣布.NET Native预览版 C#可编译为本地机器码【转】

    英文原文:Announcing .NET Native Preview 微软在 MSDN 博客上宣布了 .NET Native 的开发者预览版..NET Native 可以将 C# 代码编译成本地机器 ...

  8. 机器学习(八)--------支持向量机 (Support Vector Machines)

    与逻辑回归和神经网络相比,支持向量机或者简称 SVM,更为强大. 人们有时将支持向量机看作是大间距分类器. 这是我的支持向量机模型代价函数 这样将得到一个更好的决策边界 理解支持向量机模型的做法,即努 ...

  9. ASP.NET 里身份验证安全相关配置

    安全相关的 <authorization > <allow verbs = "" users = "" roles = "" ...

  10. 2019-07-23 类的继承和final关键字的应用

    我们称以存在的用来派生新类的类为基类,又称做父类,超类.由已存在的类派生出的新类称为派生类,又称为子类.从一个基类派生的继承称单继承,从多个基类派生的继承称为多继承.也就是说:一个类只能直接从一个类中 ...