A. Ezzat and Two Subsequences
分类:
思维
我的思路:
将最大数和其他一堆分开即可
我的代码:
//by lmy
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 2e5 + 10;
int a[maxn];
int main()
{
int t, n, i;
double sum = 0.0;
cin >> t;
while (t--)
{
cin >> n;
for (i = 0; i < n; i++)
cin >> a[i];
sort(a, a + n);
for (i = 0; i < n - 1; i++)
sum += a[i];
sum /= (n - 1);
printf("%.8f\n", sum + a[n - 1]);
sum = 0.0;
}
return 0;
}
B. Moamen and k-subarrays
分类:
思维,排序
我的思路:
将数组按升序排序,之后找到不满足升序条件的子数列的最小数量,与k相比较即可
我的代码:
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 3e5 + 10;
class number
{
public:
int index;
int value;
};
number a[maxn];
bool cmp(number x, number y)
{
return x.value < y.value;
}
int main()
{
int t, n, k, i;
cin >> t;
while (t--)
{
int num = 1;
cin >> n >> k;
for (i = 0; i < n; i++)
{
a[i].index = i;
cin >> a[i].value;
}
sort(a, a + n, cmp);
for (i = 0; i < n-1 ; i++)
{
if (a[i].index != a[i + 1].index - 1)
num++;
}
if (num <= k)
cout << "YES\n";
else
cout << "NO\n";
}
return 0;
}
C. Moamen and XOR
这道题参考了大佬的题解(哈哈哈,涨芝士了鸭~)
分类:
动态规划
借鉴大佬的思路:
大佬的代码:
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll maxn = 2e5 + 10, mod = 1e9 + 7;
ll f[maxn][2];
ll quickpow(ll a, ll b)
{
ll sum = 1;
while (b)
{
if (b & 1)
sum = sum * a % mod;
a = a * a % mod;
b >>= 1;
}
return sum;
}
int main()
{
int t, n, k, i;
cin >> t;
f[0][0] = 1;
while (t--)
{
cin >> n >> k;
if (!k)
cout << "1\n";
else
{
ll p = quickpow(2, n - 1);
for (int i = 1; i <= k; i++)
{
if (n & 1)
{
f[i][0] = (f[i - 1][0] * (p + 1)) % mod;
f[i][1] = (f[i - 1][1] * p * 2 % mod) % mod;
}
else
{
f[i][0] = (f[i - 1][0] * (p - 1)) % mod;
f[i][1] = (f[i - 1][0] + f[i - 1][1] * p * 2) % mod;
}
}
cout << (f[k][0] + f[k][1]) % mod << "\n";
}
}
return 0;
}