2022十三届蓝桥杯省赛赛时代码

2023-10-31

1478
14

应该就是取模问题?

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>

using namespace std ;

const int N = 1e5 + 10 ;
typedef long long LL ;

LL a , b , n ;

int main(void)
{
	scanf("%lld%lld%lld" , &a , &b , &n) ;
	LL t = 5 * a + b * 2 ;
	LL ans = n / t * 7 ;
	n %= t ;
	if(n <= 5 * a) ans += (n + a - 1) / a ;
	else 
	{
		n -= 5 * a ;
		ans += 5 + (n + b - 1) / b ;
	}
	printf("%lld" , ans) ;
}

本来只有一行

printf("%d\n" , max((i - 1) * 2 , 2 * (n - i))) ;

后来考虑到有可能特判n = 1的情况,于是赋值

#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>

using namespace std ;

const int N = 1e5 + 10 ;

int a[N] ;

int main(void)
{
	int n ;
	scanf("%d" , &n) ;
	for(int i = 1 ; i <= n ; i ++) a[i] = i ;
	for(int i = 1 ; i <= n ; i ++)
		printf("%d\n" , max(a[i] , max((i - 1) * 2 , 2 * (n - i)))) ;
}

X进制 , 就是简单的贪心,从低位向高位尽可能的选取最低的进制

#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>

using namespace std ;

const int N = 1e5 + 10 ;
const int mod = 1e9 + 7 ;

int a[N] , b[N] ;
int ans ;

int get(int x)
{
	return (x % mod + mod) % mod ;
}
int main(void)
{
	int n , m ;
	int t ;
	scanf("%d" , &t) ;
	scanf("%d" , &n) ;
	for(int i = 1 ; i <= n ; i ++)	scanf("%d" , &a[i]) ;
	scanf("%d" , &m) ;
	for(int i = 1 ; i <= m ; i ++)  scanf("%d" , &b[i]) ;
	int i , j , res = 1 ;
	for(i = n , j = m ; i && j ; i -- , j --)
	{
		ans = (ans + res * 1ll * get(a[i] - b[j]) % mod) % mod ;
		res = (res * 1ll * max(2 , (max(a[i] , b[j]) + 1))) % mod ;
		cout << res << endl ;
	}
	while(i)
	{
		ans = (ans + res * 1ll * a[i] % mod) % mod ;
		res = (res * 1ll * max(a[i] + 1 , 2)) % mod ;
		i -- ;
	} 
	while(j)
	{
		ans = (ans + res * 1ll * b[j] % mod) % mod ;
		res = (res * 1ll * max(b[j] + 1 , 2)) % mod ;
		j -- ;
	}
	printf("%d" , ans) ;
}

应该是前缀和+尺取O(n^3)

#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>

using namespace std ;

const int N = 5e2 + 10 ;
typedef long long LL ;

int g[N][N] ;
int n , m , k ;
LL ans ;

int get(int tx , int ty , int x , int y)
{
	return g[x][y] - g[x][ty - 1] - g[tx - 1][y] + g[tx - 1][ty - 1] ;
}

int main(void)
{
	scanf("%d%d%d" , &n , &m , &k) ;
	for(int i = 1 ; i <= n ; i ++)
		for(int j = 1 ; j <= m ; j ++)
			scanf("%d" , &g[i][j]) ;
	for(int i = 1 ;i <= n ; i ++)
		for(int j = 1 ; j <= m ; j ++)
			g[i][j] = g[i][j] + g[i - 1][j] + g[i][j - 1] - g[i - 1][j - 1] ;
	for(int i = 1 ; i <= n ; i ++)
		for(int j = i ; j <= n ; j ++)
		{
			for(int t = 1 , p = 1 ; t <= m ; t ++)
			{
				while(p <= t && get(i , p , j , t) > k) 
					p ++ ;
				ans += max(t - p + 1 , 0 ) ;
			}
		}	
	printf("%lld" , ans) ;
}

状压dp,枚举各种情况

#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std ;

const int N = 1e7 + 10 ;
const int K = 4 ;
const int mod = 1e9 + 7 ;

int f[N][K] ;

int main(void)
{
	int n ;
	scanf("%d" , &n) ;
	f[0][3] = 1 ;
	for(int i = 1 ; i <= n ; i ++)
	{
		f[i][0] = f[i - 1][3] ;
		f[i][1] = (f[i - 1][2] + f[i - 1][0]) % mod ;
		f[i][2] = (f[i - 1][1] + f[i - 1][0]) % mod ;
		f[i][3] = ((f[i - 1][1] + f[i - 1][2]) % mod + (f[i - 1][3] + f[i - 1][0]) % mod) % mod ;
	}
	printf("%d" , f[n][3]) ;
}

唯一不会的题,只会暴力骗40,刚开始想并查集,后来发现问题,不可能是双向边于是改成dfs

#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>

#define int long long 

using namespace std ;

const int N = 5e4 + 10 ;
const int M = 1e7 + 10 ;

int h[N] , e[M] , ne[M] , idx ;
bool st[N] ;

