Codeforces Round #498 (Div. 3)
被虐惨了,实验室里数十位大佬中的一位闲来无事切题(二,然后出了5t,当然我要是状态正常也能出5,主要是又热又有蚊子什么的...
题都挺水的。包括F题。
A:
略
B:
找k个最大的数存一下下标然后找段长度就行
public static void main(String[] args) {
int n = nextInt();
int k = nextInt();
PriorityQueue<Integer> q = new PriorityQueue<>();
int a[] = new int[n];
for(int i=0;i<n;i++){
a[i] = nextInt();
q.add(a[i]);
}
while (q.size()>k){
q.poll();
}
boolean b[] = new boolean[n];
int sum = 0;
int last = 0;
for(int i=n-1;i>=0;i--){
if (q.contains(a[i])){
last=i>last?i:last;
sum+=a[i];
b[i] = true;
q.remove(a[i]);
}
}
out.println(sum);
int temp = -1;
for(int i=0;i<last;i++){
if (b[i]){
out.print(i-temp+" ");
temp = i;
}
}
out.print(n-1-temp);
out.flush();
}
main 方法
C:
从两个端点向中间遍历
public static void main(String[] args) {
int n = nextInt();
long d[] = new long[n];
for(int i=0;i<n;i++){
d[i] = nextInt();
}
long sum1 = 0;
long sum3 = 0;
int i=0,j=n-1;
long ans = 0;
while (j>i){
if (sum3==sum1){
ans = sum1>ans?sum1:ans;
sum3+=d[j];
sum1+=d[i];
i++;j--;
if (sum3==sum1)
ans = sum1>ans?sum1:ans;
}else if (sum3<sum1){
sum3+=d[j];
j--;
}else if (sum3>sum1){
sum1+=d[i];
i++;
}
}
if (j==i){
if (sum3<sum1){
sum3+=d[j];
}else if (sum3>sum1){
sum1+=d[i];
}
if (sum3==sum1)
ans = sum1>ans?sum1:ans;
}
out.print(ans);
out.flush();
}
D:
大水题,四个位置上的元素判断一下情况就行,我直接分的类很莽就不放代码了。
E:
求出dfs序,顺手存个子树大小,结点下标就完了。
package R498; import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import java.util.Vector; public class Main4 {
static BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer tok;
static boolean hasNext()
{
while(tok==null||!tok.hasMoreTokens())
try{
tok=new StringTokenizer(in.readLine());
}
catch(Exception e){
return false;
}
return true;
}
static String next()
{
hasNext();
return tok.nextToken();
}
static long nextLong()
{
return Long.parseLong(next());
}
static int nextInt()
{
return Integer.parseInt(next());
}
static PrintWriter out=new PrintWriter(new OutputStreamWriter(System.out)); static int N = 200005;
static Vector<Integer> g[] = new Vector[N];
static int size[] = new int[N];//存子树大小
static boolean b[] = new boolean[N];//染色
static int ans[] = new int[N];//dfs序
static int index[] = new int[N];//下标
static int pos = 0; public static void main(String[] args) {
int n = nextInt();
int q = nextInt();
for(int i=1;i<=n;i++){
g[i] = new Vector<>();
}
int u;
for(int i=2;i<=n;i++){
u = nextInt();
g[u].add(i);
}
dfs(1);
int t,k;
while (q--!=0){
t = nextInt();
k = nextInt();
if (k>size[t]){
out.println(-1);
}else {
out.println(ans[index[t]+k-1]);
}
}
out.flush();
}
public static void dfs(int v){
b[v]=true;
size[v]++;
ans[pos++] = v;
index[v] = pos-1;
for(int i=0;i<g[v].size();i++){
int u = g[v].get(i);
if(!b[u]){
dfs(u);
size[v]+=size[u];
}
}
}
}
F:很显然上来就想到了从两个点往中间搜搜一半,但是我写炸了,就找了份代码看了看,对于 “一半”,这个地方 要用 (n/2+m/2)而不是 (n+m)/2 ,ex:1 1 10 10.
还是很好懂的 ,哦还需要知道这么一个事, a^b=c 的话 那么 b^c=a; 原谅我是二进制小白,有几个相关公式可以直接百度
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.*; public class Main6 {
static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer tok;
static PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out)); static boolean hasNext() {
while (tok == null || !tok.hasMoreTokens())
try {
tok = new StringTokenizer(in.readLine());
} catch (Exception e) {
return false;
}
return true;
} static String next() {
hasNext();
return tok.nextToken();
} static long nextLong() {
return Long.parseLong(next());
} static int nextInt() {
return Integer.parseInt(next());
} static int n;
static int m;
static long k;
static long ans = 0;
static long a[][];
static Map<Long,Long> map[][];
public static void main(String[] args) {
n = nextInt();
m = nextInt();
k = nextLong();
a = new long[n][m];
map = new Map[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
a[i][j] = nextLong();
map[i][j] = new HashMap<>();
}
}
dfsbe(0,0,0);
dfsend(n-1,m-1,0); out.print(ans);
out.flush();
}
public static void dfsbe(int i,int j,long temp){
if (i>=n||j>=m)
return;
temp ^= a[i][j];
if (i+j==n/2+m/2){
if (map[i][j].get(temp)==null){
map[i][j].put(temp,1l);
}else {
map[i][j].put(temp,map[i][j].get(temp)+1);
}
return;
}
dfsbe(i+1,j,temp);
dfsbe(i,j+1,temp);
}
public static void dfsend(int i,int j,long temp){
if (i<0||j<0)
return;
if (i+j==n/2+m/2){
long num = temp^k;
if (map[i][j].get(num)!=null){
ans+=map[i][j].get(num);
}
return;
}
temp^=a[i][j];
dfsend(i-1,j,temp);
dfsend(i,j-1,temp);
}
}
/**
* 1^1=0
* 0^0=0
* 1^0=1
* 0^1=1
* a ^ b = b ^ a
* a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
* d = a ^ b ^ c 可以推出 a = d ^ b ^ c.
* a ^ b ^ a = b.
*/
Codeforces Round #498 (Div. 3)的更多相关文章
- CodeForces Round #498 Div.3 A. Adjacent Replacements
http://codeforces.com/contest/1006/problem/A Mishka got an integer array aa of length nn as a birthd ...
- Codeforces Round #498 (Div. 3) 简要题解
[比赛链接] https://codeforces.com/contest/1006 [题解] Problem A. Adjacent Replacements [算法] 将序列中的所有 ...
- Codeforces Round #498 (Div. 3)--E. Military Problem
题意问,这个点的然后求子树的第i个节点. 这道题是个非常明显的DFS序: 我们只需要记录DFS的入DFS的时间,以及出DFS的时间,也就是DFS序, 然后判断第i个子树是否在这个节点的时间段之间. 最 ...
- Codeforces Round #498 (Div. 3) E. Military Problem (DFS)
题意:建一颗以\(1\)为根结点的树,询问\(q\)次,每次询问一个结点,问该结点的第\(k\)个子结点,如果不存在则输出\(-1\). 题解:该题数据范围较大,需要采用dfs预处理的方法,我们从结点 ...
- Codeforces Round #498 (Div. 3) D. Two Strings Swaps (思维)
题意:给你两个长度相同的字符串\(a\)和\(b\),你可以将相同位置上的\(a\)和\(b\)的字符交换,也可以将\(a\)或\(b\)中某个位置和对应的回文位置上的字符交换,这些操作是不统计的,你 ...
- 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连试试水的深浅..... ...
随机推荐
- java C 类自动转换规则
C类型转换规则
- mysql 正则表达式判断是否数字
select ('123a' REGEXP '[^0-9.]'); --‘123a'中含有字符'a' 输出结果为1 mysql中常量true输出为1 false输出为0
- web安全测试---AppScan扫描工具
安全测试应该是测试中非常重要的一部分,但他常常最容易被忽视掉. 尽管国内经常出现各种安全事件,但没有真正的引起人们的注意.不管是开发还是测试都不太关注产品的安全.当然,这也不能怪我们苦B的“民工兄 弟 ...
- IDC机房机器日志采集配置
以机器 gpu-server-011 为例: 机房机器添加AliUids操作 [root@gpu-server-011 ~]# mkdir -p /etc/ilogtail/users/ [root ...
- 开发app前需要提前准备的资料
需要准备的资料整理如下: 1 域名未注册,建议在 阿里云注册:https://www.aliyun.com/,2 服务器https://ecs-buy.aliyun.com/配置:计费方式:包年包月地 ...
- Swift Struct 结构体
前言 Swift 语言有两种基本的数据类型,即类(class)和结构体(struct),class 这样的概念大家不会陌生,而 struct 也并不是什么新的概念,在 Objective-C 和 C ...
- vue-router2.x使用入门
组件中的路由 <router-link to=""></router-link> 无参数 <router-link to="/ar/1&qu ...
- 使用ansible结合FTP部署zabbix_agent
想要达到的效果:一条命令,快速对多台主机部署zabbix_agent 实现思路:从源码编译编译出zabbix_agentd,准备好安装脚本,将安装脚本和编译出的agent一起上传到FTP服务器,在an ...
- NO.2 安装配置
检测当前系统下的jdk安装情况: [root@Centos 桌面]# rpm -qa | grep java tzdata-java-2012j-1.el6.noarch java-1.7.0-ope ...
- 解决MAMP启动mysql服务 但是Navicat连接不上
问题重现 错误信息 2003 - Can't connect to MySQL server on '127.0.0.1' (61 "Connection refused") 解决 ...