\(\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的更多相关文章

  1. noip模拟32[好数学啊]

    noip模拟32 solutions 真是无语子,又没上100,无奈死了 虽然我每次都觉得题很难,但是还是有好多上100的 战神都200多了,好生气啊啊啊 从题开始变难之后,我的时间分配越来越不均匀, ...

  2. Noip模拟32(再度翻车) 2021.8.7

    T1 Smooth 很水的一道题...可是最傻    的是考场上居然没有想到用优先队列优化... 上来开题看到这个,最一开始想,这题能用模拟短除法,再一想太慢了,就想着优化 偏偏想到线性筛然后试别的素 ...

  3. 2021.8.6考试总结[NOIP模拟32]

    T1 smooth 考场上水个了优先队列多带个$log$,前$80$分的点跑的飞快,后面直接萎了. 其实只需开$B$个队列,每次向对应队列中插入新的光滑数,就能保证队列中的数是单调的. 为了保证不重, ...

  4. NOIP模拟 32

    我在31反思中膜拜过了B哥 没想到这次又... 我给老姚家丢脸了...STO 首先T1暴力就写挂了... 贪图从$n^3$*$2^n$优化成$n^2$*$2^n$然后打错了 哗哗的扔分 而且正解都想不 ...

  5. NOIP 模拟 $32\; \rm Walker$

    题解 \(by\;zj\varphi\) 发现当把 \(\rm scale×cos\theta,scale×sin\theta,dx,dy\) 当作变量时只有四个,两个方程就行. 当 \(\rm n\ ...

  6. NOIP 模拟 $32\; \rm Six$

    题解 二维状压. 第一维直接压选不同质因子的方案,第二位压方案. 分两种讨论,显然一种方案最多出现两次,否则就不合法了,所以一种是出现了一次的,另一种是出现了两次的,这样可以减小状态数. 实现可以用 ...

  7. NOIP 模拟 $32\; \rm Smooth$

    题解 \(by\;zj\varphi\) 很简单的贪心题. 开 \(B\) 个队列,每个队列存最后一次乘上的数为当前队列编号的数. 每次去所有队列中队首的最小值,不用开堆,因为开堆用于将所有数排序,但 ...

  8. noip模拟33

    \(\color{white}{\mathbb{失足而坠千里,翻覆而没百足,名之以:深渊}}\) 这场考试的时间分配非常不科学 开题试图想 \(t1\) 正解,一个半小时后还是只有暴力,特别惊慌失措 ...

  9. NOIP模拟题汇总(加厚版)

    \(NOIP\)模拟题汇总(加厚版) T1 string 描述 有一个仅由 '0' 和 '1' 组成的字符串 \(A\),可以对其执行下列两个操作: 删除 \(A\)中的第一个字符: 若 \(A\)中 ...

随机推荐

  1. 论文笔记:(2019)GAPNet: Graph Attention based Point Neural Network for Exploiting Local Feature of Point Cloud

    目录 摘要 一.引言 二.相关工作 基于体素网格的特征学习 直接从非结构化点云中学习特征 从多视图模型中学习特征 几何深度学习的学习特征 三.GAPNet架构 3.1 GAPLayer 局部结构表示 ...

  2. python UI自动化之鼠标事件

    使用 pyautogui 模块:import pyautogui 1. 鼠标移动至:1629,875是电脑屏幕坐标:0.25是移动时间 pyautogui.moveTo(1629,875, durat ...

  3. tomcat启动时启动窗口出现乱码一招搞定

    先来看看问题(图示),在tomcat的启动窗口打印的启动信息中包含了大量的中文乱码,虽然这些对tomcat本身的使用没有任何影响,但却非常碍眼,影响视觉效果! tomcat启动时启动窗口出现乱码的解决 ...

  4. netty系列之:文本聊天室

    目录 简介 聊天室的工作流程 文本处理器 初始化ChannelHandler 真正的消息处理逻辑 总结 简介 经过之前的系列文章,我们已经知道了netty的运行原理,还介绍了基本的netty服务搭建流 ...

  5. linux 高并发socket通信模型

    ------select 1 一个误区很多人认为它最大可以监听1024个,实际上却是文件描述符的值不能大于等于1024,所以除掉标准输入.输出.错误输出,一定少于1024个,如果在之前还打开了其他文件 ...

  6. Notes about BSD

    FreeBSD: mainly for web server; OpenBSD: mainly for security concerned server;

  7. tomcat服务监控分析及自启

    #! /bin/bash # process-monitor.sh serverName="/usr/local/apache-tomcat-7.0.72-8080" #获取进程i ...

  8. S3C2440—4.时钟系统

    文章目录 一.S3C2440时钟体系介绍 1.总线与时钟 2.时钟来源 3.选择时钟 4.产生时钟 5.流程 二.如何配置时钟源 1.设置FCLK频率寄存器 MPLLCON 2.设置分频HDIV.PD ...

  9. 一文搞懂B树、B-树、B+树

    前言 B树和B-树是同一种数据结构,如果不清楚的话,会被面试官忽悠,所以本文介绍两种数据结构,B树和B+树,废话不多数咱们开干. B树 介绍 在计算机科学中,B树是一种自平衡的树,能够保持数据有序.这 ...

  10. 【spring 注解驱动开发】spring对象的生命周期

    尚学堂spring 注解驱动开发学习笔记之 - 生命周期 生命周期 1.生命周期-@Bean指定初始化和销毁方法 2.生命周期-InitializingBean和DisposableBean 3.生命 ...