void add(int a , int b)
{
	e[idx] = b , ne[idx] = h[a] , h[a] = idx ++ ;
}

struct Node
{
	int x , y ;
	int r ;
} a[N] ;

int get_dist(int x , int y , int _x , int _y)
{
	int dx = x - _x ;
	int dy = y - _y ;
	return dx * dx + dy * dy ;
}

void dfs(int u)
{
	st[u] = true ;
	for(int i = h[u] ; ~ i ; i = ne[i])
	{
		int j = e[i] ;
		if(st[j]) continue ;
		dfs(j) ;
	}
}
signed main(void)
{
	memset(h , -1 , sizeof h) ;
	int n , m ;
	scanf("%lld%lld" , &n , &m) ;
	for(int i = 1 ; i <= n ; i ++)
		scanf("%lld%lld%lld" , &a[i].x , &a[i].y , &a[i].r) ;		
	for(int i = 1 ; i <= n ; i ++)
		for(int j = 1 ; j <= n ; j ++)
			if(i != j && get_dist(a[i].x , a[i].y , a[j].x , a[j].y) <= a[i].r * a[i].r)
				add(i , j) ;
	for(int i = 1 ; i <= m ; i ++)
	{
		int x , y , r ;
		scanf("%lld%lld%lld" , &x , &y , &r) ;
		for(int j = 1 ; j <= n ; j ++)
			if(!st[i] && get_dist(x , y , a[j].x , a[j].y) <= r * r)
				dfs(i) ;
	}
	int res = 0 ;
	for(int i = 1 ; i <= n ; i ++)
		if(st[i])
			res ++ ;
	printf("%lld" , res) ;
}

9.李白
这个三维dp即可
第一维是一共走了i步,剩下j个酒(酒不可能超过(n + m)) , 经过了k个店
由于最后一个必须是花而且刚好用完,所以输出f[n + m - 1][1][m]

#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>

using namespace std ;

const int N = 1e2 + 10 ;
const int mod = 1e9 + 7 ;
const int M = 2e2 + 10 ;

int f[M][M][N] ;

int main(void)
{
	int n , m ;
	scanf("%d%d" , &n , &m) ;
	f[0][2][0] = 1 ;
	for(int i = 1 ; i <= n + m ; i ++)
		for(int j = 0 ; j <= n + m ; j ++)
			for(int k = 0 ; k <= n ; k ++)
			{
				f[i][j][k] += f[i - 1][j + 1][k] ;
				if(k && j % 2 == 0) f[i][j][k] += f[i - 1][j / 2][k - 1] ;
				f[i][j][k] %= mod ;	
			}
	printf("%d" , f[n + m - 1][1][n]) ;
}

这道题具有思维性,当时看到这个题我发现一个数最多变换6次就可以变成1,所以总次数一定不超过6n,暴力合并即可

#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>

using namespace std ;

const int N = 1e5 + 10 ;

typedef long long LL ;

struct Segment
{
	int l , r ;
	LL val ;
	bool operator<(const Segment& t)const
	{
		if(val != t.val) return val < t.val ;
		return l > t.l ;
	}
};

priority_queue<Segment> q ;
LL a[N] ;

