https://codeforces.com/contest/1637
选择一个长度len,将前len个数和后面的数分别排序,问是不是总能把数组排好
#include
using namespace std;
typedef long long ll;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while(t--){
int n;
cin >> n;
vector<int> a(n);
for(auto &i : a) cin >> i;
if(!is_sorted(a.begin(), a.end())) cout << "YES\n";
else cout << "NO\n";
}
return 0;
}
#include
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while(t--){
int n;
cin >> n;
vector<int> a(n);
for(int i=0;i<n;i++) cin >> a[i];
long long ans = 0;
function<long long(int, int)> cal = [&](int l, int r){
long long res = 0;
for(int i=l;i<=r;i++){
if(!a[i]){
res += 1;
}
}
return res + r - l + 1;
};
for(int i=0;i<n;i++){
for(int j=i;j<n;j++){
ans += cal(i, j);
}
}
cout << ans << '\n';
}
return 0;
}
#include
using namespace std;
typedef long long ll;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while(t--){
int n;
cin >> n;
vector<int> a(n);
for(auto &i : a) cin >> i;
function<void()> solve = [&](){
if(n == 3 && (a[1] & 1)){
cout << -1 << '\n';
return;
}
ll ans = 0;
bool ok = false;
for(int i=1;i<n-1;i++){
if(a[i] != 1) ok = true;
}
if(!ok){
cout << -1 << '\n';
}else{
for(int i=1;i<n-1;i++){
if(a[i] & 1){
a[i] += 1;
}
ans += a[i] / 2;
}
cout << ans << '\n';
}
};
solve();
}
return 0;
}
#include
using namespace std;
typedef long long ll;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while(t--){
int n;
cin >> n;
vector<int> a(n + 1), b(n + 1);
for(int i=1;i<=n;i++) cin >> a[i];
for(int i=1;i<=n;i++) cin >> b[i];
int ans = 0;
int mx = 0;
for(int i=1;i<=n;i++){
ans -= a[i] * a[i];
ans -= b[i] * b[i];
mx += a[i];
mx += b[i];
for(int j=i+1;j<=n;j++){
ans += a[i] * a[i];
ans += a[j] * a[j];
ans += b[i] * b[i];
ans += b[j] * b[j];
}
}
vector<vector<int> > dp(n + 1, vector<int>(mx + 1));
dp[0][0] = 1;
for(int i=1;i<=n;i++){
for(int j=a[i];j<=mx;j++){
dp[i][j] |= dp[i - 1][j - a[i]];
}
for(int j=b[i];j<=mx;j++){
dp[i][j] |= dp[i - 1][j - b[i]];
}
}
int res = INT_MAX;
for(int i=0;i<=mx;i++){
if(dp[n][i]){
res = min(res, i * i + (mx - i) * (mx - i));
}
}
cout << ans + res << '\n';
}
return 0;
}
#include
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while(t--){
int n, m;
cin >> n >> m;
set<pair<int, int> > s;
set<int> b;
map<int, int> mp;
set<int> a;
int mx = -1;
for(int i=0;i<n;i++){
int x;
cin >> x;
a.insert(x);
mp[x] += 1;
}
for(auto i : mp){
mx = max(mx, i.second);
}
vector<vector<int> > g(mx + 1);
for(auto i : mp){
g[i.second].push_back(i.first);
b.insert(i.second);
}
for(int i=0;i<=mx;i++) sort(g[i].rbegin(), g[i].rend());
for(int i=0;i<m;i++){
int u, v;
cin >> u >> v;
if(u > v) swap(u, v);
s.insert({u, v});
}
long long ans = 0;
for(auto i : a){
for(auto j : b){
for(auto k : g[j]){
if(i == k) continue;
if(!s.count({min(i, k), max(i, k)})){
ans = max(ans, 1ll * (i + k) * (mp[i] + j));
break;
}
}
}
}
cout << ans << '\n';
}
return 0;///
}
#include
using namespace std;
typedef long long ll;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while(t--){
int n, m;
cin >> n >> m;
set<int> a;
map<int, int> mp;
for(int i=1;i<=n;i++){
int x;
cin >> x;
a.insert(x);
mp[x] += 1;
}
set<int> b;//本质不同出现次数
set<pair<int, int> > s;
for(int i=0;i<m;i++){
int u, v;
cin >> u >> v;
if(u > v) swap(u, v);
s.insert({u, v});
}
int mx = 0;
for(auto i : mp){
mx = max(mx, i.second);
}
vector<vector<int> > vis(n + 1);
for(auto i : mp){
vis[i.second].push_back(i.first);
b.insert(i.second);
}
for(int i=1;i<=n;i++){
reverse(vis[i].begin(), vis[i].end());
}
ll ans = 0;
for(int cnt_x=1;cnt_x<=n;cnt_x++){
for(auto x : vis[cnt_x]){
for(int cnt_y=1;cnt_y<=cnt_x;cnt_y++){
for(auto y : vis[cnt_y]){
if(x != y && !s.count({min(x, y), max(x, y)})){
ans = max(ans, 1ll * (cnt_x + cnt_y) * (x + y));
break;
}
}
}
}
}
cout << ans << '\n';
}
return 0;
}