题解:P11499 [ROIR 2019 Day 2] 故障火星车

· · 题解

唯一做出来的 /qd

根据贪心的策略肯定是要尽量用 Y。如果再用 Y 会爆炸时再用 X 改变奇偶性挺过去。

容易想到根据 c 的奇偶性分情况考虑,因为如果 c \bmod 2=0,只要电量是奇数就不可能有问题。

而剩下的情况也是容易找到规律的。难点在于分讨和考虑边界。

那么就做完了。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b,c;
    cin>>a>>b>>c;
    if(b/c-a/c==0){
        cout<<(b-a)/2+(b-a)%2;
    }else if(c%2==0){
        if((b-a)%2==0){
            if(b%2==0){
                cout<<(b-a)/2+1;
            }else{
                cout<<(b-a)/2;
            }
        }else{
            cout<<(b-a)/2+1;
        }
    }else{
        int x=a-a%c;
        b-=x;a-=x;
        int ans=(c-a)/2+1;
        a=1;
        b-=c;
        ans+=(b/c)*((c-1)/2+1);
        b%=c;
        cout<<ans+(b-a)/2+(b-a)%2;
    }
    return 0;
}

代码极度丑陋 /cf