B. Game on Ranges

目录

B. Game on Ranges

A. Robot Cleaner


B. Game on Ranges

原题描述

题意理解(建议先自己把原题描述看一遍再来看我的理解

有一个集合,这个集合的元素是区间,一开始集合里只有一个元素就是[1,n]的区间,对这个集合我们可以选择其中的一个元素(区间),然后在区间内选一个数d,以[l,d-1]和[d+1,r]这两个区间替换掉我们选择的这个区间(l和r分别是我们从集合里面选择出来的这个元素的左端点和右端点)。当然这两个新区间必须存在才行,左端点小于等于右端点。如果不存在就不加入到集合中。我们选择n个数后,集合内元素个数为0,也就是区间个数为0时结束。

现在题目给出的是每次操作时选择的那个区间,要你推出对应的d。比如现在有一个集合S,里面有一个元素,区间[1,6]。

        第一次操作,选[1,6],d取2,对S,删去[1,6],加入[1,1]和[3,6],现S={[1,1],[3,6]}。

        第二次操作,选[1,1]进行操作,d取1,对S,删去[1,1],现S={[3,6]}。

        第三次操作,选[3,6]进行操作,d取6,对S,删去[3,6],加入[3,5],现S={[3,5]}。

        第四次操作,选[3,5]进行操作,d取3,对S,删去[3,5],加入[4,5],现S={[4,5]}。

        第五次操作,选[4,5]进行操作,d取5,对S,删去[4,5],加入[4,4],现S={[4,4]}。

        第六次操作,选[4,4]进行操作,d取4,对S,删去[4,4],现S为空,游戏结束。

现题目打乱顺序的给出[1,6],[1,1],[3,6],[3,5],[4,5],[4,4]这六个区间,要求你推出每个区间对应的d,并输出,可以不按照题目的顺序。

题解

        看似很复杂的一道题,我们可以从简单的角度入手,对于左右端点相等的区间,d只能选择端点值,所以我们先确定所有左右端点相等区间对应的d值。其实我们可以简单的理解为每次操作删掉[1,n]之间的一个数,所以删过的数就不可能再次出现,也就是每个区间对应的d值都不相同。所以我们标记掉出现过的d。于是我们有了这样一个思路,随着迭代的进行被标记的d越来越多,对于区间越来越大,但是找到d的难度相当,因为区间越大时被标记的d就越多。我们将区间以从小到大的顺序排列,对于长度为1的区间直接找到d值,对于长度为2的区间只有两个可能的d值,但此前我们标记了一个d值,所以对于长度为2的区间也只有一个确定的d值,以此类推。所有的区间我们都能找到一个d值与之对应。

AC代码


/*@_krito*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define LM LLONG_MAX
#define IM INT_MAX
#define N 1001
struct pair1{
	int l;
	int r;
	int len;
	int d=0;
};
bool cmp(pair1 a,pair1 b){
	return a.len<b.len;
}

int main(){
	int t;
	
	cin>>t;
	while(t--){
		bool vis1[N]={0};
		int n,ans[N];
		cin>>n;
		pair1 a[N];
		for(int i=1;i<=n;i++){
			cin>>a[i].l>>a[i].r;
			a[i].len=a[i].r-a[i].l;
		}
		sort(a+1,a+1+n,cmp);
		for(int i=1;i<=n;i++){
			if(a[i].l==a[i].r){
				a[i].d=a[i].l;
				vis1[a[i].d]=true;
			}
			else {
				for(int j=a[i].l;j<=a[i].r;j++){
					if(!vis1[j]){
						a[i].d=j;
						vis1[j]=true;
					}
				}
			}
		}
		for(int i=1;i<=n;i++) cout<<a[i].l<<" "<<a[i].r<<" "<<a[i].d<<endl;
	}
}

这里一并附上A的AC代码.

A. Robot Cleaner

原题描述

 题解

        一个机器人先斜向下走,走到底了就斜向上走,以机器人为中心的横竖两条线碰到星星了就算成功,游戏结束。题目给出机器人初始坐标和星星初始坐标,每秒走一步,输出机器人吃到星星所要用的秒数。横竖分别算个步数出来,取小的那个输出即可。这题从读题到AC花了我不到5分钟。

AC代码

/*@_krito*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define LM LLONG_MAX
#define IM INT_MAX
#define for(i,a,b) for(int i=a;i<=b;i++)

int main(){
	int t;
	cin>>t;
	while(t--){
		int m,n,tb,cb,td,cd,x,y;
		cin>>m>>n>>tb>>cb>>td>>cd;
		if(tb<=td) x=td-tb;
		else {
			x=m-tb+m-td;
		}
		if(cb<=cd) y=cd-cb;
		else{
			y=n-cb+n-cd;
		}
		int ans=y<x?y:x;
		cout<<ans<<endl;
	}
}

——————————————————分割线——————————————————————

        《关于我考试周为什么不复习而是在刷codeforces这件事》

这里推荐一首歌送给考试周的各位。

《孤勇者》 陈奕迅

都 是勇敢的

你额头的伤口 你的 不同 你犯的错

都 不必隐藏

你破旧的玩偶 你的 面具 你的自我

他们说 要带着光 驯服每一头怪兽

他们说 要缝好你的伤 没有人爱小丑

为何孤独 不可 光荣

人只有不完美 值得歌颂

谁说污泥满身的不算英雄

爱你孤身走暗巷

爱你不跪的模样

爱你对峙过绝望

不肯哭一场

爱你破烂的衣裳

却敢堵命运的枪

爱你和我那么像

缺口都一样

去吗 配吗 这褴褛的披风

战吗 战啊 以最卑微的梦

致那黑夜中的呜咽与怒吼

谁说站在光里的才算英雄

他们说 要戒了你的狂

就像擦掉了污垢

他们说 要顺台阶而上

而代价是低头

那就让我 不可 乘风

你一样骄傲着 那种孤勇

谁说对弈平凡的不算英雄

爱你孤身走暗巷

爱你不跪的模样

爱你对峙过绝望

不肯哭一场

爱你破烂的衣裳

却敢堵命运的枪

爱你和我那么像

缺口都一样

去吗 配吗 这褴褛的披风

战吗 战啊 以最卑微的梦

致那黑夜中的呜咽与怒吼

谁说站在光里的才算英雄

你的斑驳 与众不同

你的沉默 震耳欲聋

You Are The Hero

爱你孤身走暗巷

爱你不跪的模样

爱你对峙过绝望

不肯哭一场 (You Are The Hero)

爱你来自于蛮荒

一生不借谁的光

你将造你的城邦

在废墟之上

去吗 去啊 以最卑微的梦

战吗 战啊 以最孤高的梦

致那黑夜中的呜咽与怒吼

谁说站在光里的才算英雄

 这首歌最近似乎很火,但他和普通的网红歌曲是云泥之别的。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用\[1\]:Rhino对于指定包名或类名时是如何处理错误的。如果java.Myclass是可访问的,Rhino会试图加载名为java.MyClass的类,如果加载失败,它会假设java.MyClass是一个包名,不会报错。\[1\]引用\[2\]:要注意Java会暗中导入java.lang.*,但是Rhino不会。因为JavaScript的顶层对象Boolean、Math、Number、Object和String和java.lang包中同名的类并不相同。因为这种冲突,建议不要用importPackage来导入java.lang包。\[2\] 根据提供的错误信息"Exception in thread "main" java.lang.NullPointerException at game8.GameMap.createMap(GameMap.java:54) at game8.GameController.runGame(GameController.java:29) at game8.GameController.<init>(GameController.java:21) at game8.GameTest.main(GameTest.java:5)",这是一个空指针异常(NullPointerException)。空指针异常通常发生在试图访问一个空对象的属性或调用一个空对象的方法时。根据错误信息,异常发生在GameMap类的第54行,可能是因为在该行代码中访问了一个空对象的属性或方法。为了解决这个问题,你需要检查GameMap类的第54行代码,并确保在访问对象之前对其进行了正确的初始化。 #### 引用[.reference_title] - *1* *2* *3* [【Auto.JS】Autojs官方提取文档使用说明函数 (2)](https://blog.csdn.net/a6892255/article/details/107256535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Krito.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值