The 2021 CCPC Weihai Onsite A,D,J

news/2024/10/23 1:26:28/

A - Goodbye, Ziyin!

题意:

给定一个树的点数和边,问以每个点为根节点,有多少个树为二叉树

思路:

按照入度来算,但凡出现入度>=4的一定不能形成二叉树,入度<=2的拎起来之后可以作为根

int n,m,k,q[N];
void solve(){cin>>n;_for(i,n-1){cin>>k;q[k]++;cin>>k;q[k]++;}int res=0;_rep(i,1,n){if(q[i]<=2)res++;if(q[i]>=4){cout<<0;return ;}}cout<<res;
}

D - Period

题意:

给定一个字符串(仅小写),每次查询尝试把i号修改成‘#',问修改之后有多少个不同的周期

思路:

显然把一个字符变成'#'之后,这个字符串就算有周期,'#'也是处于第一个周期

比如“ccpc"变为“c#pc”之后只能以"c#p"为周期

下一步就可以发现,能形成周期的条件当且仅当前k个字符等于后k个字符(公共前后缀)

例如ABCDAB 以ABCD为一个周期,那么此时CD两个位置都可以容许变成"#" 

然后手玩一下就可以发现,AAACDAAA这种样例,公共前后缀长度分别为1 2 3,那么‘#’

放在1号位,三种周期都用不了

放在2号位,可以用公共前后缀长度为1的周期

放在3号位,可以用公共前后缀长度为1,2的周期

放在4号位,可以用公共前后缀长度为1,2,3的周期

放在5号位,可以用公共前后缀长度为1,2,3的周期

放在6号位,可以用公共前后缀长度为1,2的周期

放在7号位,可以用公共前后缀长度为1的周期

放在8号位,三种周期都用不了

只需要观察当前'#‘不能使用哪些周期就可以计算出来当前可以容纳的不同周期数

#include<iostream>
#include<map>
#include<cmath>
#include<string>
#include<vector>
#include<cstring>
#include<algorithm>
#include<unordered_map>
#define pb push_back
#define fi first
#define se second
#define int long long
#define all(x) (x).begin(),(x).end()
#define _for(i, a) for(int i = 0; i < (a); ++i) 
#define _rep(i, a, b) for(int i = (a);i <= (b); ++i)
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define u1 (u<<1)
#define u2 (u<<1|1)
using namespace std;
typedef pair<int,int> PII;
const int INF=4e18;
const int P1 = 998244353,P2=13331;
const int N=1e6+20;
typedef unsigned long long ULL;
int n,m,k,q[N];
ULL h1[N], p1[N];
ULL h2[N], p2[N];
string s;
ULL get1(int l, int r)
{return h1[r] - h1[l - 1] * p1[r - l + 1];
}
ULL get2(int l, int r)
{return h2[r] - h2[l - 1] * p2[r - l + 1];
}
void init()
{p1[0] = 1;for (int i = 1; i <= n; i ++ ){h1[i] = h1[i - 1] * P1 + s[i];p1[i] = p1[i - 1] * P1;}p2[0] = 1;for (int i = 1; i <= n; i ++ ){h2[i] = h2[i - 1] * P2 + s[i];p2[i] = p2[i - 1] * P2;}
}
void solve(){cin>>s;n=s.size();s=" "+s;init();int res=INF;vector<int>v1,v2;_rep(i,1,n/2){if(get1(1,i)==get1(n-i+1,n)&&get2(1,i)==get2(n-i+1,n)){res=i;v1.pb(i);v2.pb(n-i+1);}}if(v2.size())reverse(all(v2));cin>>m;while(m--){int x;cin>>x;int a=lower_bound(all(v1),x)-v1.begin();//合法int b=v2.size()-(upper_bound(all(v2),x)-v2.begin());//非法cout<<min(a,b)<<'\n';}
}
signed main(){IOS;int T=1;_rep(i,1,T){solve();}return 0;
}

J - Circular Billiard Table

题意:

给定入射角(给定a,b,角度为a/b),问最少多少次可以反弹到原来发射的位置(如果不能输出-1)

思路:

根据样例可以发现,把每个反弹点向圆心连线,各个圆心角的角度计算出来

deg=2*β

转一圈圆心角之和为360度,那么假设转了y圈,一共弹了x次

那么就有y*360=x*deg<==>y/x=deg/360=(2*a)/(360*b)

可以发现显然是有解的,并且为了使x最小,弹的最少次数为x/gcd(y,x)次,减去入射一次则为x/gcd(y,x)-1次


http://www.ppmy.cn/news/1541206.html

相关文章

【慕伏白教程】将 Windows11 装进口袋 -- 便携式 Windows 11 制作教程

目录 下载 Windows 11 镜像下载 Rufus开始安装 Windows 11 下载 Windows 11 镜像 打开微软 Windows 11 官方下载网站&#xff0c;找到 下载适用于 x64 设备的 Windows 11 磁盘映像 (ISO) 根据个人情况选择要下载的磁盘镜像&#xff0c;选择多版本 ISO 的话可在安装系统开始时进…

探索 Python 幽默之源:pyjokes 库全解析

&#x1f680; 探索 Python 幽默之源&#xff1a;pyjokes 库全解析 1. 背景介绍&#xff1a;为何选择 pyjokes&#xff1f; 在紧张的编程工作中&#xff0c;幽默是一种有效的缓解压力的方式。pyjokes 是一个专为程序员设计的 Python 库&#xff0c;它提供了丰富的单行笑话&am…

【JavaEE初阶】网络编程TCP协议实现回显服务器以及如何处理多个客户端的响应

前言 &#x1f31f;&#x1f31f;本期讲解关于TCP/UDP协议的原理理解~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不多说…

Torch模型导入

冻结param的3种方式 for param in net.lstm.parameters():param.requires_grad Truenet.lstm.requires_grad True # 无效net.lstm.state_dict()[weight_ih_l0].requires_gradFalsenet.lstm.weight_ih_l0.requires_grad False# dir(net.lstm) to validate attributes …

laravel 查询数据库

数据库准备 插入 三行 不同的数据 自行搭建 laravel 工程 参考 工程创建点击此处 laravel 配置 数据库信息 DB_CONNECTIONmysql #连接什么数据库 DB_HOST127.0.0.1 # 连接 哪个电脑的 ip &#xff08;决定 电脑 本机&#xff09; DB_PORT3306 # 端口 DB_DATABASEyanyu…

web 0基础第五节 链接标签

链接是跳转网页的一种常见的方式 它可以更方便迅速的在网络中找到自己想要的网页 这一节内容主要学习 怎么使用链接 包括点击文字跳转 在同网页中跳转到不同的位置 点击图片跳转 甚至 点击图片的不同位置进行跳转。 超链接标签 <!DOCTYPE html> <html lang"…

json-server详细模拟GET、POST、DELETE等接口数据教程

引言 在前端开发过程中,我们经常需要在后端API尚未就绪的情况下模拟接口数据。json-server是一个强大而灵活的工具,可以帮助我们快速创建一个模拟的RESTful API。本文将详细介绍如何使用json-server来模拟GET、POST、PUT、PATCH、DELETE等常用的HTTP方法,以及如何处理复杂的数…

LeetCode146. LRU 缓存(2024秋季每日一题 37)

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则返回 -1 …