Codeforces Round #633 div2 A~C

A. Filling Diamonds

题意:给你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",n);
33  
34      }
35  
36  
37  
38     return 0;
39 }
View Code

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 }
View Code

C. Powered Addition

题意:给你一个长度为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\n",cnt);
46      }
47  
48     return 0;
49 }
View Code

猜你喜欢

转载自www.cnblogs.com/lr599909928/p/12690396.html