CF 1896 A. Jagged Swaps 学习笔记

链接

传送门

代码

cpp 复制代码
#include<bits/stdc++.h>

using namespace std;

const int N=20;

int a[N];

int main()
{
	int t;
	scanf("%d",&t);
	
	while(t--)
	{
		int n;
		scanf("%d",&n);
		
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&a[i]);
		}
		
		if(a[1]==1)	printf("yes\n");
		else	printf("no\n");
		
		memset(a,0,sizeof a);
	}
	
	return 0;
}

总结

1.第一次写WA 2 ,代码如下

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

const int N=20;

int a[N],b[N];

int main()
{
	int t;
	scanf("%d",&t);
	
	while(t--)
	{
		int n;
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
		{
			scanf("%d",&a[i]);
			b[i]=a[i];
		}
		sort(b+1,b+1+n);
		//for(int i=1;i<=n;i++)	printf("%d ",b[i]);
		
		for(int i=2;i<=n-1;i++)
		{
			if(a[i]>a[i-1]&&a[i]>a[i+1])	swap(a[i],a[i+1]);
		}
		
		bool flag=false;
		for(int i=1;i<=n;i++)
		{
			if(a[i]!=b[i])
			{
				flag=true;
				break;
			}
		}
		
		if(flag==true)	printf("no\n");
		else	printf("yes\n");
		
		memset(a,0,sizeof a);
		memset(b,0,sizeof b);
	}
	
	return 0;
}

//permutation 排列
//arbitrary 任意的
//modified 改变
//Hence 因此
//hold 包含
//pretend 假装
//Implementation 实施

错误思路是,每遇到一个a[i]>a[i-1]&&a[i]>a[i+1]的情况,就交换a[i]和a[i+1],但事实上不是这样的,我们是有选择的交换,而不是遇到一个交换一个

2.题目说的很清楚,给定一个排列,特意解释了一下排列的意思,比如说总的元素个数是3,元素就只会是1,2,3,我刚开始还以为只是这个题目数据范围比较小

3.a[i]>a[i-1]&&a[i]>a[i+1],i>=2&&i<=n-1,我们可以发现,第一个数字是无法移动的,所以第一个数字必须是数字1

4.有选择的进行交换操作:首先交换最大的数字,把最大的数字移动到排列的最后面,然后移动倒数第二大的数字,循环操作,直到排列完成,所以说只要第一个数字等于1,后面的数字都可以排列好,只需要判断第一个数字是否为1该题就可以解决

相关推荐
零匠学堂202521 分钟前
如何通过培训考试系统提升网络学习平台的效果?
学习
f***241124 分钟前
java学习进阶之路,如果从一个菜鸟进阶成大神
java·开发语言·学习
后端小张1 小时前
【AI 学习】从0到1深入理解Agent AI智能体:理论与实践融合指南
人工智能·学习·搜索引擎·ai·agent·agi·ai agent
九年义务漏网鲨鱼1 小时前
【大模型学习】现代大模型架构(二):旋转位置编码和SwiGLU
深度学习·学习·大模型·智能体
_Kayo_1 小时前
vue3 computed 练习笔记
前端·vue.js·笔记
TracyCoder1231 小时前
微服务框架选型学习笔记
笔记·学习·微服务
摇滚侠1 小时前
2025最新 SpringCloud 教程,Nacos-注册中心 @LoadBalanced 注解式负载均衡,笔记11
笔记·spring cloud·负载均衡
pq113_61 小时前
开源软件学习笔记 - 移植SFUD
笔记·stm32·sfud·ft4222h
专注于大数据技术栈1 小时前
java学习--单例模式之懒汉式
java·学习·单例模式
hd51cc2 小时前
MFC多线程学习笔记一:用户界面线程和工作线程
笔记·学习·mfc