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\)中 ...
随机推荐
- 自学linux——19.TFTP服务器的搭建
TFTP服务器的搭建 1.TFTP的认识 TFTP(Trivial File Transfer Protocol)简单文件传输协议,是一种基于UDP协议在客户端和服务器之间进行简单文件传输的协议,不需 ...
- 自学linux——9.Linux的权限概述
Linux的权限概述 一. 权限概述 1.权限介绍 在多用户(可以不同时)计算机系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权力,像是文件夹.特定系统指令的使用或存储量的限制 ...
- Virustotal工具产品初研
一.产品新特点 1.群体智能 2.VT图 3.VT Yara 规则的生成与优化 4.内容搜索优化(大小及提交数量) 二.产品功能 1. --->安全管理员 威胁平台资源丰富 TIP .MISP ...
- Numpy数组的组合与分割详解
在介绍数组的组合和分割前,我们需要先了解数组的维(ndim)和轴(axis)概念. 如果数组的元素是数组,即数组嵌套数组,我们就称其为多维数组.几层嵌套就称几维.比如形状为(a,b)的二维数组就可以看 ...
- Mybatis源码解析2—— 实例搭建
大家好,我是可乐. 上篇文章给大家撸了一遍用 JDBC 直接操作数据库的实例,还只是简单写了一个查询的接口,其代码量就已经很大了,并且可乐还给大家分析了直接使用 JDBC 带来的一些问题,总之是一种反 ...
- Java协程编程之Loom项目尝鲜
前提 之前很长一段时间关注JDK协程库的开发进度,但是前一段时间比较忙很少去查看OpenJDK官网的内容.Java协程项目Loom(因为项目还在开发阶段,OpenJDK给出的官网https://ope ...
- @ConfigurationProperties实现自定义配置绑定
@ConfigurationProperties使用 创建一个类,类名上方注解,配置prefix属性,如下代码: @ConfigurationProperties( prefix = "he ...
- 从 FFmpeg 性能加速到端云一体媒体系统优化
7 月 31 日,阿里云视频云受邀参加由开放原子开源基金会.Linux 基金会亚太区.开源中国共同举办的全球开源技术峰会 GOTC 2021 ,在大会的音视频性能优化专场上,分享了开源 FFmpeg ...
- 【文件格式探究】EP.1 对ePub文件格式的初探
这是"文件格式探究"专题的第 1 期--初探 "ePub" 文件格式.这个专题将会给各位读者呈现笔者探索各种文件格式的过程,具体则是文件的内容是如何呈现出来的. ...
- 一张图带你搞懂Node事件循环
说一件重要的事儿:你还没关注公众号[前端印记],更多精彩内容等你探索-- 以下全文7000字,请在你思路清晰.精力充沛的时刻观看.保证你理解后很长时间忘不掉. Node事件循环 Node底层使用的语言 ...