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算法,以及使用并查集
实际上,对于每个城市,计算到其他城市最小值,然后这些最小值的最大值就是结果