📜  凯捷科技挑战赛 2019 |第二轮和第三轮问题

📅  最后修改于: 2021-11-18 02:34:01             🧑  作者: Mango

第二轮:

军情六处的任务:去年,美国最安全、最重要的防御网络发生了一次黑客攻击。黑客从他们的网络下载了重要的国防相关机密文件和文件,然后他们飞往迪拜,将文件交付给一些与恐怖主义有关的机构。调查特工军情六处发现,双方在哈利法塔酒店房间内安排了一次会议。军情六处机构组建了一个团队,并派出他们最好的特工来恢复文件和抓捕黑客。

到达迪拜后,特工到酒店登记入住,并通过入侵监控摄像头找到了进入房间的方法,但本应举行会议的楼层安全性非常高。于是他们决定走另一条路,借助电磁排斥力在酒店大楼的墙壁上行走。他们有一个具有这种技术的小工具,可以帮助他们在酒店的墙上行走。

酒店的外墙上贴着各种金属方形薄片。一位专业经纪人鲍勃决定在墙上行走,他的同事引导他并指示他必须在哪张方格纸上行走。 Bob 的同事向他发送了一组说明,以帮助确定他必须站在哪张纸上。一组指令是一个由字母 ‘L’, ‘R’, ‘U’, ‘D’ 组成的字符串。

为简单起见,我们假设 Bob 停留在大墙上的 (0, 0) 点。他始终如一地执行同事发送的所有指示。让我们假设现在他停留在 (X, Y) 点,然后根据当前指令是什么,他朝一个方向移动:

‘L’: from (X,Y) moves to point (X,Y-1)
‘R’: from (X,Y) moves to point (X,Y+1)
‘U’: from (X,Y) moves to point (X-1,Y)
'D' : from (X,Y) moves to point (X+1,Y)

最初,所有点都是好的,并且任何点或片材上都没有裂纹。但是如果 Bob 已经在任何时候访问过某个点,那么下次这个点就会破裂。每次鲍勃在裂纹点上迈出一步,他都会在墙上滑倒。

给你一个字符串S,它告诉 Bob 的指令集。你的工作是计算鲍勃从他的位置滑倒的次数。

输入格式:

输入 1:它将是一个字符串,它告诉字符串S,它表示 Bob 的指令集。

Constraints
1 ≤ S ≤ 105

输出格式:它将是一个整数,表示鲍勃从他的位置滑倒了多少次

示例测试用例 1

