CF231D题解
CF231D题解
题意
给你一个长方体的长,宽,高,再给你一个观测坐标和每一面的上面的数字,问在这个观测点看到的数字之和是多少?
输入顺序
- 观测的坐标(x,y,z)。
- 长方体的长,宽,高。(x 轴边长,y 轴边长,z 轴边长)
- 长方体每个面上的数(ZOX,ZOX 的对面,XOY,XOY 的对面,YOZ,YOZ 的对面)
(上述中的坐标轴参考下图)
思路
本题思路很简单。其实就是一面一面的判断是否可以看到这面的数字,看得到 ans(答案)就加一。
那接下来就要想该如何判断是否可以看到某一面。见下:
- 要是 x 轴坐标小于 0,则看到 YOZ 面上的数字。
- 要是 x 轴坐标大于 x 轴的边长,则看到 YOZ 的对面上的数字。
其余的以此类推,那这题就解出来了!
总结
- 搞清楚输入顺序。
- 搞清楚坐标轴。
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int cnt[10],ans;//ans为答案(你看到的数字之和),cnt为每一面上的数。
int x,y,z;//你所处的坐标。
int s1,s2,s3;//长,宽,高。
int main(){
scanf("%d %d %d %d %d %d",&x,&y,&z,&s1,&s2,&s3);
for(int i=1; i<=6; i++) scanf("%d",&cnt[i]);
if(y<0) ans+=cnt[1];//看到了ZOX。
if(y>s2) ans+=cnt[2];//看到了ZOX的对面。
if(z<0) ans+=cnt[3];//看到了XOY。
if(z>s3) ans+=cnt[4];//看到了XOY的对面。
if(x<0) ans+=cnt[5];//看到了YOZ。
if(x>s1) ans+=cnt[6];//看到了YOZ的对面。
printf("%d",ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现