Wannafly模擬賽5 A Split

題目鏈接:https://www.nowcoder.com/acm/contest/18/A

時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 131072K,其他語言262144K
64bit IO Format: %lld
題目描述
你有一個大小爲S的Jabby,每次你可以從你已有的Jabby中選擇一個大小不爲1的Jabby,設他的大小爲Q,然後把它分裂成a和Q-a,其中1 <= a < Q, 這樣你獲得的收益是a∗(Q−a)給定S, M,求最少分裂幾次才能得到至少M的收益
輸入描述:
第一行兩個正整數S, M
輸出描述:
輸出一個非負整數表示答案
如果無法達到M的收益輸出−1
示例1
輸入

765 271828
輸出

14
備註:
對於30%的數據,有S ≤ 10
對於100%的數據,有2 ≤ S ≤ 1000,1 ≤ M ≤ 10^9

解析:一開始一直想錯了,以爲是一半的一半。。。其實正解應該是均分,比如S = 8, 第一種思路:2*2+4*4 = 20 ,第二種思路: 2*6+3*3 = 21,顯然第二種更優

代碼:

#include<bits/stdc++.h>
using namespace std;

typedef long long LL;

int main()
{
    int s, m;
    scanf("%d%d", &s, &m);
    int ans = -1;
    for(int i = 2; i < s; i++)
    {
        int cnt = s % i;
        int num = s / i;
        int t1, t2;
        t1 = t2 = num;
        LL sum = 0;
        if(cnt >= 1) cnt--, t1++;
        if(cnt >= 1) cnt--, t2++;
        sum += t1*t2;
        for(int j = 3; j <= i; j++)
        {
            t1 += t2;
            t2 = num;
            if(cnt >= 1) cnt--, t2++;
            sum += t1*t2;
        }
        if(sum >= m)
        {
            ans = i - 1;
            break;
        }
    }
    printf("%d\n", ans);
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章