首页 > 其他分享 >【比赛】高一下三调

【比赛】高一下三调

时间:2024-05-03 16:44:34浏览次数:16  
标签:比赛 int 一下 ll cout long 三调 500 define

A. 李时珍的皮肤衣

看不出规律就打表

点击查看代码
#include <bits/stdc++.h>
#define ll __int128
using namespace std;
long long n;
void p(ll x)
{
	if(!x)return;
	p(x/10);
	cout<<int(x%10);
}
ll qpow(ll a,ll b)
{
	ll ans=1;
	while(b)
	{
		if(b&1)ans=ans*a%n;
		a=a*a%n;
		b>>=1;
	}
	return ans;
}
int main()
{
	freopen("lsz.in","r",stdin);
	freopen("lsz.out","w",stdout);	
	cin>>n;
	ll pp=(qpow(2,n-1)+1+n)%n;
	if(!pp)cout<<0;
	else p(pp);
	return 0;
}

B. 马大嘴的废话

首先如果用hash话会T

Hash
#include <bits/stdc++.h>
#define ll long long
#define ull long long
using namespace std;
const int N =1e4+5,B=233;
int n,m,len[N];ull ha[N][25],p[25];
string s,x;
void get(int d)
{
	len[d]=s.size();
	for(int i=1;i<=len[d];i++)
	{
		ha[d][i]=ha[d][i-1]*B+s[i-1];		
	}
}
ull Hash(int l,int r,int i)
{
	return ha[i][r]-ha[i][l-1]*p[r-l+1];
}
int main()
{
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	freopen("mdz.in","r",stdin);
	freopen("mdz.out","w",stdout);	
	cin>>n;
	p[0]=1;
	for(int i=1;i<=20;i++)p[i]=p[i-1]*B;
	for(int i=1;i<=n;i++)
	{
		cin>>s;
		get(i);
	}
	cin>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>x;
		ull has=0;
		int l=x.size();
		for(int i=1;i<=l;i++)
		{
			has=has*B+x[i-1];		
		}
		int ans=0;
		for(int j=1;j<=n;j++)
		{
			if(len[j]<l)continue;
			else 
			{
				for(int st=1;st<=len[j]-l+1;st++)
				{
					if(Hash(st,st+l-1,j)==has)
					{
						ans++;
						break;
					}
				}
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}

我们可以考虑字典树,如何在树中插入呢,当输入一个字符串时,不能只插入一个整串,这样不方便查找,必须把这个字符串的子串插入,方便查找,用一个数组同步记录每个字符出现次数

然后需要用数组记录一下当前子串属于那个整串,防止记重

优化后
#include <bits/stdc++.h>
#define ll long long
#define ull long long
using namespace std;
const int N =1e4+5,B=233;
int n,m;int son[N*50][27],num[N*50][27],cnt=1;int vis[N*50][27];
string s,x;
void insert(const string &s,int id)
{
	int len=s.size()-1,now=1;
	for(int i=0;i<=len;i++)
	{
		int ch=s[i]-'a';
		if(!son[now][ch])
		{
			son[now][ch]=++cnt;
			vis[now][ch]=id;
			num[now][ch]++;
		}else
		{
			if(vis[now][ch]!=id)num[now][ch]++,vis[now][ch]=id;
		}
		
		now=son[now][ch];
	}
}
int query(const string &s)
{
	int len=s.size()-1,now=1;
	int ans=0;
	for(int i=0;i<=len;i++)
	{
		int ch=s[i]-'a';
		if(!son[now][ch])
		{
			return 0;
		}
		ans=num[now][ch];
		now=son[now][ch];
	}
	return ans;	
}
int main()
{
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	freopen("mdz.in","r",stdin);
	freopen("mdz.out","w",stdout);	
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>s;
		int len=s.size()-1;
		for(int k=0;k<=len;k++)
		{
			string tmp=s.substr(k,len-k+1);
			insert(tmp,i);		
		}
	}
	cin>>m;
	for(int i=1;i<=m;i++)
	{
		cin>>x;
		cout<<query(x)<<endl;
	}
	return 0;
}
/*

*/

D. 清理牛棚

用DP

E. 历史研究

  1. 开longlong
  2. 注意细节
  3. 要离散化
    先说分块的做法,首先分块,按块预先处理处每个元素出现次数的前缀和,然后预先处理处i~j块之间的答案编号
    查询时,我们用桶记录出现次数与重要度的乘积,散块暴力,整块直接出答案(记的加上分块中的),然后比较哪个最大即可
点击查看代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N =1e5+5;
int n,q,sq,st[500],en[500],belong[N],tot,ans[500][500];
ll b[N],a[N],cnt[500][N];map <ll,int> mp;
void init()
{
	sq=sqrt(n);
	for(int i=1;i<=sq;i++)
	{
		st[i]=n/sq*(i-1)+1;
		en[i]=n/sq*i;
	}
	en[sq]=n;
	for(int i=1;i<=sq;i++)
	{
		for(int j=st[i];j<=en[i];j++)
		{
			belong[j]=i;
		}
	}
	for(int i=1;i<=sq;i++)
	{
		for(int j=1;j<=n;j++)cnt[i][j]=cnt[i-1][j];
		for(int j=st[i];j<=en[i];j++)
		{
			cnt[i][a[j]]++;
		}
	}
	ll res=0,id=0;
	for(int i=1;i<=sq;i++)
	{
		for(int j=i;j<=sq;j++)
		{
			ans[i][j]=ans[i][j-1];
			res=b[ans[i][j]]*(cnt[j][ans[i][j]]-cnt[i-1][ans[i][j]]);
			id=ans[i][j-1];
			for(int k=st[j];k<=en[j];k++)
			{
				int p=a[k];
				if(res<b[p]*(cnt[j][p]-cnt[i-1][p]))
				{
					res=b[p]*(cnt[j][p]-cnt[i-1][p]);
					id=p;
				}
			}
			ans[i][j]=id;
		}
	}	
}
ll tong[N];
ll query(int l,int r)
{
	ll Ans=0;
	if(belong[l]==belong[r])
	{
		for(int i=l;i<=r;i++)
		{
			tong[a[i]]+=b[a[i]];
			Ans=max(Ans,tong[a[i]]);
		}
		for(int i=l;i<=r;i++)tong[a[i]]=0;
	}else
	{
		int res=ans[belong[l]+1][belong[r]-1];
		for(int i=l;i<=en[belong[l]];i++)
		{
			if(!tong[a[i]]&&a[i]!=res)
			{
				tong[a[i]]+=b[a[i]]*(cnt[belong[r]-1][a[i]]-cnt[belong[l]][a[i]]);
			}
			tong[a[i]]+=b[a[i]];
			Ans=max(tong[a[i]],Ans);
		}	
		for(int i=st[belong[r]];i<=r;i++)
		{
			if(!tong[a[i]]&&a[i]!=res)
			{
				tong[a[i]]+=b[a[i]]*(cnt[belong[r]-1][a[i]]-cnt[belong[l]][a[i]]);
			}
			tong[a[i]]+=b[a[i]];
			Ans=max(tong[a[i]],Ans);
		}
		Ans=max(Ans,(tong[res]+(cnt[belong[r]-1][res]-cnt[belong[l]][res])*b[res]));
		for(int i=l;i<=en[belong[l]];i++)tong[a[i]]=0;
		for(int i=st[belong[r]];i<=r;i++)tong[a[i]]=0;	
		
	}
	return Ans;
}
int main()
{
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
//	freopen("lsyj_ex.in","r",stdin);
//	freopen("a.in","r",stdin);
//	freopen("a.out","w",stdout);	
	cin>>n>>q;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
		if(!mp[a[i]])
		{
			mp[a[i]]=++tot;
			b[tot]=a[i];
		}
		a[i]=mp[a[i]];
	}
//	for(int i=1;i<=n;i++)
//	{
//		cout<<a[i]<<" ";
//	}
//	cout<<endl;
	int l,r;
	init();
	for(int i=1;i<=q;i++)
	{
		cin>>l>>r;
		cout<<query(l,r)<<endl;
		
	}
	return 0;
	
}
/*
5 5
9 8 7 8 9
1 2
3 4
4 4
1 4
2 4
*/

