目录
A. Everything Everywhere All But One
A. Everything Everywhere All But One
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\n", 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;
}