codeforce #633 div2

Posted hhyx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了codeforce #633 div2相关的知识,希望对你有一定的参考价值。

A. Filling Diamonds

# 题意

给定一个初始的菱形,给定一个n,用这个菱形去覆盖给定n对应的图形,不同的覆盖即同一个小形状被两个不同的菱形覆盖

技术图片

# 题解

发现当一个竖着的被填充后其余的都是斜横着的,所以只需要找竖着的情况,显然等于n

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 void work(){
 4     int n;
 5     cin>>n;
 6     cout<<n<<endl;
 7 }
 8 int main(){
 9     int t;
10     cin>>t;
11     while(t--){
12         work();
13     }
14 }

B. Sorted Adjacent Differences

# 题意

给定长度n的一个序列a,重新排a的顺序使得 |a1-a2| ≤ |a2-a3| ≤ ...... ≤|an-1-an|

# 题解

排序后两个指针从中间开始两两放即可

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e5+10;
 4 int a[N];
 5 void work(){
 6     int n;
 7     cin>>n;
 8     for(int i=1;i<=n;i++)
 9         cin>>a[i];
10     sort(a+1,a+n+1);
11     vector<int>ans;
12     if(n & 1){
13         ans.push_back(a[n/2+1]);
14         for(int i=n/2,j=n/2+2;i>=1 && j<=n;i--,j++)
15             ans.push_back(a[i]),ans.push_back(a[j]);
16     }
17     else {
18         for(int i=n/2,j=n/2+1;i>=1 && j<=n;i--,j++)
19             ans.push_back(a[i]),ans.push_back(a[j]);
20     }
21     for(int i=0;i<ans.size();i++)
22         cout<<ans[i]<<" ";
23     puts("");
24 }
25 int main(){
26     int t;
27     cin>>t;
28     while(t--){
29         work();
30     }
31 }

C. Powered Addition

# 题意

给定一个长度为n的序列,在第x秒可以对任意一段子序列加2x-1,也可以不加。问最少需要多少秒将序列变成非降序的

1 ≤ t ≤ 104

1 ≤ n ≤ 105

-10≤ a≤  109

# 题解

每次加2x-1,可以看作是2进制上加某一位,找到每个位置和前面最大值差的最大值,

因为二进制其他位上的可以在最后一秒前被加,所以找到二进制最高位然后+1就是最少的秒数。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e5+10;
 4 int a[N];
 5 void work(){
 6     int n;
 7     cin>>n;
 8     int mx=INT_MIN;
 9     int mxv=0;
10     for(int i=1;i<=n;i++){
11         cin>>a[i];
12         if(a[i]< mx)
13             mxv=max(mxv,abs(a[i]-mx));
14         mx=max(a[i],mx);
15     }
16     if(mxv==0) {
17         puts("0");return;
18     }
19     int ans=0;
20     for(int i=0;i<=30;i++){
21         if(mxv>>i &1){
22             ans=i;
23         }
24     }
25     cout<<ans+1<<endl;
26 }
27 
28 int main(){
29     int t;
30     cin>>t;
31     while(t--){
32         work();
33     }
34 }

D. Edge Weight Assignment

# 题意

# 题解

 

E. Perfect Triples

# 题意

# 题解

 

 

 

 

以上是关于codeforce #633 div2的主要内容,如果未能解决你的问题,请参考以下文章

CodeForces 633B A Trivial Problem

Codeforces Round #633 (Div. 2)

Codeforces 633 C Spy Syndrome 2 字典树

Codeforces 633D Fibonacci-ish 暴力

Codeforces Round #393 div2

Codeforces Round #326 div2