标签:比赛,int,一下,ll,cout,long,三调,500,define
From: https://www.cnblogs.com/wlesq/p/18171313

相关文章

  • 2024.5.3【比赛】高一下三调
    为了拓宽自己的英雄池,还是要写一下。分数&排名:理想:会牵挂的叫亲人,回不去的是故乡。现实:神虎一跃,威震天地!A.李时珍的皮肤衣今天输了,明天也要卷土重来。赛后加点卡赛时是不理解的。为啥这次就加点,上次数据范围错了都不把数据范围错的删了给我重测。自己手动模......
  • 高一下三模
    前传(想题ing)某人:热搜有一个“20岁小伙……”我:(?,看看热搜)(看热搜ing)Huge:你公自来机房就是干这个的?(以下省略N字)Huge:你下次(whk)考试要是没有进步公自就不要来机房了(?)正文语文——105pts并不是很中规中矩的分数但是没啥数学——112pts相当有说道一直觉得立体几何......
  • 20240502比赛总结
    [NOIP2017提高组]时间复杂度https://gxyzoj.com/d/hzoj/p/3673按题意模拟即可时间复杂度的计算方式是:常数->常数O(1)常数->nO(n)n->nO(1)就是细节很多,也不会算时间复杂度,挂成了40代码:#include<cstdio>#include<iostream>#include<string>#include<map>#......
  • 在Windows防火墙设置中,允许单播响应(Unicast Response)是一个控制选项,用于允许或禁止系
    在Windows防火墙设置中,允许单播响应(UnicastResponse)是一个控制选项,用于允许或禁止系统对多播或广播网络流量的单播响应。让我详细解释一下允许和禁止单播响应的区别:允许单播响应(是):当设置为“是”时(默认值),Windows系统会允许对多播或广播网络流量的单播响应。这意味着当系......
  • 记录一下给win+ubuntu双系统的ubuntu加装机械硬盘作为/home挂载的折腾过程
    由于我的双系统电脑是:1T固态的win11系统盘+4T的机械盘,1T的另一个单独固态作为Ubuntu的系统盘;其中/home大约是900G,跑程序的缘故,有点不太够用,因此,决定给Ubuntu加装一个4T的机械硬盘。经过调研,发现可以将新加装的机械硬盘单独作为/home挂载,这样就做到了数据和系统分离;参考的......
  • 记录一下MySQL的连接
       简单的2张表演示1.左连接SELECTCustomerPro.ID,CustomerPro.CustomerName,Employee.EmployeeNameFROMCustomerProLEFTJOINEmployeeonCustomerPro.EmployeeID=Employee.ID2.右连接SELECTCustomerPro.ID,CustomerPro.CustomerName,Employee.EmployeeName......
  • 三调“快乐”记
    三调了,嗯,浅说一下自己6科T了5科的经历吧数学:被向量背刺了,30分钟写了4.5道大题,当时只有将近半小时,我还没动大题。。。有一道向量,没写,最后半文,3分钟没想出来,所以只有4.5题,倒数第二题第二问本来用初中知识写出来了,却算错了,导致过程分也没了(但方法是对的,我还因为这个在数学课上小......
  • 记录一下怎么保证MQ消费消息去重,消息重试
    先说背景,有消息生产,有很多SQL表名称,对应去统计不同表的数据,更新数量,但是这些消息会重复,可能有很多逻辑都要重复执行,可能会速度慢生产:这是SQL解析,重要的是这段,tableName是枚举里面固定的,图片中有显示RabbitMQSender.sendMessage(MQConfig.FIRST_PAGE_SQL_ROUTINGKEY,table......
  • 记录一下docker desktop windows安装,容器安装等
    安装包下载https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe    docker应用管理工具,选择性安装https://www.rainbond.com/docs/quick-start/quick-installhttps://www.bilibili.com/video/BV1MZ4y1b7wW/?p=2&spm_id_from=pageDriver&......
  • 周末玩一下云技术,kvm 相关笔记
    由于需要将企业的很贵的显卡和主机装在一个虚拟主机,用来跑 ue5和sd3 用来给用户临时使用,但是怎么将主机虚拟出来成多个主机呢,自己没有有钱请不起人,只能自己学一下虚拟化技术,第一步主机开启硬件支持,grep-E'vmx|svm'/proc/cpuinfo命令的功能是在/proc/cpuinfo文件中搜索......