AGC 030 B - Tree Burning 结论+枚举

考试 T2,是一个脑筋急转弯.

最暴力的贪心是每次先选左,再选右,再选左..... 然而这么做在一些情况下是错的.

但是,我们发现我们的选法一定是 $LLLLRLRLRLRLR$ 或 $RRRRLRLRLRLRLR$ (易证明)

所以直接枚举第一次向左/右走多少次,然后剩余的直接 $O(1)$ 计算即可.

原文地址:https://www.cnblogs.com/guangheli/p/11809014.html

时间: 2024-11-02 22:03:36

AGC 030 B - Tree Burning 结论+枚举的相关文章

AGC 030 B - Tree Burning

B - Tree Burning 链接 题意: 一个长度为L的环,有n个位置上有树,从0出发,每次选择一个方向(顺时针或者逆时针),一直走,直到走到一棵树的位置,烧掉这棵树,重复这个过程,直到没有树.求最多走多少距离. 分析: 最优一定是LLLRLRLRL……类似这样的,于是枚举每个点,计算答案. 代码: 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #include<iostream

AGC 030B.Tree Burning(贪心)

题目链接 \(Description\) 有一个长为\(L\)的环,上面有\(n\)棵树,坐标分别为\(a_i\).初始时在原点. 每次你可以选择顺时针或逆时针走到第一棵没有被烧掉的树,停在这个位置,然后烧掉这棵树.重复这一过程直到所有树都被烧掉. 求走的总路程最多可以是多少. \(n\leq2\times10^5,\ a_i,L\leq10^9\). \(Solution\) 真的菜啊QAQ 当时连这个都不会 记顺时针走一次为\(L\),逆时针走一次为\(R\). 初步想法是\(LRLRLR.

AtCoder AGC030B Tree Burning

题目链接 https://atcoder.jp/contests/agc030/tasks/agc030_b 题解 细节好题.. 首先假设第一步往右走,那么可以发现当拐弯的次数一定时路径是唯一的 于是可以枚举这个值 然后很烦的是枚举之后要分奇偶讨论.. 最后再翻过来做一遍处理第一步往左走就行了 时间复杂度\(O(n)\) 代码 #include<cstdio> #include<cstdlib> #include<iostream> #include<algori

【AtCoder】AGC030

A - Poisonous Cookies 有毒还吃,有毒吧 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define space putchar(' ') #define enter putchar('\n') #define MAXN 100005 #define e

hdu 5425 Rikka with Tree II(暴力)

题目链接:hdu 5425 Rikka with Tree II 直接枚举就好了,当概率极小时贡献值可以忽略. #include <cstdio> #include <cstring> #include <cmath> #include <vector> #include <queue> #include <algorithm> using namespace std; const int maxn = 1e5 + 5; int N,

常用类demo--【J2SE】

StringBuffer类 public class TestStringBuffer{ public static void main(String[] args){ String s="Mircosoft"; char[] a={'a' ,'b' ,'c'}; StringBuffer sb1=new StringBuffer(s); sb1.append('/').append("IBM").append('/').append("Sun"

Java数据结构和算法之递归

四.递归 递归是函数调用自身的一种特殊的编程技术,其应用主要在以下几个方面:   阶乘 在java当中的基本形式是: Public  void  mothed(int n){//当满足某条件时: Mothed(n‐1): } 递归二分查找 Java二分查找实现,欢迎大家提出交流意见.  /** *名称:BinarySearch *功能:实现了折半查找(二分查找)的递归和非递归算法. *说明: *     1.要求所查找的数组已有序,并且其中元素已实现Comparable<T>接口,如Integ

java作业2

(一) 仔细阅读示例: EnumTest.java,运行它,分析运行结果? 你能得到什么结论?你掌握了枚举类型的基本用法了吗? 结论:枚举不属于原始数据类型,它的每个具体值都引用一个特定的对象.相同的值则引用同一个对象. (二) 1. 原码 原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制: [+1]原 = 0000 0001 [-1]原 = 1000 0001 第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是: [1111 11

hdu 2489 Minimal Ratio Tree(dfs枚举 + 最小生成树)~~~

题目: 链接:点击打开链接 题意: 输入n个点,要求选m个点满足连接m个点的m-1条边权值和sum与点的权值和ans使得sum/ans最小,并输出所选的m个点,如果有多种情况就选第一个点最小的,如果第一个点也相同就选第二个点最小的........ 思路: 求一个图中的一颗子树,使得Sum(edge weight)/Sum(point weight)最小~ 数据量小,暴力枚举~~~~~dfs暴力枚举C(M,N)种情况. 枚举出这M个点之后,Sum(point weight)固定,进行prim或者K