#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <vector>usingnamespacestd;constint N =50050;intscores[N];intmain(){int n, x, y;scanf("%d%d%d",&n,&x,&y);for(int i =0; i < n; i++)scanf("%d", scores + i);sort(scores, scores + n);if(2* x > n)puts("-1");else{int m =scores[x -1], i = x -1;while(i < n &&scores[i]== m) i++;if(n - i>= x && n - i <= y)printf("%d\n", m);elseputs("-1");}return0;}
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 20020;
int n;
int a[N];
int main()
{
cin >> n;
for(int i = 1; i <= n; i++)
cin >> a[i];
sort(a + 1, a + n + 1);
int res = 0;
for(int i = 1; i <= n; i++)
res += abs(a[i] - i);
cout << res << endl;
return 0;
}
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int N = 500050;
int T, n, m;
char s[N], gender[2 * N];
int a[N];
int main()
{
scanf("%d", &T);
while(T--)
{
scanf("%d", &n);
scanf("%s", s);
scanf("%d", &m);
scanf("%s", gender);
priority_queue<int, vector<int>, greater<int>> q0, q1;
for(int i = 1; i <= n; i++)
{
a[i] = s[i - 1] - '0';
if(a[i] == 0) q0.push(i);
else if(a[i] == 1) q1.push(i);
}
// 处理查询
for(int i = 0; i < m; i++)
{
if(gender[i] == 'M')
{
if(!q1.empty())
{
int t = q1.top();
q1.pop();
printf("%d\n", t);
}
else{
int t = q0.top();
q0.pop();
q1.push(t);
printf("%d\n", t);
}
}
else{
if(!q0.empty())
{
int t = q0.top();
q0.pop();
q1.push(t);
printf("%d\n", t);
}
else{
int t = q1.top();
q1.pop();
printf("%d\n", t);
}
}
}
}
return 0;
}
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const int N = 310;
int n;
int a[N];
int f[N][N][N]; // 以i 为根节点 [a .. b]为中序遍历的二叉树的集合 最小值
int main()
{
cin >> n;
for(int i = 1; i <= n; i++)
cin >> a[i];
memset(f, 0x3f, sizeof f);
for(int len = 1; len <= n; len++)
for(int l = 1; l + len - 1 <= n; l++)
{
int r = l + len - 1;
if(len == 1)
{
f[l][l][l] = 0;
continue;
}
// 枚举root
for(int root = l; root <= r; root++)
{
// 左边 [x][l][root - 1];
int sl = 0x3f3f3f3f, sr = 0x3f3f3f3f;
if(root - 1 >= l)
for(int x = l; x <= root - 1; x++)
sl = min(sl, f[x][l][root - 1] + a[x] * a[root]);
if(root + 1 <= r)
for(int x = root + 1; x <= r; x++)
sr = min(sr, f[x][root + 1][r] + a[x] * a[root]);
if(sl == 0x3f3f3f3f) sl = 0;
if(sr == 0x3f3f3f3f) sr = 0;
f[root][l][r] = sl + sr;
}
}
int ans = 0x3f3f3f3f;
for(int i = 1; i <= n; i++)
ans = min(ans, f[i][1][n]);
cout << ans << endl;
return 0;
}
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
int num[305];
int dp[305][305][305];
int dfs(int l,int r,int f)
{
if (l>r)
return 0;
if(dp[l][r][f]!=-1)
return dp[l][r][f];
int res=inf;
for(int i=l;i<=r;i++)
{
int left=dfs(l,i-1,i);
int right=dfs(i+1,r,i);
res=min(res,left+right+num[i]*num[f]);
}
dp[l][r][f]=res;
return dp[l][r][f];
}
int main()
{
memset(dp,-1,sizeof(dp));
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>num[i];
}
cout<<dfs(1,n,0)<<endl;
}