首页 > 其他分享 >20240420【提高】模拟

20240420【提高】模拟

时间:2024-04-20 15:44:37浏览次数:20  
标签:mathbf int 提高 cin 模拟 20240420 tie ll dp

T1

只过了这个。模拟样例,将所有 \([i,j]\) 列成一个表格后能很明显找到规律,然后实现的话不好说,看代码。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=5*1145140,M=1919810,mod=998244353;
int n,a[N],s13[N],s31[N]; //AC和CA的前缀和计数
char s[N];
ll sum[N],cnt[N];
int main(){
	freopen("a.in","r",stdin);
	freopen("a.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>(s+1); n=strlen(s+1);
	bool f1=0,f3=0;
	for(int i=1;i<=n;++i){
		a[i]=s[i]-'A'+1;
		s13[i]=s13[i-1];
		if(a[i]==1) f1=1;
		if(f1&&a[i]==3) f3=1;
		if(f1&&f3) s13[i]++,f1=f3=0;
	}
	f1=f3=0;
	for(int i=1;i<=n;++i){
		s31[i]=s31[i-1];
		if(a[i]==3) f3=1;
		if(f3&&a[i]==1) f1=1;
		if(f1&&f3) s31[i]++,f1=f3=0;
	}
	ll las=0,total=0;
	for(int i=n;i>=1;--i){
		sum[i]=sum[i+1];
		if(a[i]!=2){
			if(las&&las!=a[i]) sum[i]++;
			las=a[i];
		}
	}
	ll ans=0,p=1,del=0;
	for(int i=1;i<=n;++i){
		++cnt[sum[i]],total+=sum[i];
		if(sum[i]) ++del;
	}
	for(int i=n;i>=1;--i){
		ans+=total,ans%=mod;
		if(a[i]!=2&&(s13[i]!=s13[i-1]||s31[i]!=s31[i-1])) total-=del,del-=cnt[p],++p;
        //必须是这个位置减了贡献也会相应减去才行,用AC/CA的前缀和计数判断
	}
	cout<<ans;
	return 0;
}

T2

区间dp,没看出来,但是看出来了就好做了。

因为是个环,所以先破环成链,注意战胜的关系也要对应赋值。

设 \(dp[i][j]\) 表示 \(i,j\) 是否可能相邻,若相邻则默认 \(i\) 挑战 \(j\),因为破环成链了所以不影响。枚举 \(i,j\) 都可到达的点 \(k\),即满足 \(dp[i][k]=dp[k][j]=\mathbf{1}\),若 \(i\) 能战胜 \(k\) 或 \(k\) 不能战胜 \(j\),那么 \(dp[i][j]=\mathbf{1}\)

对于每个 \(i\),若 \(dp[i][i+n]=\mathbf{1}\),则 \(i\) 可以是最后赢家。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll int
const ll N=2*1145,M=1919810,mod=998244353;
ll n,a[N][N],dp[N][N];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>n;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			cin>>a[i][j],a[i+n][j]=a[i][j+n]=a[i+n][j+n]=a[i][j];
	for(int len=2;len<=2*n;++len)
		for(int i=1;i<=2*n-len+1;++i){
			int j=i+len-1;
			if(len==2) dp[i][j]=1;
			for(int k=i+1;k<j;++k)
				if(dp[i][k]&&dp[k][j]&&(a[i][k]||!a[k][j])) dp[i][j]=1;
		}
	for(int i=1;i<=n;++i)
		if(dp[i][i+n]) cout<<i<<" ";
	return 0;
}

T3

找规律题,应该做的。首先乘数中有 \(\mathbf{0}\) 的行和列肯定都是相同的一个对应 \(\mathbf{0}\) 的值,先找出来。然后找规律,会对于每一行/列,其变量对应的值就是这一行/列中不同的十位数的个数。具体证明不会。

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define ll int
const ll N=2*1145,M=1919810,mod=998244353;
ll n,a[N][N],b[N][N],ans[N],num[N];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>n;
	for(int i=0;i<n;++i){
		ans[i]=-1;
		for(int j=0;j<n;++j)
			cin>>a[i][j]>>b[i][j];
	}
	for(int j=0;j<n;++j){
		bool fl=0;
		for(int i=0;i<n-1;++i)
			if(a[i][j]!=a[i+1][j]||b[i][j]!=b[i+1][j]) fl=1;
		if(!fl) ans[j]=0;
	}
	for(int j=0;j<n;++j){
		ll tot=0;
		for(int i=0;i<n;++i) num[i]=0;
		for(int i=0;i<n;++i)
			if(!num[a[i][j]]) ++tot,num[a[i][j]]=1;
		if(ans[j]==-1) ans[j]=tot;
	}
	for(int i=0;i<n;++i) cout<<ans[i]<<" ";
	return 0;
}

