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连试试水的深浅..... ...
 
随机推荐
- SQL学习1:基础
			
SQL 是用于访问和处理数据库的标准的计算机语言. SQL,指结构化查询语言,全称是 Structured Query Language. SQL 能做什么? SQL 面向数据库执行查询 SQL 可从 ...
 - VUE温习:nextTick、$refs、嵌套路由、keep-alive缓存、is特性、路由属性用法、路由钩子函数
			
一.$nextTick 1.vue的dom执行异步更新,只要观察到数据变化,vue将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变. 2.vue.$nextTick(cb),数据发生变化,更新 ...
 - wifipineapple外接网卡上网
			
买了一台wifipineapple, pineapple有两种版本, 第一种是3G版本,可以外接3G上网卡, 还有一种是wifi版本, 包含一个物理的网络插槽, 我买的是第二种 wifipineapp ...
 - Visual Studio 2017 扩展
			
Visual Studio 2017 扩展 Visual Studio 2017 15.4.4 : 目前是最新的版本号,所有的工具&插件都支持这个版本号.所以请对号入座. ReSharper ...
 - 尝试新的构造系统 Ninja
			
Ninja 是 Chrome 项目的构建工具,用来替换经典工具 make,目前这个开源工具已经被很多其它项目采用.据项目作者描述,创建这个新的构建工具,主要是为了提升大型项目的编译速度. 由于 Nin ...
 - CouchDB 简单HTTP接口使用说明
			
目录 1.简介 2.安装 2.HTTP接口简单使用 2.1.认证接口 2.1.1 Basic Authentication 2.1.2 Cookie Authentication 2.2 创建与删除数 ...
 - 抽奖 mark
			
https://blog.csdn.net/Oversdownload/article/details/77454006?utm_source=blogxgwz5
 - MySQL server has gone away 的两个最常见的可能性
			
[背景] 今天测试同学反馈他们docker中的测试库时不时就就报“MySQL server has gone away”,事态之紧急搞的我都有点怕了(像我这么成熟稳重 的DBA怎么有可能怕呢): 第一 ...
 - blender show normals
			
https://blenderartists.org/forum/showthread.php?193096-Blender-2-5-how-to-show-normals-in-viewport
 - Intel Fortran 调用Delphi编制的DLL
			
module link_cont interface subroutine I_FileOpenCont (ncase,ndata,lpool,xfiles) integer(kind=) :: nc ...