网站制作 网站建设,施工企业春联,小程序可以用手机网站吗,网站改版重新备案这次比赛是我最顺利的一次比赛#xff0c;也是成功在中途打进前1500#xff0c;写完第三道题的时候也是保持在1600左右#xff0c;但是后面就啥都不会了#xff0c;还吃了点罚时#xff0c;虽说如此也算是看到进步了#xff0c;D题学长说很简单#xff0c;但是我当时分析…这次比赛是我最顺利的一次比赛也是成功在中途打进前1500写完第三道题的时候也是保持在1600左右但是后面就啥都不会了还吃了点罚时虽说如此也算是看到进步了D题学长说很简单但是我当时分析错了出了一点小问题不然最后也能定格在2000左右下次加油。
A. Alice and Books 题意就是说给你n本书让你从中间分开阅读边编号最大的那本书然后问你最多能读多少页这个很简单最后一本书肯定是要读的我们只需要遍历从1到~n-1本书找到那本书页数最多然后加起来就OK了
#includebits/stdc.h
using namespace std;
#define int long longint t;
int n;
int a[105];
int maxn0;
signed main()
{cint;while(t--){maxn0;cinn;for(int i1;in;i){cina[i];}for(int i1;in-1;i){maxnmax(maxn,a[i]);}coutmaxna[n]\n;}return 0;
} B. New Bakery 题意就是说给你n个面包每个面包有两种卖价一个是a元一个是b元b元的计算是
b-i1也就是说越往后卖b价越低
思路既然b价格越来越低那么等b的价格和a一样的时候就按a的价格卖即可因此我们一开始做出判断如果ab那就全按a的价格来卖如果ab那么等b的价格低到和a一样的时候就按a元来卖就有最大价值
ps同时要注意 b是否真的会低到a的价格
#includebits/stdc.h
using namespace std;
#define int long long
int t;
int n;
int a,b;
signed main()
{cint;while(t--){cinnab;if(ab){couta*n\n;}else{int sum0;int flagb-a;if(nflag){sum(a1b)*(b-a)/2(n-flag)*a;}else{sum(bb-n1)*n/2;}coutsum\n;}}return 0;
} C. Manhattan Permutations 题意就是给你一个数组数组的数值是1~n然后问你其中产生的曼哈顿值是否能达到k
思路我们首先要判断哪些情况下不会达到首先就是因为你是交换产生的曼哈顿值曼哈顿值一但产生就必然是偶数而不可能是奇数当k为奇数时直接输出NO即可
其次就是当整个序列反转的时候产生最大的曼哈顿值因而假如我们的k要是大于反转之后的曼哈顿值也要输出NO
然后就是很简单的根据k去进行翻转就好我们要对k的值进行判断我们要从第一个数开始交换然后每次交换都是要根据k值的大小去交换的这个地方不会的直接私我吧文学功底有限实在太难纯文本将清楚了
#includebits/stdc.h
using namespace std;
#define int long longint t;
int n,k;
int maxn;//用于计算最大差值
int a[200005];
signed main()
{cint;while(t--){cinnk;for(int i1;in;i)a[i]i;if(k%2!0){coutNO\n;continue;}maxn 0; for(int i1;in;i){maxnabs(n-i1-i);}if(maxnk){coutNO\n;continue;}int flag2*(n-1);int num1;while(k!0){if(kflag){
// coutflag\n;
// couta[num] a[n-num1]flag\n;int ta[num];a[num]a[n-num1];a[n-num1]t;k-flag;num;flag2*(n-num1-num);}else{int cntk/2;int ta[num];a[num]a[numcnt];a[numcnt]t;k0;}}coutYES\n;for(int i1;in;i){couta[i] ;}cout\n;}return 0;
}
D. Elections 题意就是说有n个候选人c个无主见人士无主见的人会将票投给下标最小的那个的人然后问你想要让第i个当选要排除最少多少个竞争者 思路我们需要去对于
1第一个要特判如果第一个加上未决定的票数就可以大于最多的那么第一个人不用将任何候选人排除
2如果我票数就是最多的且我的下标小的话也可以在同票数的情况下获胜并且第一个人c个人的票也无法超过我因此也不需要排除别人 3其余的需要判断其是否比最大值那个下标小或者说把前面的都筛掉之后c能否大于最多那个人得票数如果这两个条件满足其一就输出i-1即可
#include bits/stdc.h
using namespace std;
#define int long long
int t;
int n,c;
int a[200005];
int pre[200005];
bool cmp(pairint,int a, pairint,int b)
{if(a.firstb.first) return a.secondb.second;return a.firstb.first;
}
void solve()
{cin n c;vectorpairint,int b(n1);b[0]{0,0};for(int i1;in;i){cin a[i];b[i]{a[i],i};}sort(b.begin(),b.end(), cmp);for(int i1;in;i){pre[i]pre[i-1]b[i].first;}int sum0;for(int i1;in;i){if(i1 a[i]cb[n].first){cout 0 ; }else if(((a[i]b[n].first ib[n].second)) a[1]ca[i]){cout 0 ;}else{cout i-(b[n].secondi || suma[i]cb[n].first) ;}suma[i];}cout \n;
}
signed main()
{cin t;while(t--){solve();}return 0;
}