首页 > 其他分享 >NOIP2015提高组复赛day1解析

NOIP2015提高组复赛day1解析

时间:2023-09-04 23:00:23浏览次数:40  
标签:NOIP2015 int ++ cnt dfs day1 -- else 复赛

1.

 解析:

送分题,按题意模拟即可

代码:

#include<bits/stdc++.h>
#define ll long long
#define x first
#define y second
using namespace std;
const int N = 39+7;
int a[N][N],n;
map<int,pair<int,int> >mp;
int main(){
	freopen("magic.in","r",stdin);
	freopen("magic.out","w",stdout);
	memset(a,0,sizeof(a));
	cin>>n;
	a[1][(n+1)/2]=1;
	mp[1]=make_pair(1,(n+1)/2);
	for(int i=2;i<=n*n;i++){
		pair<int,int> k=mp[i-1];
		if(k.x==1&&k.y!=n){
			a[n][k.y+1]=i;
			mp[i]=make_pair(n,k.y+1);
		}else if(k.y==n&&k.x!=1){
			a[k.x-1][1]=i;
			mp[i]=make_pair(k.x-1,1);
		}else if(k.x==1&&k.y==n){
			a[k.x+1][k.y]=i;
			mp[i]=make_pair(k.x+1,k.y);
		}else{
			if(!a[k.x-1][k.y+1]){
				a[k.x-1][k.y+1]=i;
				mp[i]=make_pair(k.x-1,k.y+1);
			}else{
				a[k.x+1][k.y]=i;
				mp[i]=make_pair(k.x+1,k.y);
			}
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cout<<a[i][j]<<' ';
		}
		cout<<'\n';
	}
	return 0;
}

 

2.

 解析:
这道题通过模拟数据可以发现,本题可转化为求图内最小环的长度,数据不大,可以直接dfs

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 2e5+39+7;
int n,a[N],vis[N],num[N],ans=1e9;
void dfs(int x,int step){
	if(vis[x])return;
	if(num[x]){
		ans=min(ans,step-num[x]);
		vis[x]=1;
	}
	num[x]=step;
	dfs(a[x],step+1);
	num[x]=0;
	vis[x]=1;
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++)if(!vis[i])dfs(i,0);
	cout<<ans;
	return 0;
}

  

3.

 解析:

这道题可以每次预处理cnt和p数组,用来搜索使用,然后写一个爆搜,枚举这几种情况,就可以非常快的过掉这道题

代码:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 39+7;
int n,T,cnt[N],p[N],ans;
int find(){
	memset(cnt,0,sizeof(cnt));
	int x=0;
	for(int i=0;i<15;i++)cnt[p[i]]++;
	while(cnt[4]){
		cnt[4]--;x++;
		if(cnt[2]>=2)cnt[2]-=2;
		else if(cnt[1]>=2)cnt[1]-=2;
	}
	while(cnt[3]){
		cnt[3]--;x++;
		if(cnt[2])cnt[2]--;
		else if(cnt[1])cnt[1]--;
	}
	if(p[0]&&p[1]&&cnt[1]>=2)x--;
	return x+cnt[1]+cnt[2];
}
void dfs(int x){
	if(x>ans)return;
	int tmp=find();
	if(x+tmp<ans)ans=x+tmp;
	for(int i=3;i<=14;i++){
		int j=i;
		while(p[j]&&j<15){
			p[j]--;
			if(j-i+1>=5)dfs(x+1);
			j++;
		}
		while(j>i)p[--j]++;
	}
	for(int i=3;i<=14;i++){
		int j=i;
		while(p[j]>=2&&j<15){
			p[j]-=2;
			if(j-i+1>=3)dfs(x+1);
			j++;
		}
		while(j>i)p[--j]+=2;
	}
	for(int i=3;i<=14;i++){
		int j=i;
		while(p[j]>=3&&j<15){
			p[j]-=3;
			if(j-i+1>=2)dfs(x+1);
			j++;
		}
		while(j>i)p[--j]+=3;
	}
}
int main(){
	cin>>T>>n;
	while(T--){
		ans=n;
		memset(p,0,sizeof(p));
		for(int i=1;i<=n;i++){
			int x,y;cin>>x>>y;
			if(!x)p[y-1]++;
			else if(x==1)p[14]++;
			else p[x]++;
		}
		dfs(0);
		cout<<ans<<'\n';
	}
	return 0;
}

  

标签:NOIP2015,int,++,cnt,dfs,day1,--,else,复赛
From: https://www.cnblogs.com/zhanghx-blogs/p/17678345.html

相关文章

  • Day1 表结构/权限/路径导航/登录
    目录day13订单管理项目开发1.表结构设计1.1abstract类1.2自增和主键1.3逻辑删除1.4数据库连接1.5表结构参考2.用户认证相关2.1发送短信2.2缓存和Session2.3动态菜单2.4权限控制2.5local_settings.py2.6用户名登录2.7短信登录2.8动态菜单day13订单管理项目开发1.......
  • 嵌入式面试笔试刷题(day14)
    (文章目录)前言本篇文章继续我们的刷题之路。一、进程控制块这里只讲解进程的PCB控制块,线程的TCP控制块作用和进程PCB控制块作用类似。1.PCB控制块的作用进程控制块(ProcessControlBlock,PCB)是操作系统中用于管理和跟踪进程信息的数据结构。每个进程在操作系统中都有一个对......
  • NOIP2013提高组复赛day1解析
    1.错误原因:想的太复杂正解:10^k轮,会使x号小伙伴变到(x+m*10^k)%n号,直接套用公式代码:#include<bits/stdc++.h>#definelllonglongusingnamespacestd;lln,m,k,x;llquickPow(lla,llb,llmod){ llans=1; while(b){ if(b&1)ans=((ans%mod)*(a%mod))%mod; a=((......
  • py之路——day14-20230902:python内置方法
    作者:zb1、python内置方法:abs()方法:取绝对值all()方法:all(iterable),如果iterable中的所有元素都为空或True,则返回True,否则返回False#all()方法print(all([0,1,-2]))print(all([1,1,2]))print(all([]))D:\oldboy_py\venv\Scripts\python.exeD:/oldboy_py/day4-2023......
  • 超全面的JavaWeb笔记day10<Response&Request&路径&编码>
    1、Response2、Request3、路径4、编码请求响应流程图 response1、response概述response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletResponse。在客户端发出每个请求时,服务器都会创建一个response对象,并传入给Servlet.service()方法。response对象是用来......
  • Day12_文件的高级操作:控制文件指针移动
    1.文件高级操作:控制文件指针移动_12.模式0(参照物是文件开头位置)的示范: 3.模式1(参照物是当前指针所在位置)的示范:18.模式2(参照物是文件末尾位置,应该倒着移动)的示范: ......
  • Day12_文件操作的x模式和b模式
    1.x模式: 2.b模式: 3.b模式应用案例与文件循环读取_方式一: 4.b模式应用案例与文件循环读取_方式二:5.文本文件copy工具,读取写入新地址: ......
  • Day11_文件操作_1
    1.文件与文件模式介绍:2.打开文件: 3.文件内容的操作读写和文件关闭: 4.文件对象又称文件句柄,with连续读多个文件内容: ......
  • 20天 hot 100 速通计划-day19
    多维动态规划62.不同路径一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?示例1:输入:m=3,n=7输出:28示例2:输入:m......
  • Day10_字符编码
    1.字符编码的发展史: 2.utf-8的总结_1: 3.utf-8的总结_2: ......