2021 RoboCom 世界机器人开发者大赛 您所在的位置:网站首页 一个箱子的重量 2021 RoboCom 世界机器人开发者大赛

2021 RoboCom 世界机器人开发者大赛

2024-07-16 05:24| 来源: 网络整理| 查看: 265

文章目录 7-1 冒险者分队 20 7-2 拼题A打卡奖励 25 7-3 快递装箱 25 7-4 塔防游戏 30

7-1 冒险者分队 20

7-1 冒险者分队 分数 20 作者 DAI, Longao 单位 杭州百腾教育科技有限公司 冒险者分队是人气 MMORPG《最终幻想 14》里的一个游戏系统。玩家通过招募 NPC (非玩家角色)组成小队完成特定任务后可以获取丰厚的奖励。

由于完成任务有能力的要求,因此我们需要对 NPC 进行一定的训练。NPC 组成的小队会有三个属性:体能、心智,以及战术,玩家可以选择以下的两种训练课程之一对小队进行训练:

提升其中一个属性 40,降低其他两个属性各 20; 提升其中两个属性 20,降低剩下一个属性 40。 如果在选择的训练课程后有任意一个属性小于 0,那么训练会失败,属性不会发生变化。

为了完成特定任务,现在给定小队的初始属性和目标属性,请回答是否有可能通过一定的训练,使得小队的属性正好达到目标属性的值,如果可以的话,最少的次数是多少?

输入格式: 输入第一行是一个正整数 T (≤10 5 ),表示有多少组询问。

接下来的 T 组询问,每组询问有两行,每行三个非负整数,第一行为小队初始的属性,第二行为需要达成的目标属性。

所有属性值均大于等于 0,小于等于 2×10 9 。

输出格式: 如果目标属性无法通过训练达到,输出一行 −1,否则输出一个整数,表示达到目标属性的最少训练次数。

输入样例: 4 25 30 35 65 10 15 100 200 300 200 180 220 100 100 100 0 0 0 777 888 999 777 888 999 输出样例: 1 3 -1 0

题意:给出初始数组和目标数组,长都为3。每次可以给两个数+20,一个-40,或者两个-20,一个加40,求最少多少次能变成目标数组。 思路: 首先,初始数组和目标数组之间只能通过20来变换,所以对应位置的值作差%20,有余数肯定直接-1。然后把三个差值/20,简化问题。 然后,考虑非法的情况,不管是-1,-1,+ 2还是 -2,+1,+1,这三个数%3的值都是1,因为最后要让差值从(a,b,c)变成(0,0,0),所以原本的这三个差值必须%3相等,否则-1。 最后,考虑构造最优解。 设a < b < 0 < c,我们以1,1,-2作用于三者,那么b会首先变成0。再然后,再以两个操作2,-1,-1和1,1,-2组合成3,0,-3作用于a和c,就可以构造出(0,0,0)。(如果a或c不能被3整除怎么办?事实是不会的,因为上面已经判过三者对3同余了,所以三者%3都等于0,必定是能整除的) #include using namespace std; int a[10], b[10], c[10]; int main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); int T; cin>>T; while(T--){ for(int i = 1; i >a[i]; //-1 int ok = 1; for(int i = 1; i >b[i]; c[i] = b[i]-a[i]; if(c[i]%20!=0)ok = 0; c[i] /= 20; } if(a[1]+a[2]+a[3] != b[1]+b[2]+b[3])ok = 0; int mod = (c[1]%3+3)%3; for(int i = 2; i 0); if(num==2)c[1]=-c[1], c[2]=-c[2], c[3]=-c[3]; int x = min({c[1],c[2],c[3]}), z = max({c[1],c[2],c[3]}), y = c[1]+c[2]+c[3]-x-z;//排序 int res = 0; res += -y; x -= y; z += y*2; y = 0; //操作1 res += z/3*2; //操作2 coutm; for(int i = 1; i >v[i]; for(int i = 1; i >w[i]; for(int i = 1; i = 0; j--){ if(j>=v[i])f[j] = max(f[j], f[j-v[i]]+w[i]); } } coutm; int sum = 0; for(int i = 1; i >v[i]; for(int i = 1; i >w[i], sum += w[i]; memset(f,0x3f,sizeof(f)); f[0] = 0; for(int i = 1; i = w[i]; j--){ f[j] = min(f[j], f[j-w[i]]+v[i]); } } for(int i = sum; i >= 0; i--){ if(f[i]>n>>wmax>>w1>>w2; for(int i = 1; i >x; //把x放到A口,考虑是否装箱 if(A.size()==0)A.push_back(make_pair(x,0)); else{ PII y = A.front(); if(y.first + x


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有