Codeforces Round #849 (Div. 4)
A. Codeforces Checking
题意
每个案例给一个字符,如果在 ”codeforces“ 中出现过,输出 YES,否则输出 NO
code
/**
* @author :Changersh
* @date : 2023/2/3 22:37
*/
import java.io.*;
import java.util.*;
import java.lang.*;
public class Main {
private static boolean[] a = new boolean[26];
public static void main(String[] args) {
String s = "codeforces";
for (int i = 0; i < s.length(); i++)
a[s.charAt(i) - 'a'] = true;
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
char t = sc.next().charAt(0);
if (a[t - 'a']) out.println("YES");
else out.println("NO");
}
out.close();
}
static class FastScanner{
// 看看有没有溢出,是否要用 long
// sc.xxx;
// out.print();
// out.flush();
// out.close();
BufferedReader br;
StringTokenizer st;
public FastScanner(InputStream in) {
br=new BufferedReader( new InputStreamReader(System.in));
eat("");
}
public void eat(String s) {
st=new StringTokenizer(s);
}
public String nextLine() {
try {
return br.readLine();
}catch(IOException e) {
return null;
}
}
public boolean hasNext() {
while(!st.hasMoreTokens()) {
String s=nextLine();
if(s==null)return false;
eat(s);
}
return true;
}
public String next() {
hasNext();
return st.nextToken();
}
public int nextInt() {
return Integer.parseInt(next());
}
public long nextLong() {
return Long.parseLong(next());
}
public double nextDouble() {
return Double.parseDouble(next());
}
}
static FastScanner sc=new FastScanner(System.in);
static PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
}
B. Following Directions
题意
每个案例给一串字符串,包含 U、D、L、R,是上下左右四个方向,从 (0, 0) 开始,问是否经过 (1, 1)
code
直接模拟即可
/**
* @author :Changersh
* @date : 2023/2/3 22:43
*/
import java.io.*;
import java.util.*;
import java.lang.*;
public class Main {
private static int N = 55, n, T;
public static void main(String[] args) {
T = sc.nextInt();
while (T-- > 0) {
out.println(solve() ? "YES" : "NO");
}
out.close();
}
private static boolean solve() {
n = sc.nextInt();
char[] c = sc.next().toCharArray();
int x = 0, y = 0;
for (int i = 0; i < n; i++) {
if (c[i] == 'U') x++;
else if (c[i] == 'D') x--;
else if (c[i] == 'L') y--;
else y++;
if (x == 1 && y == 1) return true;
}
return false;
}
static class FastScanner {
// 看看有没有溢出,是否要用 long
// sc.xxx;
// out.print();
// out.flush();
// out.close();
BufferedReader br;
StringTokenizer st;
public FastScanner(InputStream in) {
br = new BufferedReader(new InputStreamReader(System.in));
eat("");
}
public void eat(String s) {
st = new StringTokenizer(s);
}
public String nextLine() {
try {
return br.readLine();
} catch (IOException e) {
return null;
}
}
public boolean hasNext() {
while (!st.hasMoreTokens()) {
String s = nextLine();
if (s == null) return false;
eat(s);
}
return true;
}
public String next() {
hasNext();
return st.nextToken();
}
public int nextInt() {
return Integer.parseInt(next());
}
public long nextLong() {
return Long.parseLong(next());
}
public double nextDouble() {
return Double.parseDouble(next());
}
}
static FastScanner sc = new FastScanner(System.in);
static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
}
C. Prepend and Append
题意
给你一串由 0 1 组成的字符串,如果第一个和最后一个是 0 1或者 1 0 ,可以消掉,这种操作可以进行任意次,问,任意次操作后,字符串剩下的最短长度是多少?
code
双指针判断第一个和最后一个字符,模拟即可
/**
* @author :Changersh
* @date : 2023/2/3 22:51
*/
import java.io.*;
import java.util.*;
import java.lang.*;
public class Main {
private static int T;
public static void main(String[] args) {
T = sc.nextInt();
while (T-- > 0)
solve();
out.close();
}
private static void solve() {
int n = sc.nextInt();
char[] c = sc.next().toCharArray();
int l = 0, r = n - 1;
while (l < r) {
if ((c[l] == '0' && c[r] == '1') || (c[l] == '1' && c[r] == '0')) {
l++;
r--;
}
else break;
}
out.println(r - l + 1);
}
static class FastScanner{
// 看看有没有溢出,是否要用 long
// sc.xxx;
// out.print();
// out.flush();
// out.close();
BufferedReader br;
StringTokenizer st;
public FastScanner(InputStream in) {
br=new BufferedReader( new InputStreamReader(System.in));
eat("");
}
public void eat(String s) {
st=new StringTokenizer(s);
}
public String nextLine() {
try {
return br.readLine();
}catch(IOException e) {
return null;
}
}
public boolean hasNext() {
while(!st.hasMoreTokens()) {
String s=nextLine();
if(s==null)return false;
eat(s);
}
return true;
}
public String next() {
hasNext();
return st.nextToken();
}
public int nextInt() {
return Integer.parseInt(next());
}
public long nextLong() {
return Long.parseLong(next());
}
public double nextDouble() {
return Double.parseDouble(next());
}
}
static FastScanner sc=new FastScanner(System.in);
static PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
}
D. Distinct Split
题意
每个案例给定一个由小写字母组成的字符串,求将字符串从中间劈开,分成两个字串中,出现的不同的字符数的和的最大值?
code
暴力写会tle,所以先预处理一下前缀和后缀,前缀是到 第 i 个字符截止,前面 i 个字符共出现多少个不同的字符
后缀:从
/**
* @author :Changersh
* @date : 2023/2/3 23:04
*/
import java.io.*;
import java.util.*;
import java.lang.*;
public class Main {
private static int T, n;
private static char[] c;
public static void main(String[] args) {
T = sc.nextInt();
while (T-- > 0)
solve();
out.close();
}
private static void solve() {
n = sc.nextInt();
c = sc.next().toCharArray();
int ans = 0;
int[] l = new int[n + 2];
int[] r = new int[n + 2];
get(l, r);
for (int i = 0; i < n; i++) {
ans = Math.max(ans, l[i + 1] + r[i + 2]);
}
out.println(ans);
}
private static void get(int[] l, int[] r) {
int ans = 0;
HashSet<Character> vis = new HashSet<>();
for (int i = 0; i < n; i++) {
if (!vis.contains(c[i])) {
vis.add(c[i]);
ans++;
}
l[i + 1] = ans;
}
vis.clear();
ans = 0;
for (int i = n - 1; i >= 0; i--) {
if (!vis.contains(c[i])) {
vis.add(c[i]);
ans++;
}
r[i + 1] = ans;
}
}
static class FastScanner {
// 看看有没有溢出,是否要用 long
// sc.xxx;
// out.print();
// out.flush();
// out.close();
BufferedReader br;
StringTokenizer st;
public FastScanner(InputStream in) {
br = new BufferedReader(new InputStreamReader(System.in));
eat("");
}
public void eat(String s) {
st = new StringTokenizer(s);
}
public String nextLine() {
try {
return br.readLine();
} catch (IOException e) {
return null;
}
}
public boolean hasNext() {
while (!st.hasMoreTokens()) {
String s = nextLine();
if (s == null) return false;
eat(s);
}
return true;
}
public String next() {
hasNext();
return st.nextToken();
}
public int nextInt() {
return Integer.parseInt(next());
}
public long nextLong() {
return Long.parseLong(next());
}
public double nextDouble() {
return Double.parseDouble(next());
}
}
static FastScanner sc = new FastScanner(System.in);
static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
}
E. Negatives and Positives
题意
给定一串数字,你可以进行任意次以下的操作:
选择两个不同的数字,变成相反数
求,进行任意次之后,数组数字和的最大值是多少?
code
数字有正数、负数、0
翻转的时候,最佳的方法是把所有的负数都变成正数,是最佳情况
- 负数个数是偶数,完美,全部都可以翻转成正数
- 负数个数是奇数:
1. 有 0,依然完美
2. 找绝对值最小的,取负即可
将第二种情况的两种小情况和一
遍历数组的时候,统计负数个数,并且把负数都翻转,求和
如果是偶数,返回答案
如果是奇数,说明不能完美翻转,数组排序,得到最小的数字,无论是正数还是负数。抑或是 0,减两次即可。
因为最小的如果是 负数翻转的,减两次相当于没有翻转
如果是正数,相当于把 落单的负数和绝对值小于它的正数翻转,和变大
如果是 0,也是完美的情况
/**
* @author :Changersh
* @date : 2023/2/4 9:20
*/
import java.io.*;
import java.util.*;
import java.lang.*;
public class Main {
private static int T, n, N = 200010;
private static int[] a;
public static void main(String[] args) {
T = sc.nextInt();
while (T-- > 0)
solve();
out.close();
}
private static void solve() {
long sum = 0;
int cnt = 0;
n = sc.nextInt();
a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
if (a[i] < 0) {
cnt++;
a[i] = -a[i];
}
sum += a[i];
}
if ((cnt & 1) == 1) {
Arrays.sort(a);
sum -= 2 * a[0];
}
out.println(sum);
}
static class FastScanner{
// 看看有没有溢出,是否要用 long
// sc.xxx;
// out.print();
// out.flush();
// out.close();
BufferedReader br;
StringTokenizer st;
public FastScanner(InputStream in) {
br=new BufferedReader( new InputStreamReader(System.in));
eat("");
}
public void eat(String s) {
st=new StringTokenizer(s);
}
public String nextLine() {
try {
return br.readLine();
}catch(IOException e) {
return null;
}
}
public boolean hasNext() {
while(!st.hasMoreTokens()) {
String s=nextLine();
if(s==null)return false;
eat(s);
}
return true;
}
public String next() {
hasNext();
return st.nextToken();
}
public int nextInt() {
return Integer.parseInt(next());
}
public long nextLong() {
return Long.parseLong(next());
}
public double nextDouble() {
return Double.parseDouble(next());
}
}
static FastScanner sc=new FastScanner(System.in);
static PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
}
G1. Teleporters (Easy Version)
题意
有 0~n,n + 1个点,我们可以从 1 ~ n 号点用 传送器瞬间移动到 0号点,花费 a[i] 块钱
从一个点移动到隔壁,花费 1 块钱
给你一串 传送的花费 和现在总共有的钱 ,问从 0 出发最多能用几次传送
由题意得,传送的使用条件是:
- 先花费 i 块钱,从 0 走到 i
- 花费 a[i] 传送
code
Codeforces Round #849 (Div. 4)的更多相关文章
- Codeforces Round #366 (Div. 2) ABC
Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
- Codeforces Round #262 (Div. 2) 1003
Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...
- Codeforces Round #262 (Div. 2) 1004
Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...
- Codeforces Round #371 (Div. 1)
A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...
- Codeforces Round #268 (Div. 2) ABCD
CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...
- 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts
题目传送门 /* 贪心 + 模拟:首先,如果蜡烛的燃烧时间小于最少需要点燃的蜡烛数一定是-1(蜡烛是1秒点一支), num[g[i]]记录每个鬼访问时已点燃的蜡烛数,若不够,tmp为还需要的蜡烛数, ...
随机推荐
- 本地文件上传Gitee
0.对于小白来说,我再细讲一下 一.下载git 下载细节参考博客 二.Git配置 点击桌面的图标,进入Git Bash Here 1.配置自己的用户名和邮箱 git config --global u ...
- html CheckBox
1.获取单个checkbox选中项(三种写法)$("input:checkbox:checked").val()或者$("input:[type='checkbox']: ...
- 【大数据-课程】高途-天翼云侯圣文-Day2:离线数仓搭建分解
一.内容介绍 昨日福利:大数据反杀熟 今日:数据看板 离线分析及DW数据仓库 明日:实时计算框架及全流程 一.数仓定义及演进史 1.概念 生活中解答 2.数据仓库的理解 对比商品仓库 3.数仓分层内容 ...
- 【每日一题】【递归+int型返回值最后不接收】110. 平衡二叉树-211231/220221
给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 . 答案: public class Solution ...
- 【sqoop】简介、原理、安装配置测试、导入导出案例、脚本打包、常见命令及参数介绍、常用命令举例
一.sqoop简介 用于在Hadoop(Hive)与传统的数据库(mysql.oracle...)之间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等 ...
- 浅谈字节码增强技术系列2-Asm与Cglib
作者:董子龙 前言 记得那是2022年秋天的第一场雨,比2021年来的稍晚一些,在那个秋雨朦胧的下午,正在工位上奋笔疾书的我突然听到了前面波哥对着手机听筒说出来的"温柔"的话语:说 ...
- 【转载】SQL SERVER2008 修改数据库名相关的脚本
-- 修改数据库名 -- 1.首先查找数据库是否占用,杀掉占用的id select spid from master.dbo.sysprocesses where dbid=db_id('ClothC ...
- 痞子衡嵌入式:Farewell, 我的写博故事2016-2019
-- 题图:苏州天平山枫叶 现在是 2022 年末,痞子衡又要起笔博文年终总结了,看着 2020 年之前的博文总结缺失,始终觉得缺憾,所以写下此篇 2016 - 2019 总结合辑.2016 年之前, ...
- APIO2022 游记
Day 0 有人刚登记完房间就把房卡落在房间里了我不说是谁(真不是我,不信去问jth) 下午把gen把模拟赛的题补了一下,T3是个不太可做的虚树上淀粉质dp,先咕着. Day 1 上午来的比较晚,没有 ...
- session取不到值
今天鼓捣项目时出现了一个问题 项目重启后,设置session值后,第一次请求经过过滤器时 session取不到值,导致被拦截 经过半天的研究,终于...我请教了别人 把代码给了朋友,在朋友一段时间的琢 ...