2024.08.28螞蟻

失控D大白兔發表於2024-09-11

1. 小苯買東西

小苯看中了一件價值為p元的物品,他手裡有1個“打折券"和1個“立減券”。
兩種優惠券可以都用在物品上,且使用順序也是任意的。兩種優惠券分別以整數x和y的方式給出。
打折券:如果當前物品價格為p,使用後,物品價格變為:x·p/100上取整。
立減券:如果當前物品價格為P,使用後,物品價格變為:max(0,p-y)。即物品價格立減y元,但最多減到0.
小苯想知道,這件價值為p的物品最少可以花多少錢買到。

打卡題
int main() {
    int p,x,y;
    cin>>p>>x>>y;
    int res = (x*p+99)/100 - y;
    if(res<0) res=0;
    cout<<res;
    return 0;
}

2. 陣列操作

小紅拿到了一個陣列,她可以進行最多一次操作:選擇一個元素,使其加1.
小紅希望操作結束後,陣列所有元素乘積的末尾有儘可能多的0。你能幫幫她嗎?

有點程式碼量,但還是簡單
int main() {
    int n;
    cin>>n;
    vector<int> nums(n);
    for(int i=0;i<n;i++)
        cin>>nums[i];
    int res = 0;
    vector<int> cnt0(n);
    vector<int> cnt2(n);
    vector<int> cnt5(n);
    for(int i=0;i<n;i++){
        int num = nums[i];
        while(num){
            int end = num%10;
            if(end==0) cnt0[i]++;
            else{
                if(end==2) cnt2[i]++;
                if(end==5) cnt5[i]++;
                break;
            }
            num/=10;
        }
    }
    int totalcnt0 = accumulate(cnt0.begin(),cnt0.end(),0);
    int totalcnt2 = accumulate(cnt2.begin(),cnt2.end(),0);
    int totalcnt5 = accumulate(cnt5.begin(),cnt5.end(),0);
    res = totalcnt0 + min(totalcnt2,totalcnt5);
    for(int i=0;i<n;i++){//嘗試修改
        int curcnt0 = totalcnt0-cnt0[i];
        int curcnt2 = totalcnt2-cnt2[i];
        int curcnt5 = totalcnt5-cnt5[i];
        int num = nums[i]+1;
        while(num){
            int end = num%10;
            if(end==0) curcnt0++;
            else{
                if(end==2) curcnt2++;
                if(end==5) curcnt5++;
                break;
            }
            num/=10;
        }
        res = max(res,curcnt0+min(curcnt2,curcnt5));
    }
    cout<<res;
    return 0;
}

3. 小苯爬山

小苯來到了一座山脈,山脈中有n座山,每座山都有一個高度。
有些山之間有路徑連線,例如如果a號山和b號山之間有路徑,如果小苯想的話,他可以從a山走到b山,同樣的,也可以從b山走到a山。
但小苯很懶,如果兩座山之間的高度差大於一定的值k,他就不會走這條路(無論是上山還是下山)。
形式化的即:|ha-hb|>k的話,小苯便不會走這條路。現在他提出了q次詢問,每次詢問他都會給出一組(a,b,k),
他想知道,如果他從a山出發,高度差大於k的路徑他不走,能否找到一條路使得他能走到b山呢,請你幫幫他吧。

連通域標號


相關文章