Codeforces Round #794 (Div. 2)
A. Everything Everywhere All But One
思路:找数组的平均值是否在数组的元素中
代码如下:
#include <bits/stdc++.h> using namespace std; typedef pair<int, int> PII; typedef pair<char, int> PCI; typedef long long LL; const int N = 1010; int T; void solve() { int n, m; scanf("%d", &n); int a[N]; int sum = 0; for(int i = 0; i < n; i ++ ) scanf("%d", &a[i]), sum += a[i]; for(int i = 0; i < n; i ++ ) { if( fabs ( sum*1.0/n - 1.0*a[i]) < 1e-6) { puts("YES"); return; } } puts("NO"); return; } int main() { scanf("%d", &T); while(T -- ) solve(); return 0; }
B. Odd Subarrays
思路:
找到一个逆序对,res ++,输出即可
代码如下:
#include <bits/stdc++.h> using namespace std; typedef pair<int, int> PII; typedef pair<char, int> PCI; typedef long long LL; const int N = 2e5+10; int T; void solve() { int n, m; scanf("%d", &n); int a[N]; int sum = 0; for(int i = 0; i < n; i ++ ) scanf("%d", &a[i]); int res = 0; for(int i = 1; i < n; i ++ ) { if(a[i-1] > a[i]) res ++, i ++; } cout << res << endl; return; } int main() { scanf("%d", &T); while(T -- ) solve(); return 0; }
C. Circular Local MiniMax
思路:将后半段插入到前半段中,n 必须是偶数,若是奇数,插入的后半段或前半段必定会有两个同一区域的数挨着,我们必须满足两端区域的数是交替出现如此可满足
代码如下:
#include <bits/stdc++.h> using namespace std; typedef pair<int, int> PII; typedef pair<char, int> PCI; typedef long long LL; const int N = 2e5+10; int T; void solve() { int n, m; scanf("%d", &n); int a[N]; for(int i = 1; i <= n; i ++ ) scanf("%d", &a[i]); sort(a + 1, a + n + 1); int res[N], cnt = 1; for(int i = 1, j = n/2 + 1; i <= n/2 || j <= n; i ++ , j ++ ) { if(i <= n/2) res[cnt ++] = a[i]; if(j <= n) res[cnt++] = a[j]; } res[0] = res[n]; res[n+1] = res[1]; for(int i = 1; i <= n; i ++ ) { if((res[i-1] >= res[i] && res[i+1] <= res[i]) || (res[i-1] <= res[i] && res[i+1] >= res[i])) { //printf("%d %d %d ", res[i-1], res[i], res[i+1]); puts("NO"); return; } } puts("YES"); for(int i = 1; i <= n; i ++ ) { printf("%d ", res[i]); } puts(""); return; } int main() { scanf("%d", &T); while(T -- ) solve(); return 0; }
上一篇:
IDEA上Java项目控制台中文乱码