noip模拟32
\(\color{white}{\mathbb{山高而青云冷,池深而蛟穴昏,行以慎步,援以轻身,名之以:落石}}\)

开题发现 \(t1\) 80分特别好写,于是先写了
但是这个做法没有任何扩展性,导致一直没有往正解的方向想
\(t3\) 看见有点的坐标,以为是计算几何,于是写完 \(t1\) 打了个暴力就看 \(t2\) 了
但事实证明 \(t2\) 的难度实际上是最大的,这次题目难度的判断又出现了严重的失误
A. Smooth
观察 B=2 的情况,发现排好序两因子的次数递增是没有规律的
可以把两个因子都开个队列,每次队里是单调递增的,所以队首是最小值
每次取出所有队首中的最小值,即使下一个排名的光滑数
然后运用类似线性筛的东西给每个大于其最小质因子的数加入其乘质数的值
B. Six
首先,要肯定这道题状态只统计每个质因子出现了几次是不行的,比如第一次插入一个6,那么2和3都被标记出现一次,当另一个6来时,发现其因子共出现两次而不能加入序列导致判断出错
所以需要改进状态
那么对于6来说,不能加入的条件是出现过两个2,或两个3,或1个2或1个3
那么不妨记录状态时一对儿一对儿记,这样可以解决上面的尴尬问题
发现总状态数很多,但是有用状态很少,可以记录在 map 里进行离散
可以记忆化搜索,但是感觉不好理解,所以采用递推的写法,每次更新一层,把每层有用的状态放进 vector 里更新即可
代码实现
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int mod=1e9+7;
const int maxn=1005;
const int maxm=5e6+5;
int cnt,tot,id[maxn][maxn],cnt1,SS[maxm];
long long n,nn,f[maxm],g[maxm],ans,a[maxm],num[maxm];
vector<pair<int,int> >p,q;
vector<int>to[maxm];
map<pair<int,int>,int>mp;
signed main(){
cin>>n;
nn=n;
for(int i=2;1ll*i*i<=n;i++){
if((n%i)==0){
num[++cnt]=i;
while((n%i)==0){
n/=i;
}
}
}
if(n>1)num[++cnt]=n;
n=nn;
for(ll i=1;1ll*i*i<=n;i++){
if((n%i)==0){
// cout<<"ppp"<<endl;
if(i!=1)a[++cnt1]=i;
if(1ll*i*i!=n)a[++cnt1]=n/i;
}
}
// cout<<cnt1<<" "<<cnt<<endl;
// cout<<"hhh"<<endl;
for(int i=1;i<=cnt1;i++){
for(int j=1;j<=cnt;j++){
if((a[i]%num[j])==0)to[i].push_back(j-1),SS[i]|=(1<<(j-1));
}
}
for(int i=0;i<=cnt-1;i++){
for(int j=0;j<=cnt-1;j++){
if(id[j][i])id[i][j]=id[j][i];
else id[i][j]=++tot;
}
}
q.push_back(make_pair(0,0));
f[0]=1;
int cnt2=0;
for(int i=1;i<=cnt*2+1;i++){
tot=-1;
for(int j=0;j<q.size();j++){
cnt2++;
int S=q[j].first;
int T=q[j].second;
ans=(ans+f[j])%mod;
for(int k=1;k<=cnt1;k++){
bool flag=false;
for(int xx=0;xx<=to[k].size()-1;xx++){
for(int yy=xx;yy<=to[k].size()-1;yy++){
if(T&(1<<id[to[k][xx]][to[k][yy]])){
flag=true;
break;
}
}
if(flag)break;
}
if(flag)continue;
int NT=T;
for(int xx=0;xx<=to[k].size()-1;xx++){
for(int yy=0;yy<=cnt-1;yy++){
if((S&(1<<yy))){
NT|=(1<<id[to[k][xx]][yy]);
}
}
}
pair<int,int>pp=make_pair(S|SS[k],NT);
if(mp.find(pp)==mp.end())mp[pp]=++tot,p.push_back(pp),g[tot]=f[j];
else{
g[mp[pp]]=g[mp[pp]]+f[j];
if(g[mp[pp]]>mod)g[mp[pp]]-=mod;
}
}
}
swap(f,g);
memset(g,0,sizeof g);
swap(p,q);
p.clear();
mp.clear();
}
cout<<ans-1<<endl;
// cout<<cnt2<<endl;
return 0;
}
C. Walker
为什么又是解方程题……
把式子展开,发现有 \(scale*sin\),\(scale*cos\),\(dx\),\(dy\) 四个未知数,选取两个点即可解出来
如果 \(n^2\) 枚举可以保证正确性
但是每次随机两个值,多次循环后不对的概率会降到极低
解出 \(sin\),\(cos\) 的值后可以使用 \(acos\) 这个函数解出弧度值,注意正负性不确定需要用 \(sin\) 进行验证
\(\color{white}{\mathbb{又恐琼楼玉宇,高处不胜寒}}\)
noip模拟32的更多相关文章
- noip模拟32[好数学啊]
noip模拟32 solutions 真是无语子,又没上100,无奈死了 虽然我每次都觉得题很难,但是还是有好多上100的 战神都200多了,好生气啊啊啊 从题开始变难之后,我的时间分配越来越不均匀, ...
- Noip模拟32(再度翻车) 2021.8.7
T1 Smooth 很水的一道题...可是最傻 的是考场上居然没有想到用优先队列优化... 上来开题看到这个,最一开始想,这题能用模拟短除法,再一想太慢了,就想着优化 偏偏想到线性筛然后试别的素 ...
- 2021.8.6考试总结[NOIP模拟32]
T1 smooth 考场上水个了优先队列多带个$log$,前$80$分的点跑的飞快,后面直接萎了. 其实只需开$B$个队列,每次向对应队列中插入新的光滑数,就能保证队列中的数是单调的. 为了保证不重, ...
- NOIP模拟 32
我在31反思中膜拜过了B哥 没想到这次又... 我给老姚家丢脸了...STO 首先T1暴力就写挂了... 贪图从$n^3$*$2^n$优化成$n^2$*$2^n$然后打错了 哗哗的扔分 而且正解都想不 ...
- NOIP 模拟 $32\; \rm Walker$
题解 \(by\;zj\varphi\) 发现当把 \(\rm scale×cos\theta,scale×sin\theta,dx,dy\) 当作变量时只有四个,两个方程就行. 当 \(\rm n\ ...
- NOIP 模拟 $32\; \rm Six$
题解 二维状压. 第一维直接压选不同质因子的方案,第二位压方案. 分两种讨论,显然一种方案最多出现两次,否则就不合法了,所以一种是出现了一次的,另一种是出现了两次的,这样可以减小状态数. 实现可以用 ...
- NOIP 模拟 $32\; \rm Smooth$
题解 \(by\;zj\varphi\) 很简单的贪心题. 开 \(B\) 个队列,每个队列存最后一次乘上的数为当前队列编号的数. 每次去所有队列中队首的最小值,不用开堆,因为开堆用于将所有数排序,但 ...
- noip模拟33
\(\color{white}{\mathbb{失足而坠千里,翻覆而没百足,名之以:深渊}}\) 这场考试的时间分配非常不科学 开题试图想 \(t1\) 正解,一个半小时后还是只有暴力,特别惊慌失措 ...
- NOIP模拟题汇总(加厚版)
\(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...
随机推荐
- 3分钟搭建一个网站?腾讯云Serverless开发体验
作为一个开发者,应该都能理解一个网站从开发到上线,要经过很多繁琐的步骤. 编写代码,部署应用,部署数据库,申请域名,申请SSL证书,域名备案,到最终上线起码要几天时间. 作为一个不精通代码的业务玩家, ...
- Git,Linux,Ubuntu,Tmux的常用命令
常用的连接 Git命令 廖雪峰的Git教程 Git常用命令 ubuntu16.04之GitHub入门教程 Linux相关 tmux命令 Ubuntu常用命令速查手册 Linux 命令大全 其它工具 M ...
- Podman 快速入门
今天在某云上新购一台云服务器,发现已经有了 CentOS8.2 官方镜像可选,出于对新鲜事物的好奇,我决定开始采用 CentOS8.2,即使我还没有为它的新特性做好准备. 我的应用主要以单机版容器为主 ...
- Vue学习笔记(二)动态绑定、计算属性和事件监听
目录 一.为属性绑定变量 1. v-bind的基本使用 2. v-bind动态绑定class(对象语法) 3. v-bind动态绑定class(数组语法) 4. v-bind动态绑定style(对象语 ...
- jdk的下载与安装教程
最近在学逆向,就是要反编译人家的java代码,在这之前要先安装环境,下面是下载和安装JDK的教程: 1.JDK下载地址: http://www.oracle.com/technetwork/java/ ...
- 漏洞分析:CVE 2021-3156
漏洞分析:CVE 2021-3156 漏洞简述 漏洞名称:sudo堆溢出本地提权 漏洞编号:CVE-2021-3156 漏洞类型:堆溢出 漏洞影响:本地提权 利用难度:较高 基础权限:需要普通用户权限 ...
- CSS 奇思妙想 | 使用 resize 实现强大的图片拖拽切换预览功能
本文将介绍一个非常有意思的功能,使用纯 CSS 利用 resize 实现强大的图片切换预览功能.类似于这样: 思路 首先,要实现这样一个效果如果不要求可以拖拽,其实有非常多的办法. 将两张图片叠加在一 ...
- 基于ssm的电影售票选座管理系统基于Java的电影网站的网页设计与制作源码
注意:此项目只截图部分功能,可评论区咨询查看项目全部功能演示! 1.开发环境 开发语言: 后台框架:SSM(Spring+SpringMVC+Mybatis) 前端技术:HTML+CSS+JavaSc ...
- Shell-09-文本处理awk
awk 详情见: awk
- SQL 练习35
查询选修「张三」老师所授课程的学生中,成绩最高的学生信息及其成绩 方式1: SELECT Student.sid,Student.sname,t.score from Student , (SELEC ...