Codeforces-Round#569 Div.2
Posted tldr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces-Round#569 Div.2相关的知识,希望对你有一定的参考价值。
前面考试周,抱歉拖了这么久。
A题 Alex and a Rhombus
基本思路
递推解决,n=1时,Count(1)=1;n>1时,Count(n)=Count(n-1)+(n-1)*4
#include<bits/stdc++.h>
using namespace std;
int main()
int n;cin>>n;
long long res=1;
for(int i=1;i<=n;i++)
res+=4*(i-1);
cout<<res;
return 0;
B题 Nick and Array
基本思路
按绝对值,负数>正数,因此只要把所有的数转成负数,若n被2整除,则结果为正,若n%2余1,则将最小的负数转成正数。
注意题目要求按顺序输出
#include<bits/stdc++.h>
using namespace std;
int num[100005];
int MINN = 99999,pos=0;
int main()
int n,ncount=0;cin>>n;
for(int i=0;i<n;i++)
cin >> num[i];
if(num[i]>=0)
num[i] = -num[i] - 1;
if(num[i]<=MINN&&num[i]!=-1)
pos=i;
MINN=num[i];
if(n%2!=0)
num[pos]=-num[pos]-1;
for(int i=0;i<n;i++)
cout<<num[i]<<" ";
return 0;
C题
基本思路
当双端队列q[0]为最大值时会陷入循环,因此,需要递推的步数不超过\\(10^5\\),后面可以用模数组下标来选择输出的第二个数。(记得先pop_front再模n-1)
#include<bits/stdc++.h>
#include<deque>
using namespace std;
struct
int a,b;
qu[100010];
int main()
deque<int>q;int n,query,maxn=-99999;
cin>>n>>query;
for(int i=0;i<n;i++)
int num;cin>>num;
q.push_back(num);
maxn=max(maxn,num);
long long cnt=0;
while(q.front()!=maxn)
cnt++;
int n1=q.front();
q.pop_front();int n2=q.front();q.pop_front();
q.push_front(max(n1,n2));
q.push_back(min(n1,n2));
qu[cnt].a=n1;qu[cnt].b=n2;
q.pop_front();
for(int i=0;i<query;i++)
long long m;
cin>>m;
if(m<=cnt)
cout<<qu[m].a<<" "<<qu[m].b<<endl;
else
int pos=(m-cnt-1)%(n-1);
cout<<maxn<<" "<<q[pos]<<endl;
return 0;
以上是关于Codeforces-Round#569 Div.2的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces-Round-#461-Div. 2-C
Codeforces-Round#547(Div.3)-C-Polycarp Restores Permutation
Codeforces-Round#546(Div.2)-D-Nastya Is Buying Lunch