本文主要是介绍华农Acm:scau 9521 射了多少2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 华农Acm Scau 9521
- 题目
- 题解
- Code
华农Acm Scau 9521
题目
#9521 射了多少 II
该题有题解
时间限制:1000MS 内存限制:65535K
提交次数:81 通过次数:25题型: 编程题 语言: G++;GCC
Description大家都知道CS中的AWP可以一枪KO人家,最爽的就是没看到别人,但知道人家在墙后而一枪穿墙爆头击毙.现在把CS地图定义为一个三维空间,你的位置在(x0,y0,z0),你不知道敌人的位置(除非有间谍),因此你想尽可能多的穿过地图上的格子.但你不知道如何计算当他射向点(x1,y1,z1)(到x1,y1,z1停下来)的时候穿过了多少个格子,因此希望你这个强大的programmer帮忙输入格式输入中一共有两行第一行是3个整数表示你的位置x0,y0,z0(1000>=x0,y0,z0>=0)第二行是3个整数表示子弹停下的位置x1,y1,z1(1000>=x1,y1,z1>=0)输出格式输出只有一行穿过的格子数(碰到不算穿过任何格子,要严格穿过)输入样例
0 0 0
2 2 2输出样例
2来源 ick2 作者 a470086609
题解
寻找规律,利用上一题目的规律会发现其实是稍微容斥一下下就好了
Code
#ifdef local
#include <ctime>
#endif
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <cstdlib>
#include <vector>
#include <queue>
#include <set>
#include <map>
#define rep(i,e) for(int i=0;i<e;i++)
#define rep1(i,e) for(int i=1;i<=e;i++)
#define repx(i,x,e) for(int i=x;i<=e;i++)
#define ll long long
#define pii pair<int,int>
#define F first
#define S second
#define pb push_back
#define mp make_pair
#define mset(var,val) memset(var,val,sizeof(var))
#define IOS ios::sync_with_stdio(false);cin.tie(0)
#define scd(a) scanf("%d",&a)
#define scdd(a,b) scanf("%d%d",&a,&b)
#define scddd(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define test(a) cout<<a<<endl
#define test2(a,b) cout<<a<<" "<<b<<endl
#define test3(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
typedef unsigned long long ull;
using namespace std;
const int inf = 0x3f3f3f3f;
const int N = 1e6 + 10;
int x0;
int x1;
int y1;
int y0;
int z0;
int z1;
int gcd(int a, int b) {if(a == 0 || b ==0)return 0;if (a < b) { //保证a大于等于b,便于a%b的运算int temp;temp = a;a = b;b = temp;}while (a % b) { //如果余数不为0,就一直进行辗转相除int r = a % b; //r为a和b的余数,即r = a mod(b);a = b;b = r;r = a % b;}return b;
}void work() {cin >> x0 >> y0 >> z0 >> x1 >> y1 >> z1;int dx = abs(x0 - x1);int dy = abs(y0 - y1);int dz = abs(z0 - z1);int ans= dx+dy+dz-(gcd(dx,dy)+gcd(dx,dz)+gcd(dy,dz))+(gcd(gcd(dx,dy),dz));cout<<ans<<endl;
}
int main() {int debug = 0;
#ifdef localdebug = 1;
#endifif (debug) {freopen("in.txt", "r", stdin);freopen("out", "w", stdout);printf("debuging output:\n");}work();
}
这篇关于华农Acm:scau 9521 射了多少2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!