hdoj5821【贪心-神题】
2024-10-15 20:41:14
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊,比赛的时候直接读错题了,实力带坑队友。。。。
题意:
有两个序列都代表筐,每个筐里只有一个球,然后序列的值代表筐里的球的颜色,问你在m次操作后,a序列的球能否变成b序列的球,每总操作虽然是收集这个区间所有的球,但是每个筐只能放一个,也就是说这只是交换位置的操作。
思路:
补完题,也完全想不出可以用标记下标,然后对m个区间的a数组下标排序,因为在排序的过程中,就会类似于偏移操作,而且是最优操作哦,然后判断一下就好了。哎,实在想不出来,好厉害的方法,+神题;
挫code……
#include<cstdio>
#include<iostream>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define eps 1e-8
typedef __int64 LL;
const int N=1e3+10;
struct asd{
int id;
int v;
}q[N];
int temp[N];
bool cmp(asd x,asd y)
{
return x.id<y.id;
}
int main()
{
int t;
int n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d",&q[i].v);
q[i].id=-1;
}
for(int i=0;i<n;i++)
{
scanf("%d",&temp[i]);
for(int j=0;j<n;j++)
{
if(q[j].v==temp[i]&&q[j].id==-1)
{
q[j].id=i;
break;
}
}
}
int s,t;
while(m--)
{
scanf("%d%d",&s,&t);
sort(q+s-1,q+t,cmp);
}
bool flag=true;
for(int i=0;i<n;i++)
{
if(q[i].v!=temp[i])
{
flag=false;
break;
}
}
if(flag) puts("Yes");
else puts("No");
}
return 0;
}
/*
100
4 1
1 1 0 0
0 0 0 2
1 4
4 2
1 1 0 0
0 0 0 2
1 4
2 4
*/
最新文章
- js获取浏览器高度
- 相识从C语言开始
- [stm32][ucos][ucgui] 2、LED闪烁、串口、滑块、文本编辑框简单例程
- UVA 524
- 2015/7/6 (!长期更新!)C语言从零——张呵呵
- php 删除语句
- C# Setup package Uninstaller
- Rails 执行 rails server 报错 Could not find a JavaScript runtime
- java系列--批量处理
- 11-05-sdust-个人赛赛后随想
- 如何搭建SVN的客户端和使用
- Linux 安装 JDK 8
- 如何给localStorage设置一个过期时间?
- Java框架之Spring(二)
- OpenLdap 对接内部系统(Gitlab+Wiki+Jumpserver+Openvpn)配置
- 在项目中,多个方法会调用相同的sql语句,怎么解决各个方法的不同sql查询,解决冲突。
- 从零开始搭建Salt Web之初探salt-api
- react 脚手架--create-react-app
- UI基础一:简单的BOL查询
- [蓝桥杯]ALGO-87.算法训练_字串统计