标签:ret diamond lin 位置 pre text nbsp force 初始
# 题意
给定一个初始的菱形,给定一个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 }
# 题意
给定一个长度为n的序列,在第x秒可以对任意一段子序列加2x-1,也可以不加。问最少需要多少秒将序列变成非降序的
1 ≤ t ≤ 104
1 ≤ n ≤ 105
-109 ≤ ai ≤ 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 }
# 题意
# 题解
# 题意
# 题解
标签:ret diamond lin 位置 pre text nbsp force 初始
原文地址:https://www.cnblogs.com/hhyx/p/12689016.html