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 如 ...
随机推荐
- 判断101-200之间有多少个素数,并输出所有素数,方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。
<?php$sum=0;for($i=101;$i<=200;$i++){ for($j=2;$j<=sqrt($i);$j++) { if($i%$j==0 ...
- Python调用C的DLL(动态链接库)
开发环境:mingw64位,python3.6 64位 参考博客: mingw编译dll: https://blog.csdn.net/liyuanbhu/article/details/426123 ...
- 第04组 Alpha冲刺(5/6)
队名:new game 组长博客:戳 作业博客:戳 组员情况 鲍子涵(队长) 燃尽图 过去两天完成了哪些任务 才两天,也就是实现一些功能而已 复习了一下SuffixAutomata 接下来的计划 实现 ...
- 物联网架构成长之路(43)-k8s从入门到放弃
0. 前言 这段时间要入门一下CI/CD了,以前简单的了解过Jenkins,现在要把以下的这个图的架构搭建起来.国外可能一两个命令就安装完成的事情,我折腾了2天多,真的差点放弃了. 1. 安装Virt ...
- 微信小程序跳转web-vie时提示appId无法读取:Cannot read property 'appId' of undefined
微信小程序报web-view错无法读取appId:Cannot read property 'appId' of undefined 问题描述: 我以前一直如下写代码没报错也都是可以使用的,并且小程序 ...
- LeetCode 142:环形链表 II Linked List Cycle II
给定一个链表,返回链表开始入环的第一个节点. 如果链表无环,则返回 null. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 - ...
- python3爬虫筛选所需要数据
第一次使用博客园,也是第一篇文章,让我们一起开启学习之旅吧!! 昨天在为某授权系统做安全性测试的时候,可以未授权访问系统的用户登陆统计记录.由此想整理出部分用户名,作为暴力破解的用户名,检查是否存在用 ...
- HTML+css基础 css选择器 选择器的权重
css选择器 选择器的权重 在css中,哪个选择器的权重高,就走谁的样式 标签选择器的权重是1 class选择器的权重是10 Id选择器的权重是100 行间样式的权重是1000 带有关键字 !imp ...
- Eclipse 常用快捷键-java
(转自https://www.runoob.com/w3cnote/eclipse-shortcut-keys.html) Eclipse有强大的编辑功能, 工欲善其事,必先利其器, 掌握Eclips ...
- mysql error 1364 Field doesn't have a default values
https://stackoverflow.com/questions/15438840/mysql-error-1364-field-doesnt-have-a-default-values. us ...