T4

应该补不了,不过我的搜索实现得确实太劣了……

标签:mathbf,int,提高,cin,模拟,20240420,tie,ll,dp
From: https://www.cnblogs.com/heshuwan/p/18147716

相关文章

  • 如何使用鞋厂ERP等企业管理软件提高企业运营整体效率?
    ERP把企业客户需求、市场规划、产品研发、内部制造等活动以及供应商的资源整合在一起,形成企业一个完整的产业链和供应链,通过企业多个环节的无缝链接和整体运作来提高企业运营整体效率:(1) . 对整个产业链和供应链资源进行管理;  (2) . 迭代研发、精益生产、敏捷制造和同......
  • 模拟在页面点击导入csv
    案例背景组件性能测试过程中,要导入大量自定义的数据。案例分析本案例中采用python的pandas库,模拟了生成导入csv文件,模拟在页面点击导入csv,使文件导入更高效。实现方案1****、在前端页面解析内部接口参数典型的导入流程至少包含上传文件和确认上传。上传文件在浏览......
  • 利用预测不确定性提高安卓恶意软件检测模型性能
    文献简介文献标题:MalCertainEnhancingDeepNeuralNetworkBasedAndroidMalwareDetectionbyTacklingPredictionUncertainty引用:Yang,Liminetal."BODMAS:AnOpenDatasetforLearningbasedTemporalAnalysisofPEMalware",IEEESymposiumonSecurity......
  • 程序执行和模拟
    一、freestanding在之前的学习中都是在linux进行编译。那么从学习的角度看还是freestanding比较简单,图中_start这个程序是作为死循环的,输出一个A后处于while(1)的循环状态。 那么如果我们在freestanding中进行编译呢?要在freestanding中编译首先要明白一个问题,程序如何结束运......
  • 一些提高自动化率的指令
    地址相关//依据HWIO计算IWQW地址#tempAIw:=RD_ADDR(LADDR:=#Interface_panel.AI_HW_IO,PIADDR=>#AI_rdaddr.piadder,PICount=>#AI_rdaddr.picount,PQADDR=>#AI_rdaddr.temppiadder,PQCount=>#AI_rdaddr.temppicount);#tempAQw:=RD_ADDR(LADDR:=#In......
  • P4423 / YC271A [ 20240411 CQYC省选模拟赛 T1 ] 三角形(triangle)
    题意给定\(n\)个点,求平面最小三角形周长。Sol其实挺简单一算法,一直没学。先随机转个∠,然后按照\(x\)排序。考虑分治。注意到分治左右两边的答案对当前可用的区间有限制。将满足限制的点按照\(y\)排序。这里可以归并做到一只\(log\)。然后集中注意力,发现对于每个点......
  • NOI 2024省选OIFC模拟21 T1(思维题)
    原我觉得非常有思维含量的一题没看懂题解,大佬讲的还是没有看懂对于一个集合S,不妨设要将这个集合设为蓝色,考虑一个包含元素最多的一个为蓝色的子集T,那么在包含有S-T集合中的元素的集合必定为红色,因为如果有一个为蓝色,那么这个与前面那个极大蓝色集合交一下就会有一个更大的蓝......
  • 如何从头手动制作一个冲压仿真软件 —— 《冲压模可视化仿真模拟》
    因为工作需要,前段时间曾思考过如何手动做一个冲压仿真软件,但是研究发现这东西居然需要用到很多的数学和物理学的知识,而这方面的知识我又不具备,于是只好作罢,但是后来看到了本文中的这个论文,虽然没有看到全文,但是感觉这个主题还是比较贴切的。原文地址:https://wap.cnki.net/touch......
  • 模拟电路学习笔记——晶体管电流放大作用
    基本共射放大电路△u1为输入电压信号,接入基极——发射极回路,称为输入回路;放大后的信号在集电极——发射极回路,称为输出回路;因发射极是两个回路的公共端,故称该电路为共射放大电路晶体管工作在放大状态的外部条件:发射结正向偏置,集电结反向偏置输入回路中基极电......
  • 2024省选OIFC模拟T1
    题意:给定k颗有n个点的树对于每个点对(i,j),求出其在每棵树上的路径经过的点(含端点)的并集大小。做法:一个比较简单的想法是搞出每个(i,j)在第k颗树上的点的集合,然后所有树并一下,这个再用bitset优化一下,然后有人就过了,而我这位大常数选手就没过。首先容斥为求不经过点的交。考......