CF1681C Double Sort 题解
1.CF1909C Heavy Intervals 题解2.CF1913C Game with Multiset 题解3.P9750 [CSP-J 2023] 一元二次方程 题解4.CF1891B Deja Vu 题解5.CF1907B YetnotherrokenKeoard 题解6.CF1913B Swap and Delete 题解7.CF1121A Technogoblet of Fire 题解8.CF1162B Double Matrix 题解9.CF1184B1 The Doctor Meets Vader (Easy) 题解10.CF133B Unary 题解11.P8661 [蓝桥杯 2018 省 B] 日志统计 题解12.P3891 [GDOI2014] 采集资源 题解13.CF1804C Pull Your Luck 题解14.CF1815A Ian and Array Sorting 题解
15.CF1681C Double Sort 题解
16.P8791 [蓝桥杯 2022 国 AC] 内存空间 题解17.CF1250A Berstagram 题解18.CF358B Dima and Text Messages 题解19.CF1737C Ela and Crickets 题解20.CF1817A Almost Increasing Subsequence 题解21.CF1670B Dorms War 题解22.CF121A Lucky Sum 题解23.CF875B Sorting the Coins 题解24.CF158C Cd and pwd commands 题解25.CF1040B Shashlik Cooking 题解26.CF958F1 Lightsabers (easy) 题解一道普及-我写了两个半小时
题面。
需要注意的是,每次交换需要将 a 和 b 两个数组同时交换,因此便可以想到唯一可行情况: a , b 序列数字间的大小关系必须一致。
举个例子
2 4 6 21 3 1 3
1 7 9 70 6 1 2
在上面的例子中,两个序列中任意
flag = 1;
fr(i , 2 , n)
{
if((a[i] <= a[i - 1] && b[i] <= b[i - 1]) || (a[i] >= a[i - 1] && b[i] >= b[i - 1]))
{
continue;
}
flag = 0;
}
if(!flag)
{
printf("-1\n");
continue;
}
对于同时交换两个数组的操作,考虑冒泡排序,由于
在每次交换时,判断只要 a 数组或者 b 数组满足交换条件,便可以同时交换,同时用一个 ans
数组记录交换次数及步骤。
由于是只要 a 数组或者 b 数组满足交换条件便同时交换,需要再遍历此时的两个数组是否依旧符合题意(不然就WA#2)。
还需要注意一点,输出的 k
必须不能超过 -1
。
这是我奇怪的代码。
#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#define ld double
#define ll long long
#define maxx 200005
#define inf 0x3f3f3f3f
#define fr(i , a , b) for(ll i = a ; i <= b ; ++i)
#define fo(i , a , b) for(ll i = a ; i >= b ; --i)
#pragma comment(linker , "/stack : 200000000")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
using namespace std;
inline char gchar()
{
static char buf[1000000] , *p1 = buf , *p2 = buf;
return p1 == p2 && (p2 = (p1 = buf) + fread(buf , 1 , 1000000 , stdin) , p1 == p2) ? EOF : *p1++;
}
inline ll read()
{
ll x = 0 , f = 1;
char ch = gchar();
while(ch < '0' || ch > '9')
{
if(ch == '-')
{
f = -1;
}
ch = gchar();
}
while(ch >= '0' && ch <= '9')
{
x = (x << 1) + (x << 3) + (ch ^ 48);
ch = gchar();
}
return x * f;
}
ll T , n , a[maxx] , b[maxx];
ll flag;
struct node
{
ll i , j;
}ans[maxx];
signed main()
{
T = read();
while(T--)
{
n = read();
fr(i , 1 , n)
{
a[i] = read();
}
fr(i , 1 , n)
{
b[i] = read();
}
flag = 1;
fr(i , 2 , n)
{
if((a[i] <= a[i - 1] && b[i] <= b[i - 1]) || (a[i] >= a[i - 1] && b[i] >= b[i - 1]))
{
continue;
}
flag = 0;
}
if(!flag)
{
printf("-1\n");
continue;
}
ll k = 0;
fr(i , 1 , n)
{
fr(j , i + 1 , n)
{
if(a[i] > a[j] || b[i] > b[j])
{
swap(a[i] , a[j]);
swap(b[i] , b[j]);
ans[++k].i = i;
ans[k].j = j;
}
}
}
flag = 1;
fr(i , 2 , n)
{
if(b[i] < b[i - 1] || a[i] < a[i - 1])
{
flag = 0;
break;
}
}
if(flag && k <= 10000)
{
printf("%lld\n" , k);
fr(i , 1 , k)
{
printf("%lld %lld\n" , ans[i].i , ans[i].j);
}
}
else
{
printf("-1\n");
}
}
return 0;
}
- 一个好的指挥官不会背叛他的军队,无论代价是什么。
- 一个更好的指挥官知道当他想背叛他的军队时,什么时候应该伪装。
- 一个最好的指挥官精明地确立自己的绝对领导,并引领着人民走向更好的未来。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】