我知道这一切都是荒谬的|

Star_LIcsAy

园龄:3年粉丝:3关注:1

📂C++
2022-09-23 19:33阅读: 212评论: 2推荐: 0

赛前复习记录

9.22

  • CF1C,成功用正确思路写出了一份错误代码。

9.23

  • 修改了昨日 CF1C,发现问题是 eps 写太大了……

  • CF2C,目前被技术性难题卡住。

  • P1549,已完成。使用了奇怪的 DFS

(ps:我怎么感觉这两天的 CF 题都属于是在手动帮我恶补高中数学?)

9.24

T1

题目描述

题目描述

小 Y 酷爱的接龙游戏正是这样。玩腻了成语接龙之后,小 Y 决定尝试无平方因子二元合数接龙,规则如下:
现有 n 个不超过 106 的合数,每个均可表示为 a=p×q(p,q 为两个互异素数)。
a=p1×q1(p1<q1)b=p2×q2(p2<q2),当且仅当 q1=p2b 能接在 a 后面。
请问从给定的这 n 个数中选数接龙,最长可以形成一个包含多少数的接龙序列?

输入格式

第一行输入一个正整数 n,意义如题干所述。(n50000
第二行输入 n 个不超过 106 的合数。

输出格式

输出仅一个整数,表示问题的答案。

  • 读题,容易发现可以依靠这个素数的限制条件来建图,而且建出来是一个 DAG (有向无环图);

  • 但鉴于我的图论太垃了,所以我选择不用图论。观察限制条件可以发现,如果找到符合条件的序列,除了相邻两个数有一个共同质因数以外,还有一个条件就是这个序列一定是严格单调递增的。
    所以首先就可以对原序列 sort 一下。
    考虑 DP,设计状态 fi 为以第 i 个质数为开头的序列往后最长能接多长。从后往前扫描排序过的序列,对每一个数分解质因数为 ai=pa×pb(pa<pb),那么显然就有一个转移为 fa=max(fa,fb+1)

AC code
#include<bits/stdc++.h>
using namespace std;

inline int read(){
	int s=0,f=1;
	char ch=getchar();
	while(!isdigit(ch)){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(isdigit(ch)){
		s=s*10+int(ch-'0');
		ch=getchar();
	}
	return s*f;
}

#define re register

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

int n;
int a[N];
int p[N<<1],st[M],tot=0;
int len[N<<1];
int ans=0;

void pre(){
	for(re int i=2;i<M;++i){
		if(!st[i])
			p[++tot]=i,st[i]=tot;
		for(re int j=1;j<=tot && p[j]*i<M;++j){
			st[p[j]*i]=-1;
			if(i%p[j]==0)
				break;
		}
//		cout<<i<<" "<<st[i]<<endl;
	}
	return ;
}

int main(){
//	freopen("chain.in","r",stdin);
//	freopen("chain.out","w",stdout);
	pre();
//	cout<<tot<<endl;
	n=read();
	for(re int i=1;i<=n;++i)
		a[i]=read();
	sort(a+1,a+n+1);
	int x,y;
	for(re int i=n;i;--i){
		for(re int j=1;j<=tot;++j){
			if(a[i]%p[j]==0){
				x=j,y=st[a[i]/p[j]];
				break;
			}
		}
//		if(x>y) swap(x,y);
		len[x]=max(len[x],len[y]+1);
		ans=max(len[x],ans);
	}
	printf("%d",ans);
	return 0;
}

T3

题目描述

题目描述

给出两个数 A,B(BA),问有多少个序列满足以下条件:

  1. 序列是递增的。
  2. 所有数字属于区间 [A,B](包括 ABBA100) 。
  3. 序列中的所有数字两两互质。

输入格式

一行输入两个数 A,B,其中 1AB1018BA100

输出格式

输出对应的答案。

  • 考场上没怎么细看,写了个 O(2BA) 的暴力,但是挂了;

  • 状压 DP。观察数据范围可以发现,由于 BA 的差最多只有 100,说明会在这段区间中重复出现的质因数在 100 以内,而 100 以内的质因数只有 25 个,考虑状压。

  • 首先对于 70% 的数据,有 BA50。此时只有 15 个质数需要考虑。设 fi,j 表示考虑到第 i 个数(对应 A+i),序列里的数包含的质因数状态为 j 时共有多少个不同序列。
    那么显然有当不选这第 i 个数时,f 数组直接从 i1 copy 过来。
    而当要选择第 i 个数时,设 p 表示这个数包含的质因数情况,那么从 p 相对于全集 U 的补集 v 中考虑转移(因为要求两两互质,说明整个序列中每个质因数至多被一个数包含),就有 fi,s|p+=fi1,ss 表示 v 的任意子集。

  • 对于 100% 的数据,由于没有离谱的 Hack 点,所以在每个区间中总会出现一些质因数只被一个数包含。那么这些数可以不用考虑,状压范围减小。

AC code
#include<bits/stdc++.h>
using namespace std;

#define ll long long

const int N=(1<<23)+10;

ll a,b;
int n;
int t=25;
int p[30]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
int f[N];
int cnt[30];
int num[105];

int main(){
	scanf("%lld%lld",&a,&b);
	n=b-a+1;
	for(int i=0;i<=n;++i){
		ll x=a+i;
		for(int i=0;i<t;++i)
			if(x%p[i]==0)
				++cnt[i];
	}
	int dx=0;
	for(int i=0;i<t;++i){
		if(dx) p[i-dx]=p[i];
		if(cnt[i]<=1) ++dx;
	}
	t-=dx; 
	for(int i=0;i<n;++i){
		ll x=a+i;
		for(int j=0;j<t;++j)
			if(x%p[j]==0)
				num[i]|=1<<j;
	}
	f[0]=1;
	int u=(1<<t)-1;
//	cout<<u<<endl;
	for(int i=0;i<n;++i){
		int v=u^num[i];
		for(int j=v;j;j=(j-1)&v)
			f[j|num[i]]+=f[j];
		f[num[i]]+=f[0];
	}
	ll ans=0;
	for(int i=0;i<=u;++i)
		ans+=f[i];
	printf("%lld",ans-1);
	return 0;
}

9.27

先说一下,虽然初赛出分了,但我没敢看

  • 完成了之前 CF2C.

  • 开始写 CF3D 了。

9.28

查了分,看来暂时我还能不退役

9.29

本文作者:Star_LIcsAy

本文链接:https://www.cnblogs.com/Star-LIcsAy/p/16723989.html

版权声明:本作品采用Star_LIcsAy许可协议进行许可。

posted @   Star_LIcsAy  阅读(212)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 Paradise Lost 不安定/言和
  2. 2 我从人间走过 瞳莹/言和
  3. 3 被神明所抛弃 瞳莹/乐正绫
  4. 4 JUSF周存/洛天依
  5. 5 梦之森 JUSF周存/洛天依/言和
  6. 6 四重罪孽 DELA/雨狸/洛天依/言和
  7. 7 五重空洞 DELA/雨狸/洛天依/乐正绫
  8. 8 神っぽいな 初音未来
  9. 9 微观戏剧 言和
  10. 10 Reincarnate 寺岛拓笃
  11. 11 DELA/雨狸/洛天依
  12. 12 多情岸 AtonyP/乐正绫
  13. 13 我对孤独一无所知 洛天依
  14. 14 【洛天依V5】世界沉睡童话 洛天依
  15. 15 人是_ 周深
  16. 16 双向倾诉 洛天依/言和
  17. 17 三重爱恋 洛天依/言和
  18. 18 山河令 洛天依
  19. 19 夜航星 洛天依
  20. 20 此处通往天空 星尘
  21. 21 雪夜千阳 洛天依
  22. 22 单行恶魔 乐正绫
  23. 23 创作者之死 洛天依/狐狸座vul
  24. 24 日心陨落 乐正绫
  25. 25 八分之一 镜音铃/镜音连
  26. 26 多重妄想 洛天依
  27. 27 アブノーマリティ・ダンシンガール ぐちり/v flower
被神明所抛弃 - 瞳莹/乐正绫
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 瞳荧

作曲 : 杨幼京

被神明所抛弃

策划:瞳荧

作词:瞳荧

作曲:杨幼京

编曲:烂兔子P

演唱:乐正绫

调校:鬼面P

混音:烂兔子P

曲绘:大雨君

PV:点映工作室

「她拥有清澈眼睛,最为纯洁的心灵。

我愿意割弃羽翼陪她信仰神明。」

恶魔温柔了神情「 我爱她等同生命,

也许您不能理解我们的感情。」

他听完嗤笑一声「吾准许汝辞行,

记住汝选择不要后悔这决定。」

等周围逐渐安静

「你在笑什么事情?」

我悄悄开口问他另一个魂灵。

(他闭上眼睛~)

「就是因为曾经尝过太多的冷暖人情,

所以才懂得爱有多容易被消磨耗尽,

恨相对来说,反而难被遗忘更加刻骨铭心。

愚蠢的人总是这样,伤痕累累还愿相信。」

似经历很多事情,好奇他过去生平。

我翻越地狱层岭穿过时光镜。

时空扭转了光阴,至创世第六天停。

神赐予美德骄傲诞光耀晨星。

常在九天间穿行,万物合奏齐鸣。

一双眸温柔容纳世间所有景。

光亲吻完美身形,魂魄剔透又纯净。

他一切全都美好的像是梦境。

(易碎的梦境)

可他仰慕的父神最为宽厚也最无情,

不由拒绝的剥夺骄傲安上傲慢罪名。

他堕天而行,无尽深渊中绝望沉睡后苏醒。

纯白褪去黑暗染浸,语气决然「舍吾之名」。

我陪他在圣殿观看蝙蝠传送回的画影。

魔被钉在圣洁十字架上日夜遭受火刑。

爱的少女悲怜开口「圣火会洗去你不净。」

王座的他轻讽「幸福 永远都是易碎泡影。」

「早习惯黑暗独自存活可还向往光明。

害怕被灼伤偏偏固执的向温暖靠近。

多可笑生灵,捧颗受尽磨难尚可残喘的心。

明知前方陌路穷途,还不肯将希望灭湮。」

「亲爱的殿下,甘愿献上我的精魂与生命。

伴您身侧化为光影,直到某日唤我之名。」