总是有一个程序的bug没找到
Laharl, Etna, Flonne一开始在这条射线上不同的三个点, 他们希望其中某个人能够到达下标最大的点.
每个角色只能进行下面的3种操作, 且每种操作不能每人不能进行超过一次.
1.移动一定的距离
2.把另一个角色高举过头
3.将举在头上的角色扔出一段距离
每个角色有一个movement range参数, 他们只能移动到没有人的位置, 并且起点和终点的距离不超过movement range.
如果角色A和另一个角色B距离为1, 并且角色B没有被别的角色举起, 那么A就能举起B. 同时, B会移动到A的位置,B原来所占的位置变为没有人的位置. 被举起的角色不能进行任何操作, 举起别人的角色不能移动.同时, 每个角色还有一个throwing range参数, 即他能把举起的角色扔出的最远的距离. 注意, 一个角色只能被扔到没有别的角色占据的位置. 我们认为一个角色举起另一个同样举起一个角色的角色是允许的. 这种情况下会出现3个人在同一个位置的情况. 根据前面的描述, 这种情况下上面的两个角色不能进行任何操作, 而最下面的角色可以同时扔出上面的两个角色. 你的任务是计算这些角色能够到达的位置的最大下标, 即最大的数字x, 使得存在一个角色能够到达x.
每一行有且仅有3个整数, 描述对应角色的初始位置, movement range, throwing range.
数据保证3个角色的初始位置两两不相同且所有的数字都在1到10之间.</div>
4 3 1
2 3 3
首先, Laharl移动到6.
然后Flonne移动到位置5并且举起Etna.
Laharl举起Flonne将其扔到位置9.
Flonne把Etna扔到位置12.
Etna移动到位置15.
#include <iostream>
#include <cstdio> using namespace std; typedef struct node{
int loca;
int moverange;
int throwrange;
};
struct node a[];
int w[]={};
int is_move[]={};
int is_lift[]={};
int is_throw[]={};
int is_belifted[]={};
int ans=;
int step[]={}; int dfs();
//第一个人的第一种操作,移动
void fun11(){
if(!is_move[]){
int t=a[].loca+a[].moverange;
for(int i=a[].loca-a[].moverange; i<=t; i++){
if(!w[i] && i>=){
int t1=w[a[].loca];
int t2=a[].loca;
int t3=is_move[];
w[a[].loca]=;
w[i]=;
a[].loca=i;
is_move[]=;
dfs();
w[a[].loca]=t1;
w[i]=;
a[].loca=t2;
is_move[]=t3;
} }
}
}
//第一个人的第二种操作,举起两边的
void fun12(){
for(int i=;i<=;i++){
if(w[a[].loca-]==i){
int t1=w[a[].loca-];
int t2=is_belifted[i];
int t3=is_lift[]; w[a[].loca-]=;
is_belifted[i]=;
is_lift[]=i;
dfs(); w[a[].loca-]=t1;
is_belifted[i]=t2;
is_lift[]=t3;
}
if(w[a[].loca+]==i){
int t1=w[a[].loca+];
int t2=is_belifted[i];
int t3=is_lift[];
w[a[].loca+]=;
is_belifted[i]=;
is_lift[]=i;
dfs();
w[a[].loca+]=t1;
is_belifted[i]=t2;
is_lift[]=t3;
}
}
}
//第一个人的第三种操作,扔自己上面的
void fun13(){
if(!is_throw[] && is_lift[]!=){
for(int i=a[].loca-a[].throwrange; i<=a[].loca+a[].throwrange; i++){
if(!w[i] && i>=){
int t1=w[a[].loca];
int t2=w[i];
int t3=a[].loca;
int t4=is_throw[];
w[a[].loca]=;
w[i]=is_lift[];
a[].loca=i;
is_throw[]=;
dfs();
w[a[].loca]=t1;
w[i]=t2;
a[].loca=t3;
is_throw[]=t4;
} }
}
} //第二个人的第一种操作,移动
void fun21(){
if(!is_move[]){
int t=a[].loca+a[].moverange;
for(int i=a[].loca-a[].moverange; i<=t; i++){
if(!w[i] && i>=){
int t1=w[a[].loca];
int t2=a[].loca;
int t3=is_move[];
w[a[].loca]=;
w[i]=;
a[].loca=i;
is_move[]=;
dfs();
w[a[].loca]=t1;
w[i]=;
a[].loca=t2;
is_move[]=t3;
} }
}
}
//第二个人的第二种操作,举起两边的
void fun22(){
for(int i=;i<=;i++){
if(w[a[].loca-]==i){
int t1=w[a[].loca-];
int t2=is_belifted[i];
int t3=is_lift[];
w[a[].loca-]=;
is_belifted[i]=;
is_lift[]=i;
dfs();
w[a[].loca-]=t1;
is_belifted[i]=t2;
is_lift[]=t3;
}
if(w[a[].loca+]==i){
int t1=w[a[].loca+];
int t2=is_belifted[i];
int t3=is_lift[];
w[a[].loca+]=;
is_belifted[i]=;
is_lift[]=i;
dfs();
w[a[].loca+]=t1;
is_belifted[i]=t2;
is_lift[]=t3;
}
}
}
//第二个人的第三种操作,扔自己上面的
void fun23(){
if(!is_throw[] && is_lift[]!=){
for(int i=a[].loca-a[].throwrange; i<=a[].loca+a[].throwrange; i++){
if(!w[i] && i>=){
int t1=w[a[].loca];
int t2=w[i];
int t3=a[].loca;
int t4=is_throw[];
w[a[].loca]=;
w[i]=is_lift[];
a[].loca=i;
is_throw[]=;
dfs();
w[a[].loca]=t1;
w[i]=t2;
a[].loca=t3;
is_throw[]=t4;
} }
}
}
//第三个人的第一种操作,移动
void fun31(){
if(!is_move[]){
int t=a[].loca+a[].moverange;
for(int i=a[].loca-a[].moverange; i<=t; i++){
if(!w[i] && i>=){
int t1=w[a[].loca];
int t2=a[].loca;
int t3=is_move[];
w[a[].loca]=;
w[i]=;
a[].loca=i;
is_move[]=;
dfs();
w[a[].loca]=t1;
w[i]=;
a[].loca=t2;
is_move[]=t3;
} }
}
}
//第三个人的第二种操作,举起两边的
void fun32(){
for(int i=;i<=;i++){
if(w[a[].loca-]==i){
int t1=w[a[].loca-];
int t2=is_belifted[i];
int t3=is_lift[];
w[a[].loca-]=;
is_belifted[i]=;
is_lift[]=i;
dfs();
w[a[].loca-]=t1;
is_belifted[i]=t2;
is_lift[]=t3;
}
if(w[a[].loca+]==i){
int t1=w[a[].loca-];
int t2=is_belifted[i];
int t3=is_lift[];
w[a[].loca+]=;
is_belifted[i]=;
is_lift[]=i;
dfs();
w[a[].loca+]=t1;
is_belifted[i]=t2;
is_lift[]=t3;
}
}
}
//第三个人的第三种操作,扔自己上面的
void fun33(){
if(!is_throw[] && is_lift[]!=){
for(int i=a[].loca-a[].throwrange; i<=a[].loca+a[].throwrange; i++){
if(!w[i] && i>=){
int t1=w[a[].loca];
int t2=w[i];
int t3=a[].loca;
int t4=is_throw[];
w[a[].loca]=;
w[i]=is_lift[];
a[].loca=i;
is_throw[]=;
dfs();
w[a[].loca]=t1;
w[i]=t2;
a[].loca=t3;
is_throw[]=t4;
} }
}
} int dfs(){
ans=max(ans,a[].loca);
ans=max(ans,a[].loca);
ans=max(ans,a[].loca);
//if(is_move[1]==1&&is_move[2]==1&&is_move[3]==1&&is_throw[1]==1&&is_throw[2]==1&&is_throw[3]==0||is_throw[1]==1&&is_throw[2]==0&&is_throw[3]==1||is_throw[1]==0&&is_throw[2]==1&&is_throw[3]==1){
// return 0;
//}else{
for(int i=;i<=;i++){
if(!step[i]){
switch(i){
case :step[]=;fun11();step[]=;break;
case :step[]=;fun12();step[]=;break;
case :step[]=;fun13();step[]=;break;
case :step[]=;fun21();step[]=;break;
case :step[]=;fun22();step[]=;break;
case :step[]=;fun23();step[]=;break;
case :step[]=;fun31();step[]=;break;
case :step[]=;fun32();step[]=;break;
case :step[]=;fun33();step[]=;break;
}
} }
return ;
//} } int main()
{
for(int i=;i<=;i++){
scanf("%d %d %d",&a[i].loca,&a[i].moverange,&a[i].throwrange);
}
dfs();
printf("%d\n",ans);
return ;
}
总是有一个程序的bug没找到的更多相关文章
- 我怀疑这是IDEA的BUG,但是我翻遍全网没找到证据!
你好呀,我是歪歪. 前几天有朋友给我发来这样的一个截图: 他说他不理解,为什么这样不报错. 我说我也不理解,把一个 boolean 类型赋值给 int 类型,怎么会不报错呢,并接着追问他:这个代码截图 ...
- 创建 userSettings/Microsoft.SqlServer.Configuration.LandingPage.Properties.Settings 的配置节处理程序时出错: 未能加载文件或程序集“System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。系统没找到指定的文件
创建 userSettings/Microsoft.SqlServer.Configuration.LandingPage.Properties.Settings 的配置节处理程序时出错: 未能加载文 ...
- 微信小程序没找到构建npm或者没找到node_modules目录以及如何在小程序中引入vant weapp组件
微信小程序没找到构建npm或者没找到node_modules目录解决方法如下: 按照微信小程序提供的文档npm install是不行的,直接提示没找到可构建的npm包. 1.直接安装:npm init ...
- 大一C语言学习笔记(11)---编程篇--写一个程序,可以获取从键盘上输入的的三个数,并能够判断是否可以以这三个数字作为边长来构成一个三角形,如果可以的话,输出此三角形的周长及面积,要求 0 bug;
考核内容: 写一个程序,可以获取从键盘上输入的的三个数,并能够判断是否可以以这三个数字作为边长来构成一个三角形,如果可以的话,输出此三角形的周长及面积: 答案: #include<stdio.h ...
- --专访雷果国: 从1.5K到18K 一个程序员的5年成长之路--
导语:今年三月份,在CSDN博客和新浪微博上有一篇<从1.5K到18K,一个程序员的5年成长之路>被众人分享和传阅,这篇博文首先介绍了作者自学之初薄弱的基础,然后通过流水账形式分享了那个从 ...
- 专访雷水果国:离1.5K至18K 一个程序猿5每年的成长之路
我只是一个小菜鸟,对于自主学习和交流PHP(jquery,linux,lamp,shell,javascript,server)等一系列的知识.小菜鸟创建了一个群.希望光临本博客的人能够进来交流. 寻 ...
- 写一个程序,统计自己C语言共写了多少行代码。ver2.00
概要 完成一个程序,作用是统计一个文件夹下面所有文件的代码行数.输入是一个文件夹的绝对路径,输出是代码行数.所以此程序的新特点有两个: 统计某一文件夹下的所有文件: 可以任意指定本机硬盘上任何位置的某 ...
- 说实话当一个程序猿不easy
我以前说过,程序猿不是一般的人,是具有某种超能里的人.但问题是.程序猿往往意识不到自己的这样的特异功能.在他们的眼里.会觉得自己非常普通.跟常人一样,所以,程序猿能做到的事情,其它人--比方他们的客户 ...
- OD 实验(十七) - 对一个程序的逆向分析
程序: 运行程序 弹出一个对话框,点击 OK 来到主界面,点击 Help -> Register Now 这是输入注册码的地方 按关闭程序的按钮 会提示剩下 30 天的使用时间 用 Ressco ...
随机推荐
- js 字符串转换数字
方法主要有三种转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有对 ...
- sql server cross/outer apply 用法
这是 sql server 帮助文档关于apply的描述: 使用 APPLY 运算符(2005或以上版本)可以为实现查询操作的外部表表达式返回的每个行调用表值函数.表值函数作为右输入,外部表表达式作为 ...
- HttpUtility.UrlEncode 和Server.UrlEncode的区别,记录记录,被乱码搞晕头了。。。。。
今天修改原来的站点,有几个session和cookies乱码问题,然后又好好看了一下关于编码这块的内容. 大概是:登录处,用session记录了一点中文内容.然后cookies也记录了一点中文内容,取 ...
- 前端代码目录结构、常用 piugin、元素补充用法及其它注意事项
目录结构: app: .html文件 css: .css文件 script: 脚本文件 plugin: 插件 (此目录放一些通用代码) 注意事项: 1.在IE浏览器下img会显示边框,为了保证兼容 ...
- 回顾yii的学习进程 总结了一下的发展过程
如果看到这篇文章,我想说恭喜你 不用,你可以先放下学习yii了 我先学在把结论发给你们节省精力 yii2的学习教程:http://www.digpage.com/recent_update.html ...
- qingku
# -*- coding:utf-8 -*- list1=[] list2=[] list3 = [] list4 = [] while True: inputs = raw_input(" ...
- iOS对键盘的处理
方法1. 使用<UITextFeildDelegate>,使用的UITextField示例 设置其Delegate为self,点击return按钮隐藏键盘.实现函数如下: - (BO ...
- 线段树 poj 1436
题目大意:给出n条垂直于x轴的线段的数据y1,y2,x,求出有几个三条线段一组的三元组并且他们兩兩能相见的.思路:对y轴建树,将x排序,然后按顺序边询问边擦入,用mark[i][j]表示j往左可以看到 ...
- jsp中的<%%>和<!%%>的区别
jsp 都是解析成.java文件` 具体代码请看 如果你写 <%int a=1;%> 生成的代码是 public class xxx_jsp { public void doProcess ...
- bzoj 1014 splay维护hash值
被后缀三人组虐了一下午,写道水题愉悦身心. 题很裸,求lcq时二分下答案就行了,写的不优美会被卡时. (写题时精神恍惚,不知不觉写了快两百行...竟然调都没调就A了...我还是继续看后缀自动机吧... ...