2024.09.14 京東

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

1. 切割序列乘積

有一個序列a1,a2,...,an,牛牛將對這個序列切一刀,使其分為兩個不相交的非空子序列,一個序列為a1,a2,...ap,
另一個序列為ap+1,...,an。牛牛切割的代價為兩個字序列元素和的乘積,牛牛想知道切割代價最小是多少?

遍歷即可
int main(int argc, char *argv[]) {
    int n;
    cin>>n;
    vector<int> nums(n);
    int res = INT_MAX;
    int sum = 0;
    for(int i=0;i<n;i++){
        cin>>nums[i];
        sum+=nums[i];
    }
    int cursum = 0;
    for(int i=0;i<n-1;i++){
        cursum+=nums[i];
        res = min(res,cursum*(sum-cursum));
    }
    cout<<res;
    return 0;
}

2. 字串排序

給定n個字串,並且給定一個長為26的字串rank,代表每個字母處的位置,請你根據這個rank對這n個字串進行排序。

自定義排序
int main(int argc, char *argv[]) {
    string rank;
    cin>>rank;
    unordered_map<char,int> m;
    for(int i=0;i<rank.size();i++)
        m[rank[i]] = i;
    int n;
    cin>>n;
    vector<string> strs(n);
    for(int i=0;i<n;i++)
        cin>>strs[i];
    sort(strs.begin(),strs.end(),[&](auto a,auto b){
        int len = min(a.size(),b.size());
        for(int i=0;i<len;i++){
            if(a[i]==b[i]) continue;
            return m[a[i]]<m[b[i]];
        }
        return a.size()<b.size();
    });
    for(auto s:strs)
        cout<<s<<endl;
    return 0;
}

3. 牛牛國王

給定n個城市的位置,求最早連通時間,這裡用最小生成樹演算法,因為是邊稠密,採用kruskal演算法,以及使用並查集

相關文章