Input
RRULDL
Output
2
Here is my solution:
C++
#include
using namespace std;
int main()
{
    /*input the string*/
    string str;
    cin>>str;
    /* best data structure for this problem is 
       unordered map , by using this data structure
       we can detect every repeating steps*/
    unordered_map mp;
    int res=0;
    int x=0,y=0;
    string ss;
    mp["0,0"]=1;
    /*traverse the whole string */
    for(int i=0;i


C++
#include
#define ll long int
using namespace std;
  
//calculate distance in 2D for two grid
/* For 2D jail */
int TwoD(ll x1,ll y1, ll x2, ll y2,ll distance )          
{
  
    ll d=0;
    if(x1==x2){
        d=abs(y1-y2);
    }
    else if(y1==y2){
        d=abs(x1-x2);
    }
    else{
        return 0;
    }
  
    if(d<=distance){
        return 1;
    }
    else{
        return 0;
    }
  
  
}
  
  
//calculate distance in 3D for two  grid
 /* For 3D jail*/
int  ThreeD(ll x1, ll y1,ll z1, ll x2,ll y2,ll z2,ll distance)                    
{
    ll d=0;
    if(x1==x2&&y1==y2){
        d=abs(z1-z2);
    }
    else if(y1==y2&&z1==z2){
        d=abs(x1-x2);
    }
    else if(z1==z2&&x1==x2){
        d=abs(y1-y2);
    }
    else{
        return 0;
    }
  
    if(d<=distance){
        return 1;
    }
    else{
        return 0;
    }
  
}
  
  
//driver program
int main()
{
    ll p,n,d,s;
  
    ll res=0;
    cin>>p;
    cin>>n;
    cin>>d;
    cin>>s;
    cin>>n;
    ll distance=d ;
    int inp[n],inp1[n],inp2[n];
    ll x1,x2,y1,y2,z1,z2;
  
    if(p==1)
    {
        for(int i=0;i>inp[i];
  
  
        }
    }
    else if(p==2) {
        for (int i = 0; i < n; i++) {
            scanf("%d,%d", &inp[i], &inp1[i]);
        }
    }
    else {
        for (int i = 0; i < n; i++) {
            scanf("%d,%d,%d", &inp[i], &inp1[i], &inp2[i]);
  
        }
    }
  
  
  
    if(p==1)
    {
        sort(inp,inp+n);
        for(int i=0;i


鲍勃路线由以下几点组成:

0,0 ---> 0,1 ---> 0,2 ----> -1,2 ---> -1,1 ----> 0,1(cracks) ----> 0,0 (cracks)

因此,Bob 再次访问的地方将有 2 个点,因此他滑了 2 步。

第 3 轮:

最疯狂的监狱和监狱:一些监狱以暴力和像对待动物一样对待囚犯而闻名,导致维持和平的不人道和不道德策略。挪威有一座监狱,哈尔登经常被形容为和平和放松。囚犯们享受美食、热咖啡和配备电视、迷你冰箱、私人浴室和周围森林美景的牢房。

挪威政府新建了 3 座监狱,每座监狱都有自己独特的设计。每个监狱由排列成一维、二维或三维网格的牢房组成。狱卒可以将 N 个囚犯塞进牢房。

两个牢房之间的距离是囚犯从另一个牢房到达一个牢房所需的最小移动次数。在一个动作中,囚犯可以进入相邻的牢房之一。

如果两个囚犯的牢房之间的距离最大为 D,则两个囚犯可以互相听到对方的声音。您的任务是计算有多少对囚犯使一个囚犯可以听到另一个囚犯的声音。

示例:假设监狱遗嘱是 3 维类型,则它如下所示

输入格式:

  • 输入1:表示监狱类型的整数P

  • 输入 2:它将是表示囚犯人数 N 的整数

  • 输入 3:这将是一个整数,表示两个囚犯可以听到对方的最大距离 D

  • 输入4:表示监狱S大小的整数; (允许出现在输入中的最大坐标):

    当 P=1 时,S 最多为 75000000。

    当 P=2 时,S 最多为 75000。

    当 P=3 时,S 最多为 75。

  • 输入 5:它将是一个字符串数组,它告诉每个囚犯的坐标。数组格式如下:

    第一行会告诉总行数即囚犯总数N

以下 N 行中的每一行都包含由单个逗号分隔的 P 个整数——一个囚犯的坐标。每个坐标将介于 1 和 S(含)之间。同一个牢房可以有不止一名囚犯。如果 P 是 1,则没有逗号——每行只有一个值。

约束

1 ≤ P ≤ 3
1 ≤ N ≤ 100000
1 ≤ D ≤ 100000000

输出格式:它将是单个整数,可以听到彼此的囚犯对的数量。

示例测试用例 1:

Input
3
8
10
20
8
10,10,10
10,10,20
10,20,10
10,20,20
20,10,10
20,10,20
20,20,10
20,20,20
Output
12

C++中的解决方案:

C++

#include
#define ll long int
using namespace std;
  
//calculate distance in 2D for two grid
/* For 2D jail */
int TwoD(ll x1,ll y1, ll x2, ll y2,ll distance )          
{
  
    ll d=0;
    if(x1==x2){
        d=abs(y1-y2);
    }
    else if(y1==y2){
        d=abs(x1-x2);
    }
    else{
        return 0;
    }
  
    if(d<=distance){
        return 1;
    }
    else{
        return 0;
    }
  
  
}
  
  
//calculate distance in 3D for two  grid
 /* For 3D jail*/
int  ThreeD(ll x1, ll y1,ll z1, ll x2,ll y2,ll z2,ll distance)                    
{
    ll d=0;
    if(x1==x2&&y1==y2){
        d=abs(z1-z2);
    }
    else if(y1==y2&&z1==z2){
        d=abs(x1-x2);
    }
    else if(z1==z2&&x1==x2){
        d=abs(y1-y2);
    }
    else{
        return 0;
    }
  
    if(d<=distance){
        return 1;
    }
    else{
        return 0;
    }
  
}
  
  
//driver program
int main()
{
    ll p,n,d,s;
  
    ll res=0;
    cin>>p;
    cin>>n;
    cin>>d;
    cin>>s;
    cin>>n;
    ll distance=d ;
    int inp[n],inp1[n],inp2[n];
    ll x1,x2,y1,y2,z1,z2;
  
    if(p==1)
    {
        for(int i=0;i>inp[i];
  
  
        }
    }
    else if(p==2) {
        for (int i = 0; i < n; i++) {
            scanf("%d,%d", &inp[i], &inp1[i]);
        }
    }
    else {
        for (int i = 0; i < n; i++) {
            scanf("%d,%d,%d", &inp[i], &inp1[i], &inp2[i]);
  
        }
    }
  
  
  
    if(p==1)
    {
        sort(inp,inp+n);
        for(int i=0;i