Codeforces Round #633 div2 A~C
Posted lr599909928
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #633 div2 A~C相关的知识,希望对你有一定的参考价值。
题意:给你n个菱形方块,问能构成图示形状的有多少种
题解:自己画几个不难发现答案是n
代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <stack> 7 #include <queue> 8 #include <vector> 9 #include <map> 10 #include <set> 11 #include <unordered_set> 12 #include <unordered_map> 13 #define ll long long 14 #define fi first 15 #define se second 16 #define pb push_back 17 #define me memset 18 const int N = 1e6 + 10; 19 const int mod = 1e9 + 7; 20 using namespace std; 21 typedef pair<int,int> PII; 22 typedef pair<long,long> PLL; 23 24 int t; 25 ll n; 26 27 int main() { 28 ios::sync_with_stdio(false); 29 cin>>t; 30 while(t--){ 31 cin>>n; 32 printf("%lld ",n); 33 34 } 35 36 37 38 return 0; 39 }
B. Sorted Adjacent Differences
题意:给你一个长度为n的数组a,将a重新排序,使得相邻两项之间的差非递减.
题解:每两项之间的差要非递减,那么我们从后往前看,最后两项一定可以是a的最大值和最小值,然后是a的第二大和第二小.,一直往前枚举即可.
代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <stack> 7 #include <queue> 8 #include <vector> 9 #include <map> 10 #include <set> 11 #include <unordered_set> 12 #include <unordered_map> 13 #define ll long long 14 #define fi first 15 #define se second 16 #define pb push_back 17 #define me memset 18 const int N = 1e6 + 10; 19 const int mod = 1e9 + 7; 20 using namespace std; 21 typedef pair<int,int> PII; 22 typedef pair<long,long> PLL; 23 24 int t; 25 int n; 26 int cnt; 27 ll a[N],b[N]; 28 int main() { 29 ios::sync_with_stdio(false); 30 cin>>t; 31 while(t--){ 32 cin>>n; 33 cnt=0; 34 for(int i=0;i<n;++i) cin>>a[i]; 35 36 sort(a,a+n); 37 38 for(int i=0;i<(n+1)/2;++i){ 39 if(i==(n+1)/2-1 && n%2!=0){ 40 b[cnt++]=a[i]; 41 } 42 else { 43 b[cnt++] = a[i]; 44 b[cnt++] = a[n - i - 1]; 45 } 46 } 47 for(int i=cnt-1;i>=0;--i){ 48 printf("%lld ",b[i]); 49 } 50 puts(""); 51 52 } 53 54 55 56 return 0; 57 }
题意:给你一个长度为n的数组a,从第1秒开始,你可以在第i秒的时候对a的任意项加上2^(i-1),问最少在多少秒的时候使得a的所有元素非递减.
题解:最优解一定要满足差值最大的那个逆序对,所以我们在输入的时候维护一个逆序对的最大差值ma,然后只要让某一秒时的sum>ma就行了.
代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 #include <stack> 7 #include <queue> 8 #include <vector> 9 #include <map> 10 #include <set> 11 #include <unordered_set> 12 #include <unordered_map> 13 #define ll long long 14 #define fi first 15 #define se second 16 #define pb push_back 17 #define me memset 18 const int N = 1e6 + 10; 19 const int mod = 1e9 + 7; 20 using namespace std; 21 typedef pair<int,int> PII; 22 typedef pair<long,long> PLL; 23 24 int t; 25 int n; 26 ll a[N]; 27 ll res=-1e9-10,ma=-1e9-10; 28 int main() { 29 ios::sync_with_stdio(false); 30 cin>>t; 31 while(t--){ 32 cin>>n; 33 res=-1e9-10,ma=-1e9-10; 34 for(int i=0;i<n;++i){ 35 cin>>a[i]; 36 if(a[i]<res) ma=max(ma,res-a[i]); 37 res=max(res,a[i]); 38 } 39 ll s=1,sum=0,cnt=0; 40 while(sum<ma){ 41 sum+=s; 42 s*=2; 43 cnt++; 44 } 45 printf("%lld ",cnt); 46 } 47 48 return 0; 49 }
以上是关于Codeforces Round #633 div2 A~C的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #633 (Div. 2)(A, B, C)
Codeforces Round #705 (Div. 2)
Codeforces Round #774 (Div. 2)
Codeforces Round #808 (Div. 1)(A~C)