https://codeforces.com/contest/1339
B题
题意很简单,
排序之后,中间两项的绝对值是最小的,输出l,r的顺序
#import<bits/stdc++.h> using namespace std; int i, k, n, t, a[100005]; int main() { ios::sync_with_stdio(0); cin >> t; while (t--) { cin >> n; for (i = 0; i < n; i++) cin >> a[i]; sort(a, a + n); k = (n - 1) / 2; for (i = 0; i < n; i++) { if (i & 1)cout << a[k + (i + 1) / 2] << ' '; else cout << a[k - i / 2] << ' '; } cout << endl; } }
C题
我的思路是正确的
如果后者比前者小,就看看后者到前者最小的变化次数
最小的找一个最大的
问题是代码写法不对
#include <bits/stdc++.h> using namespace std; #define int long long int t,n,a; int maxa,ans; signed main(){ //freopen("in","r",stdin); ios::sync_with_stdio(0); cin >> t; while(t--){ cin >> n ;cin >> maxa; ans = 0;//变化次数 for(int i = 1; i < n; i++){ cin >> a; if(a < maxa) ans = max(ans,maxa - a); if(a > maxa) maxa = a;//找到最大的数 } cout << (int)(ceil(log2(ans + 1))) << endl; } }