CF1256(div3 java题解)
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题解)的更多相关文章
- 【剑指offer】(第 2 版)Java 题解
[剑指offer](第 2 版)Java 题解 第一章 面试的流程 略... 第二章 面试需要的基础知识 面试题 1. 赋值运算符函数 面试题 2. 实现 Singleton 模式 Solution ...
- 试题 历届试题 核桃的数量 java题解
资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).他的要求是: ...
- TopCoder SRMS 1 字符串处理问题 Java题解
Problem Statement Let's say you have a binary string such as the following: 011100011 One way to e ...
- LeetCode108_Convert SortedArray to BinarySearchTree(将有序数组转成二叉排序树) Java题解
题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST ...
- 7.15实习培训日志 java题解
周末总结 本周主要学习了markdown,git,docker等工具的使用.在本周的学习中,初步了解了markdown,git,docker的使用.本周的静态博客部署中,对于怎么显示一个博客内容,有两 ...
- LeetCode234_PalindromeLinkedList (推断是否为回文链表) Java题解
题目: Given a singly linked list, determine if it is a palindrome. Follow up: Could you do it in O(n) ...
- L1-027 出租 (20 分) java题解
下面是新浪微博上曾经很火的一张图: 一时间网上一片求救声,急问这个怎么破.其实这段代码很简单,index数组就是arr数组的下标,index[0]=2 对应 arr[2]=1,index[1]=0 对 ...
- L1-023 输出GPLT (20 分) java题解 GPLT天梯赛防坑技巧
上题目先 给定一个长度不超过10000的.仅由英文字母构成的字符串.请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符.当然,四种字符(不区分大小写)的个数不一定是一样多的 ...
- 试题 历届试题 翻硬币 java题解
问题描述 小明正在玩一个"翻硬币"的游戏. 桌上放着排成一排的若干硬币.我们用 * 表示正面,用 o 表示反面(是小写字母,不是零). 比如,可能情形是:**oo***oooo 如 ...
随机推荐
- zz自动驾驶多传感器感知的探索
案例教学,把“问题”讲清楚了,赞 Pony.ai 在多传感器感知上积累了很多的经验,尤其是今年年初在卡车上开始了新的尝试.我们有不同的传感器配置,以及不同的场景,对多传感器融合的一些新的挑战,有了更深 ...
- Tensorflow的不足之处
Tensorflow还是有不足的地方.第一体现在Tensorflow的数据机制,由于tensor只是占位符,在没有用tf.Session().run接口填充值之前是没有实际值的.
- Vue 使用comouted计算属性
computed计算属性 使用方法见代码: <!doctype html> <html lang="en"> <head> <meta c ...
- ORB-SLAM2初步(源码逻辑分析)
今天主要是梳理一下ORB-SLAM2源码的逻辑关系,GitHub和泡泡机器人上有很好的注释版本(吴博),大神请(轻)板砖. 一.文件 如图所示,Examples里面存放的分别是基于单目.双目.RGBD ...
- Unity S老师系列课程学习
AssetBundle(创建打包)入门学习(基于Unity2017) (已看) 分组策略 逻辑实体分组 按照类型分组 按照使用分组 分组策略----总结 把经常更新的资源放在一个单独的包里面,跟不经常 ...
- Note | Ubuntu18.04安装与配置
目标: 在服务器上配置最新的Ubuntu稳定版本18.04 LTS.18.04比16.04好看很多,非常建议. 有3块硬盘:2块4TB机械硬盘,1块2TB固态硬盘.计划将固态硬盘作为主硬盘,其余两块机 ...
- NXP官方ddr_stress_tester工具使用
1.前言 NXP官方提供了一个DDR初始化工具,名称为ddr_stress_tester,该工具具有以下特点: 该工具能通过USB OTG接口与目标板进行连接,通过USB OTG接口完成DDR的初始化 ...
- pymysql的基本使用
序pymysql的语法sql注入问题数据的增删查改 TOC 序 当我们在写程序中需要使用到数据库的时候,尽量在代码层次实现一些限制,例如两张表,我们不再使用外键去关联表与表之间的关系,我们可以在程序层 ...
- CentOS7安装Oracle 11g数据库
转载:https://blog.csdn.net/lia17/article/details/82256565 rpm -ivh --force --nodeps *.rpm 强制装 rpm依赖包下载 ...
- LuoguP5290 [十二省联考2019]春节十二响 | 启发式合并
还有33天就要高考了,我在干啥-- 题目概述 一棵有根树,每个节点有权值. 要求把所有节点分成组,具有祖先-后代关系的两个节点不能被分到同一组. 每一组的代价是所包含的节点的最大权值,最小化所有组的代 ...