D.Deleting Divisors(博弈)

题目大意:Alice和Bob玩游戏,Alice先手,每一次他们都要做操作就是将数减去它的因子(他小于自身且不为1的因子)
轮到谁不能做这个操作谁就输了。所以他们会尽力给对方留下质数

链接: https://codeforces.com/problemset/problem/1537/D.

#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
typedef long long ll;
typedef unsigned long long ull;
#define speed(x) ios::sync_with_stdio(false), cin.tie(x), cout.tie(x)
#define bug(x) cout << #x << " == " << x << '\n'
const ll MAX_N =1e6+10;

int main()
{
    int t;
    scanf("%d" ,&t);
    while(t--)
    {
        ll A;
        scanf("%lld",&A);
        if(A%2==1)
        ///设第一轮的数为A1,如果alice的先手是奇数啊A1的话两种可能
        ///①n为质数,这样子alice一次都拿不了数啦所以Bob赢啦
        ///②因为A1是奇数,所以他的因子也都是奇数A1=B1*B2,alice只能拿奇数B2
        ///所以轮到Bob的时候 该数是偶数,A2=(B1-1)*B2;是一个奇数×偶数的形式
        ///下面证明了谁先手拿到奇数×偶数的偶数谁必胜
        {
            printf("Bob\n");
        }
        else
        {
            int num=0;
            while(A%2==0)
            {
                A/=2;
                num++;
            }
            if(A!=1)
            ///说明A1是一个奇数×偶数的数(即存在奇数因子)
            ///alice每次拿偶数,轮到Bob的时候 该数是奇数
            ///而且不存在Bob拿奇数后,剩下的数为2的情况
            ///e.g:设Bob拿走的奇数为t 2+t=t*k 且k为奇数 ——> 2/t+1==k t只有可能为1,而题目规定拿的数要大于1
            ///所以谁先手拿到奇数×偶数的数谁必胜
            {
                printf("Alice\n");
            }
            else///A1满足2^num=A1
            ///所以alice可以拿2~2^(num-1)之间
            ///①Alice拿2^k(1<=k<num-1)的数,剩下的数为2^n-2^k=2^k*(2^(n-k)-1)为奇数×偶数的偶数这样子Bob必胜了
            ///②Alice拿2^(num-1),同理Bob拿2^(num-2)....相当于每次给这个数/2
            ///可操作次数就是num-1,当num为奇数的时候可操作数为偶数,所以Alice拿到2输掉 反正Bob输掉
            {
                if(num%2==1)
                {
                     printf("Bob\n");
                }
                else
                {
                    printf("Alice\n");
                }
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SELECT PIS.SHOW_FLT_DETAIL AS SHOW_FLT_DETAIL -- new , PIS.SHOW_AWB_DETAIL AS SHOW_AWB_DETAIL -- new , PIS.DISPLAY_AIRLINE_CODE AS CARRIER_CODE , DECODE(PIS.REVERT_FLOW,'N',PIS.FLOW_TYPE,DECODE(PIS.FLOW_TYPE,'I','E','I')) AS FLOW_TYPE , PIS.SHIP_TO_LOCATION AS SHIP_TO_LOCATION , PIS.INVOICE_SEQUENCE AS INVOICE_SEQUENCE , PFT.FLIGHT_DATE AS FLIGHT_DATE , PFT.FLIGHT_CARRIER_CODE AS FLIGHT_CARRIER_CODE , PFT.FLIGHT_SERIAL_NUMBER AS FLIGHT_SERIAL_NUMBER , PFT.FLOW_TYPE AS AIRCRAFT_FLOW , FAST.AIRCRAFT_SERVICE_TYPE AS AIRCRAFT_SERVICE_TYPE , PPT.AWB_NUMBER AS AWB_NUMBER , PPT.WEIGHT AS WEIGHT , PPT.CARGO_HANDLING_OPERATOR AS CARGO_HANDLING_OPERATOR , PPT.SHIPMENT_PACKING_TYPE AS SHIPMENT_PACKING_TYPE , PPT.SHIPMENT_FLOW_TYPE AS SHIPMENT_FLOW_TYPE , PPT.SHIPMENT_BUILD_TYPE AS SHIPMENT_BUILD_TYPE , PPT.SHIPMENT_CARGO_TYPE AS SHIPMENT_CARGO_TYPE , PPT.REVENUE_TYPE AS REVENUE_TYPE , PFT.JV_FLIGHT_CARRIER_CODE AS JV_FLIGHT_CARRIER_CODE , PPT.PORT_TONNAGE_UID AS PORT_TONNAGE_UID , PPT.AWB_UID AS AWB_UID , PIS.INVOICE_SEPARATION_UID AS INVOICE_SEPARATION_UID , PFT.FLIGHT_TONNAGE_UID AS FLIGHT_TONNAGE_UID FROM PN_FLT_TONNAGES PFT , FZ_AIRLINES FA , PN_TONNAGE_FLT_PORTS PTFP , PN_PORT_TONNAGES PPT , FF_AIRCRAFT_SERVICE_TYPES FAST , SR_PN_INVOICE_SEPARATIONS PIS --new , SR_PN_INVOICE_SEP_DETAILS PISD--new , SR_PN_INV_SEP_PORT_TONNAGES PISPT --new WHERE PFT.FLIGHT_OPERATION_DATE >= trunc( CASE :rundate WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN ADD_MONTHS(SYSDATE,-1) ELSE ADD_MONTHS(:rundate,-1) END, 'MON') AND PFT.FLIGHT_OPERATION_DATE < trunc( CASE :rundate WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN TRUNC(SYSDATE) ELSE TRUNC(:rundate) END, 'MON') AND PFT.TYPE IN ('C', 'F') AND PFT.RECORD_TYPE = 'M' AND (PFT.TERMINAL_OPERATOR NOT IN ('X', 'A') OR (PFT.TERMINAL_OPERATOR <> 'X' AND FA.CARRIER_CODE IN (SELECT * FROM SPECIAL_HANDLING_AIRLINE) AND PPT.REVENUE_TYPE IN (SELECT * FROM SPECIAL_REVENUE_TYPE) AND PPT.SHIPMENT_FLOW_TYPE IN (SELECT * FROM SPECIAL_SHIPMENT_FLOW_TYPE) AND PFT.FLIGHT_OPERATION_DATE >= (select EFF_DATE from SPECIAL_HANDLING_EFF_DATE) )) AND PFT.DELETING_DATETIME IS NULL AND FA.AIRLINE_UID = PFT.AIRLINE_UID AND FA.DELETING_DATETIME IS NULL AND PTFP.FLIGHT_TONNAGE_UID = PFT.FLIGHT_TONNAGE_UID AND PTFP.RECORD_TYPE = 'M' AND PTFP.DELETING_DATETIME IS NULL AND PPT.TONNAGE_FLIGHT_PORT_UID (+)= PTFP.TONNAGE_FLIGHT_PORT_UID AND PPT.RECORD_TYPE (+)= 'M' AND PPT.DISCREPANCY_TYPE (+)= 'NONE' AND PPT.ADJUSTMENT_INC_FLAG (+)= 'Y' AND PPT.DELETING_DATETIME (+) IS NULL AND FAST.AIRCRAFT_SERVICE_TYPE_UID = PFT.AIRCRAFT_SERVICE_TYPE_UID AND FAST.DELETING_DATETIME IS NULL AND PIS.TEMPORAL_NAME = TO_CHAR((CASE :rundate --new WHEN TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN TRUNC(SYSDATE) ELSE TRUNC(:rundate) END ), 'YYYYMM') || '00' AND PIS.INVOICE_SEPARATION_UID = PISD.INVOICE_SEPARATION_UID --new AND PISD.INVOICE_SEP_DETAIL_UID = PISPT.INVOICE_SEP_DETAIL_UID --new AND PISPT.PORT_TONNAGE_UID = PPT.PORT_TONNAGE_UID --new AND PIS.PRINT_SUPPORTING_DOC = 'Y';上面是oracle的写法,请转成spark SQL的写法。
最新发布
06-02
以下是转换为 Spark SQL 查询的代码: ``` SELECT PIS.SHOW_FLT_DETAIL AS SHOW_FLT_DETAIL, PIS.SHOW_AWB_DETAIL AS SHOW_AWB_DETAIL, PIS.DISPLAY_AIRLINE_CODE AS CARRIER_CODE, CASE WHEN PIS.REVERT_FLOW = 'N' THEN PIS.FLOW_TYPE ELSE CASE WHEN PIS.FLOW_TYPE = 'I' THEN 'E' ELSE 'I' END END AS FLOW_TYPE, PIS.SHIP_TO_LOCATION AS SHIP_TO_LOCATION, PIS.INVOICE_SEQUENCE AS INVOICE_SEQUENCE, PFT.FLIGHT_DATE AS FLIGHT_DATE, PFT.FLIGHT_CARRIER_CODE AS FLIGHT_CARRIER_CODE, PFT.FLIGHT_SERIAL_NUMBER AS FLIGHT_SERIAL_NUMBER, PFT.FLOW_TYPE AS AIRCRAFT_FLOW, FAST.AIRCRAFT_SERVICE_TYPE AS AIRCRAFT_SERVICE_TYPE, PPT.AWB_NUMBER AS AWB_NUMBER, PPT.WEIGHT AS WEIGHT, PPT.CARGO_HANDLING_OPERATOR AS CARGO_HANDLING_OPERATOR, PPT.SHIPMENT_PACKING_TYPE AS SHIPMENT_PACKING_TYPE, PPT.SHIPMENT_FLOW_TYPE AS SHIPMENT_FLOW_TYPE, PPT.SHIPMENT_BUILD_TYPE AS SHIPMENT_BUILD_TYPE, PPT.SHIPMENT_CARGO_TYPE AS SHIPMENT_CARGO_TYPE, PPT.REVENUE_TYPE AS REVENUE_TYPE, PFT.JV_FLIGHT_CARRIER_CODE AS JV_FLIGHT_CARRIER_CODE, PPT.PORT_TONNAGE_UID AS PORT_TONNAGE_UID, PPT.AWB_UID AS AWB_UID, PIS.INVOICE_SEPARATION_UID AS INVOICE_SEPARATION_UID, PFT.FLIGHT_TONNAGE_UID AS FLIGHT_TONNAGE_UID FROM PN_FLT_TONNAGES PFT JOIN FZ_AIRLINES FA ON FA.AIRLINE_UID = PFT.AIRLINE_UID AND FA.DELETING_DATETIME IS NULL JOIN PN_TONNAGE_FLT_PORTS PTFP ON PTFP.FLIGHT_TONNAGE_UID = PFT.FLIGHT_TONNAGE_UID AND PTFP.RECORD_TYPE = 'M' AND PTFP.DELETING_DATETIME IS NULL LEFT JOIN PN_PORT_TONNAGES PPT ON PPT.TONNAGE_FLIGHT_PORT_UID = PTFP.TONNAGE_FLIGHT_PORT_UID AND PPT.RECORD_TYPE = 'M' AND PPT.DISCREPANCY_TYPE = 'NONE' AND PPT.ADJUSTMENT_INC_FLAG = 'Y' AND PPT.DELETING_DATETIME IS NULL JOIN FF_AIRCRAFT_SERVICE_TYPES FAST ON FAST.AIRCRAFT_SERVICE_TYPE_UID = PFT.AIRCRAFT_SERVICE_TYPE_UID AND FAST.DELETING_DATETIME IS NULL JOIN SR_PN_INVOICE_SEPARATIONS PIS ON PIS.TEMPORAL_NAME = CONCAT(YEAR(:rundate), RIGHT(CONCAT('0', MONTH(:rundate)), 2), '00') AND PIS.INVOICE_SEPARATION_UID = PISD.INVOICE_SEPARATION_UID AND PIS.PRINT_SUPPORTING_DOC = 'Y' JOIN SR_PN_INVOICE_SEP_DETAILS PISD ON PISD.INVOICE_SEP_DETAIL_UID = PISPT.INVOICE_SEP_DETAIL_UID JOIN SR_PN_INV_SEP_PORT_TONNAGES PISPT ON PISPT.PORT_TONNAGE_UID = PPT.PORT_TONNAGE_UID WHERE PFT.FLIGHT_OPERATION_DATE >= trunc(CASE WHEN :rundate = TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN ADD_MONTHS(SYSDATE, -1) ELSE ADD_MONTHS(:rundate, -1) END, 'MON') AND PFT.FLIGHT_OPERATION_DATE < trunc(CASE WHEN :rundate = TO_DATE('01/01/1900', 'DD/MM/YYYY') THEN TRUNC(SYSDATE) ELSE TRUNC(:rundate) END, 'MON') AND PFT.TYPE IN ('C', 'F') AND PFT.RECORD_TYPE = 'M' AND ( PFT.TERMINAL_OPERATOR NOT IN ('X', 'A') OR ( PFT.TERMINAL_OPERATOR <> 'X' AND FA.CARRIER_CODE IN (SELECT * FROM SPECIAL_HANDLING_AIRLINE) AND PPT.REVENUE_TYPE IN (SELECT * FROM SPECIAL_REVENUE_TYPE) AND PPT.SHIPMENT_FLOW_TYPE IN (SELECT * FROM SPECIAL_SHIPMENT_FLOW_TYPE) AND PFT.FLIGHT_OPERATION_DATE >= (SELECT EFF_DATE FROM SPECIAL_HANDLING_EFF_DATE) ) ) AND PFT.DELETING_DATETIME IS NULL; ``` 请注意,需要将 `TRUNC` 和 `CONCAT` 函数替换为 Spark SQL 中的相应函数,并使用 `JOIN` 语句替换 `LEFT JOIN` 语句。还需要更改零散的子查询,以便在 Spark SQL 中使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值