网站的基本组成部分有哪些内容,页面设置在哪里找,郑州市广告牌制作,中国建设项目招标网站目录
题目#xff1a;涂国旗 思路#xff1a;
题目#xff1a;重新排序 思路#xff1a; 题目#xff1a;涂国旗 思路#xff1a; 乍一看好像没啥思路#xff0c;但是我们需要涂最少的格子#xff0c;所以要都尝试一下才行#xff0c;也就是从上面开始白至少一行涂国旗 思路
题目重新排序 思路 题目涂国旗 思路 乍一看好像没啥思路但是我们需要涂最少的格子所以要都尝试一下才行也就是从上面开始白至少一行蓝若干行红至少一行。 那么其实我们看到只需要控制好两个分割线即可。上面都是白中间都是蓝最下面都是红。然后比较每种情况所需要的最少代价即可。 最好是使用一下前缀和优化一下这样答案就可以O(1)速度输出。 怎么前缀和呢我们设置w[i]表示前面i行都涂成w颜色需要的代价即可 #include iostream
#include string
using namespace std;
int n,m;string s;
inline int check(char c) //化二维前缀和为一维前缀和
{int tol0;for(int i0;im;i)if(s[i]!c)tol; return tol;
}
int main()
{cinnm;int w[n1]{0},r[n1]{0},b[n1]{0};int ans100000; //ans必须很大for(int i1;in;i){ cins;w[i]w[i-1]check(W);r[i]r[i-1]check(R);b[i]b[i-1]check(B);}for(int i1;in-1;i)for(int ji1;jn;j)ansmin(ans,w[i]b[j]-b[i]r[n]-r[j]); //根据公式遍历出最小的即可coutans;return 0;
} 题目重新排序 题意对于一个长n的数组查询m次[l,r]区间要想使所有查询和最大我们就要排个序现在就问排序后所以查询区间的总和相比原来可以增加多少 思路 我们只要关注哪个位置能重复加多少次即可当然要让更大的数来重复加最多的次数那么只需要统计有多少个位置可以各自重复加多少次。 当然暴力是过不去的。我们需要优化一下。 其实就是差分序列思想先标记都那个地方加哪个地方减然后统一前缀和求出最终效果这就是每个元素出现的次数然后减去之前的和就行了 #includebits/stdc.h
using namespace std;
typedef long long ll;
const int N 1e6 5;
int a[N];
ll cnt[N];//前缀和数组必须开long long
int diff[N];//定义差分数组diff
int n,m,l,r;
ll sum10, sum20;//原数组和新数组和
int main() {cinn;for(int i1; in; i) cina[i];cinm;while (m--) {cinlr;diff[l]; //进行差分diff[r1]--;}for (int i1; in; i) { //利用差分数组计算前缀和cnt数组cnt[i]cnt[i-1]diff[i];}for (int i1; in; i) sum1a[i]*cnt[i];sort(a1, a1n); sort(cnt1, cnt1n);for (int i1; in; i) sum2a[i]*cnt[i];cout sum2-sum1 endl;return 0;
}