int main(void)
{
	int n ;
	scanf("%d" , &n) ;
	for(int i = 1 ; i <= n ; i ++)
		scanf("%lld" , &a[i]) ;
	for(int i = 1 ; i <= n ; i ++)
	{
		int j = i ;
		while(j <= n && a[j] == a[i]) j ++ ;
		q.push({i , j - 1 , a[i]}) ;
		i = j - 1 ;
	}
	int ans = 0 ;
	Segment t ;
	while(q.size() > 1 || q.top().val != 1)
	{
		t = q.top() ;
		q.pop() ;
		int res = 0 ;
		while(q.size() && t.r + 1 == q.top().l && t.val == q.top().val)
		{
			t.r = q.top().r ;
			q.pop() ;
			res ++ ;
		}
		t.val = (LL) sqrt(t.val / 2 + 1) ;
		q.push(t) ;
		if(q.size() > 1 || q.top().val != 1)
			ans ++ ;
	}
	LL r = 1e18 ;
	printf("%d" , ans) ;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2022十三届蓝桥杯省赛赛时代码 的相关文章

  • [C++]命令模式

    命令模式 将一个请求封装为一个对象 从而使你可用不同的请求对客户进行参数化 对请求排队或记录请求日志 以及支持可撤销的操作 github源码路径 https github com dangwei 90 Design Mode 此文件包含 m
  • Linux清除原有ssh密钥方法

    Linux清除原有ssh密钥方法 1 问题现象 以前在mac的终端下面使用ssh user localhost输入密码就可以连接到远程的SSH服务器 今天连接的时候老是提示如下错误 KENFORFORLIN kenforstar sudo

随机推荐

  • pyecharts 折线图画成平滑曲线

    is smooth gt bool 是否平滑曲线显示 默认为 False 伪代码 from pyecharts import Line def draw picture column data line Line line add is s
  • w10打开网络计算机退出,Win10网络发现已关闭怎么办?

    如果已启用网络发现 则这台计算机可以发现网络上的其他计算机和设备 而且其他网络计算机也可以发现这台计算机 最近就有使用win10系统的用户发现网络提示 网络发现已关闭 网络计算机和设备不可见 请启用网络和共享中心中的网络发现 这篇文章就是P
  • root密码忘记了怎么办?(centos7)

    因为自己要记的密码过多 有时候会突然想不起或者忘记密码 比如你重要的Linux密码 别担心 这就教你如何用紧急救援模式重设root密码 开启此虚拟机 进入centos7系统 稍等片刻进入下图页面 默认选中得是第一个选项 如果不是可以用方向键
  • .net出现提交数据错误,提示Nancy.RequestExecutionException错误

    问题描述 提交数据报错 开发环境VS2017 更改了实体类 增加了字段 在webservice中清理重新生成后仍报错 解决方法 需重新引用实体类CFinal Application Entity和映射CFinal Application M
  • 安装交叉编译工具:arm-himix200-linux

    准备工作 下载交叉编译工具 arm himix200 linux 百度网盘 链接 https pan baidu com s 1XuRLd3J6S68X k6Sq1DmwA 提取码 dzas ubuntu版本 vmare安装的ubuntu1
  • 运维之DNS域名解析服务基础概念与Bind9安装

    0x00 前言简述 基础概念 基础术语 记录类型 0x01 DNS服务介绍 原理流程 实验目标 0x02 DNS服务之Bind9 Ubuntu 安装 CentOS 安装 Docker 容器 1 源码编译安装 2 APT仓库安装 Bind9
  • 游戏介绍网站-网页设计期末结课作业

    一个游戏介绍网站 附资源链接 资源下载链接 介绍 是一个用来介绍个人游戏的主页 适用于移动和PC端 是本人一个前端期末结课作业 软件架构 html css javascript jquery vue 安装教程 无需安装 直接打开即可 使用说
  • 【笔记】Go语言学习笔记

    一 概述 什么是程序 程序 为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合 Go语言 是区块链最主流的编程语言 同时也是当前最具发展潜力的语言 Go语言是Google公司创造的语言 也是Google主推的语言 Googl
  • Mitmproxy 新版配置上游(二级)代理

    Mitmproxy 最新新版配置上游代理 由于在 4 0版本之后flow live change upstream proxy server proxy 方法已经弃用 会引发 AttributeError NoneType object h
  • UGUI之Image、RawImage使用说明

    UGUI之Image RawImage使用说明 Image说明 基本属性 图片切割 九宫格 图集 RawImage可以做什么 用途一 小地图 用途二 帧动画 动图 小常识 Image说明 Image是UGUI中最常见的控件 用于图片的显示
  • golang安装步骤

    1 首先找到资源下载地址 https studygolang com dl 2 下载完毕后 下图是下载好的文件 新建一个文件夹install path 当作安装目录 此处的install file 是下载的资源文件 install path
  • 2021/2/26 单链表应用------一元多项式

    单链表应用 一元多项式 学习时间 2021 2 26 题目名称 单链表应用 一元多项式 问题描述 编写一个程序用单链表存储多项式 并实现两个一元多项式A与B相加的函数 A B刚开始是升序的 A与B之和按降序排列 例如 多项式A 1 2X 0
  • 随机高斯分布的100个2D点

    import numpy as np import matplotlib pyplot as plt 生成随机的10个点 分布在300x300的区域内 num nodes 1000 mean 150 150 高斯分布的均值 cov 500
  • 程序员必读书籍一览表

    书籍推荐 按角色划分 一 软件工程师 Clean Code 代码整洁之道 Implementation Patterns 实现模式 Code Complete 代码大全 Refactoring Improving the Design of
  • 内联函数使用注意事项

    class TableClass private int I j public int add return I j inline int dec return I j int GetNum inline int tableclass Ge
  • uinapp发送和处理二进制数据流

    uinapp发送和处理二进制数据流 将二进制数据流转为json param Object buffer export function buffer to json buffer return JSON parse base64 decod
  • github学习记录目录

    说明 很久没有更新过CSDN了 一方面是因为图片上传和排版过于麻烦 另一方面是因为没有另一方面 懒狗一只 其实是放在GitHub了 CSDN里的东西也不想搬过去 权当重新开始学习啦 平时的学习记录均会不定时的上传到GitHub上 希望走过路
  • 【数据集】——SBD数据集下载链接

    简介 SBD Dataset 是一个语义边界数据集 其包含来自 PASCAL VOC 2011 数据集中 11355 张图片的注释 这些图片均基于 Amazon Mechanical Turk 其中分割之间的冲突均为手动解决 此外 每张图像
  • hadoop之hello world

    初学hadoop 这是第一个例子wordCount import java io IOException import java util StringTokenizer import org apach hadoop conf impor
  • 2022十三届蓝桥杯省赛赛时代码

    1478 14 应该就是取模问题 include