被虐惨了,实验室里数十位大佬中的一位闲来无事切题(二,然后出了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)的更多相关文章

  1. 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 ...

  2. Codeforces Round #498 (Div. 3) 简要题解

    [比赛链接] https://codeforces.com/contest/1006 [题解] Problem A. Adjacent Replacements        [算法] 将序列中的所有 ...

  3. Codeforces Round #498 (Div. 3)--E. Military Problem

    题意问,这个点的然后求子树的第i个节点. 这道题是个非常明显的DFS序: 我们只需要记录DFS的入DFS的时间,以及出DFS的时间,也就是DFS序, 然后判断第i个子树是否在这个节点的时间段之间. 最 ...

  4. Codeforces Round #498 (Div. 3) E. Military Problem (DFS)

    题意:建一颗以\(1\)为根结点的树,询问\(q\)次,每次询问一个结点,问该结点的第\(k\)个子结点,如果不存在则输出\(-1\). 题解:该题数据范围较大,需要采用dfs预处理的方法,我们从结点 ...

  5. Codeforces Round #498 (Div. 3) D. Two Strings Swaps (思维)

    题意:给你两个长度相同的字符串\(a\)和\(b\),你可以将相同位置上的\(a\)和\(b\)的字符交换,也可以将\(a\)或\(b\)中某个位置和对应的回文位置上的字符交换,这些操作是不统计的,你 ...

  6. 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 ...

  7. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  8. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  9. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

随机推荐

  1. 基于物理的渲染—HDR Tone Mapping

    在游戏引擎渲染管线中,我们对于R.G.B通道颜色信息的数值范围通常设置在[0,1]之间(或者是[0,255]).其中,0代表没有光亮度,1代表显示器能够显示的最大光亮度.这个表示方式虽然直接易懂,但它 ...

  2. java文章标题及文章相似度计算hash算法实现

    参看了 https://github.com/awnuxkjy/recommend-system 对方用了 余弦 函数实现相似度计算,我则用的是 hanlp+hash 算法(Hash算法总结) 再看服 ...

  3. springboot拦截器@Autowired为null解决

    问题原因 拦截器加载的时间点在springcontext之前,所以在拦截器中注入自然为null 文件解决 在spring配置文件中这样写 @Bean public HandlerInterceptor ...

  4. mvn -N和-U的用法

    mvn参数-N.-U理解 关于-N -N,--non-recursive Do not recurse into sub-projects 意思是,不递归到子项目(子模块). 举例: 一个父项目下Fa ...

  5. golang dlv 远程调试

    因为不知道delvel 是如何设置源码的,本地编译的上传到服务器上,服务器要调试看不到源码,很是忧伤,所以干脆使用远程调试吧: 在服务器上 ps x|grep game 查找到gameserver的进 ...

  6. OpenCV3 for python3 学习笔记3-----用OpenCV3处理图像一

    本文的内容都与图像处理有关,这时需要修改图像,比如要使用具有艺术性的滤镜.外插(extrapolate)某些部分.分割.粘贴或其他需要的操作. 1.不同色彩空间的的转换 OpenCV有数百种关于在不同 ...

  7. MyBatis项目快速搭建及MySQL一个Statement支持多条命令参数

    一.简述 本文以笔记的形式,记录一个基本Mybatis项目的使用,方便后期项目使用到相关配置时直接复制使用. 二.项目结构 pom.xml中的依赖 <!-- https://mvnreposit ...

  8. windows10开启hyper-v虚拟化

    windows积极融入虚拟化,对pc体验很不错的! 01.程序更新组件 控制面板--->程序-->打开/关闭 windwods功能--->更新完毕,重启windows 02.确认是否 ...

  9. 设计模式? GoF

    GoF  >>> Gang of Four.四人帮 是Design Patterns: Elements of Reusable Object-Oriented Software ( ...

  10. ffmpeg 、Vlc参数

    ffmpeg.exe -loglevel error -probesize 32 -vsync passthrough -framerate 20 -f gdigrab -i desktop -fil ...