码迷,mamicode.com
首页 > 其他好文 > 详细

comet oj 7

时间:2019-07-15 09:29:19      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:简洁   顺序   problem   names   数字   依次   thml   tle   scan   

A 签到题

题目描述

 

多次询问,每次询问给一个值域范围 [l,r][l,r],要回答下列四个问题:

从这个范围内选出两个整数(两个数可相同),

(1) 这两个数的最小公倍数最大是多少?

(2) 这两个数的最小公倍数最小是多少?

(3) 这两个数的最大公约数最大是多少?

(4) 这两个数的最大公约数最小是多少?

 

 
 

输入描述

 

第一行一个数 tt 表示数据组数 (t = 10^4t=104)。

之后 tt 行,每行两个数 l, rl,r 表示一次询问(1 \le l \le r \le 10^91lr109)。

 

输出描述

 

对于每个询问,输出一行四个数依次表示这四个问题的答案。(四个数间恰以一个空白字符隔开,每行行末不能有多余的空白字符。)

 

样例输入 1 

2
2 3
1 2

样例输出 1

6 2 3 1
2 1 2 1

提示

对于值域范围 [2,3][2,3]:

lcm( 2 , 3 ) = 6lcm(2,3)=6 是最大的最小公倍数

lcm( 2 , 2 ) = 2lcm(2,2)=2 是最小的最小公倍数

gcd( 3 , 3 ) = 3gcd(3,3)=3 是最大的最大公约数

gcd( 2 , 3 ) = 1gcd(2,3)=1 是最小的最大公约数

 

对于值域范围 [1,2][1,2]:

lcm( 1 , 2 ) = 2lcm(1,2)=2 是最大的最小公倍数

lcm( 1 , 1 ) = 1lcm(1,1)=1 是最小的最小公倍数

gcd( 2 , 2 ) = 2gcd(2,2)=2 是最大的最大公约数

gcd( 1 , 2 ) = 1gcd(1,2)=1 是最小的最大公约数

 
  针对四个问题,值域范围[l,r]内最大的最小公倍数是r*(r-1);最小的最小公倍数是(l,l)取l。最大的最大公约数是(r,r)取r,最小的最大公约数为(l,l+1)取1。注意数据范围 ,爆int了,要开longlong;还有特殊情况,[l,l],此时四个问题的答案都是l。代码如下:
#include <iostream>
#define LL long long
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    LL l,r;
    while(n--)
    {
        cin>>l>>r;
        if(l==r){
            cout<<l;
            printf(" ");
            cout<<l;
            printf(" ");
            cout<<l;
            printf(" ");
            cout<<l;
        }
        else for(int i=0;i<4;i++)
        {
            if(i!=0)printf(" ");
            if(i==0)cout<<r*(r-1);
            if(i==1)cout<<l;
            if(i==2)cout<<r;
            if(i==3)printf("1");
        }
        printf("\n");
    }
    return 0;
}

B 麻将题

 

面麻的时候经常大家已经坐好了,然后抽了每个人对应的自风(也就是坐的位置),每次可以交换相邻的两个人,问让这四个人逆时针顺序依次为  东 南 西 北  最少需要交换几次。

 


 

简洁题意:可以理解为有一个长度为 44 的环,上面的元素构成一个长度为 44 的排列,每次可以交换环上相邻两个位置,问至少交换多少次,使得这个环中值为 11 的位置逆时针方向的下一个位置是值为 22 的位置,再下一个位置是值为 33 的位置,再下一个位置是值为 44 的位置(也可能不用交换就满足条件,此时答案就是 00)。

(简洁题意中,可想像成数字 1,2,3,41,2,3,4 是对应到东南西北)

 

 
 

输入描述

 

一行四个数,代表逆时针顺序给出环上的元素,保证是一个 1 \sim 414 的排列。

 

输出描述

 

输出一行一个数表示最小交换次数。

 

样例输入 1 

3 1 2 4

样例输出 1

1

提示

样例解释:交换第一个数和第四个数之后顺序就是 4,1,2,34,1,2,3 了,满足题目要求顺序(11 的逆时钟方向下个数是 22,再下个数是 33,再下个数是 44)。

 

  思路:总共就4!种排列方式,很容易知道交换几次可以使之按顺序排列。暴力破解。代码如下:

#include <stdio.h>
int main()
{
    int a,b,c,d;
    scanf("%d %d %d %d",&a,&b,&c,&d);
    int e=0,f=1,g=2;
    if(a==4&&b==1&&c==2&&d==3)printf("%d\n",e);
    else if(a==3&&b==4&&c==1&&d==2)printf("%d\n",e);
    else if(a==2&&b==3&&c==4&&d==1)printf("%d\n",e);
    else if(a==1&&b==2&&c==3&&d==4)printf("%d\n",e);
    else if(a==1&&b==4&&c==3&&d==2)printf("%d\n",g);
    else if(a==2&&b==1&&c==4&&d==3)printf("%d\n",g);
    else if(a==3&&b==2&&c==1&&d==4)printf("%d\n",g);
    else if(a==4&&b==3&&c==2&&d==1)printf("%d\n",g);
    else printf("%d\n",f);
    return 0;
}

 

comet oj 7

标签:简洁   顺序   problem   names   数字   依次   thml   tle   scan   

原文地址:https://www.cnblogs.com/whocarethat/p/11186784.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!