首页 > 其他分享 >2024/10/22 模拟赛小记

2024/10/22 模拟赛小记

时间:2024-10-23 16:00:03浏览次数:1  
标签:10 const 22 int 31 am 2024 ll mod

A.日期速算_date

题意:给你一个日期,然后问 k 天之后日期。形式如“20240229”。保证年份在 2000 - 9999 年。

看榜的时候发现挂掉了,有点迷惑。发现思路没什么问题。把 cin,cout 改成 scanf 和 printf 就过了。

。?。什么 oj 特色。

Code
#include<bits/stdc++.h>
using namespace std;
int T;
int n,k;
int y,m,d;
int pd[10010];
int dayy[14]={0,31,28,31,30,31,30,31,31,30,31,30,31};
void init(){
	for(int i=2000;i<=9999;i++){
		if((i%4!=0)||(i%100==0&&i%400!=0)) pd[i]=365;
		else pd[i]=366;
	}
}
void done(int x){
	if(pd[x]==366) dayy[2]=29;
	else dayy[2]=28;
}
void solve(){
	y=n/10000,m=(n-y*10000)/100,d=(n-y*10000-m*100);
	done(y);
	int tot=d;//当前是这一天的第几天
	for(int i=1;i<m;i++){
		tot+=dayy[i];
	}
	int ay=y,am=m;
	if(k>pd[y]-tot){//这一年能过完 
		k-=pd[y]-tot;
		ay++;
		while(k>pd[ay]) k-=pd[ay++];
		am=1;
	}
	else{
		if(k>dayy[am]-d){
			k-=dayy[am]-d;
			am++;
		}
		else{
			cout<<n+k<<endl; 
			return;
		}
	}
	done(ay);
	while(k>dayy[am]) k-=dayy[am++];
	printf("%d",ay);
	if(am<10) cout<<"0";
	printf("%d",am);
	if(k<10) cout<<"0";
	printf("%d\n",k);
}
int main(){
	init();
	scanf("%d",&T);
	while(T--){
		scanf("%d%d",&n,&k);
		solve();
	}
	return 0;
}

B.方阵仪仗队_square

同学给我讲了,大概懂了思路吧。但是我不大想写,如果把同学的码直接粘过来也不大好,于是就不写了。


C.倍数路径_path

原:P9759 [COCI2022-2023#3] Bomboni

赛时写的爆搜。不太好意思啊部分分的暴力不会写主要是我也没咋仔细想。赛后补了一下暴力,略有一点思维吧。能拿一半分。如果 n = 1 的时候就是朴素 dp 统计,如果是小范围那就以对 H 取模来转移。每次统计这个取模的余数情况即可。

Code
#include<bits/stdc++.h>
#define ll long long 
using namespace std;
const int N=510;
const int mod=998244353;
int n,H;
ll ans;
ll a[N][N],f[N][N];
ll f2[N][N][22];
void dfs(int x,int y,ll k){
	if(x==n&&y==n){
		if(k%H==0) ans=(ans+1)%mod;
		return;
	}
	if(x>n||y>n) return;
	if(a[x+1][y]!=-1) dfs(x+1,y,(k*a[x+1][y])%mod);
	if(a[x][y+1]!=-1) dfs(x,y+1,(k*a[x][y+1])%mod);
}
void solve1(){
	f[1][1]=1;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++){
			if(i==1&&j==1) continue;
			if(a[i][j]==-1) continue;
			f[i][j]=(f[i-1][j]+f[i][j-1])%mod;
		}
	ans=f[n][n]%mod;
}
void solve(){
	f2[1][1][a[1][1]%H]=1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(a[i][j]==-1||(i==1&&j==1)) continue;
			for(int k=0;k<H;k++){
				int t=(k*a[i][j])%H;
				f2[i][j][t]=(f2[i][j][t]+f2[i-1][j][k]+f2[i][j-1][k])%mod;
			}
 		}
	}
	ans=f2[n][n][0];
}
int main(){
	scanf("%d%d",&n,&H);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++){
			scanf("%lld",&a[i][j]);
		}
	if(a[1][1]==-1){
		puts("0");
		return 0;
	}
	if(H==1) solve1();
	else if(n<=5) dfs(1,1,a[1][1]);
	else solve();
	cout<<ans;
	return 0;
}

正解的思路和这个就比较像了。

又 T 掉了,不知道什么原因也不大想调了。几乎是对着题解抄了。这两天有点疲倦,毕竟马上 csp 了。

省流:以 gcd 转移。

预处理出来一些 gcd 防 T 掉,统计 K 的各个因数,通过这些因数转移(计算这些数和这个位置的 a[i][j] 的乘积与 K 的公因数,进一步转移)。

Code
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=503;
const int mod=998244353;
int n,K;
int a[N][N];
int ys[2010][2010];
ll f[N][N][244];
ll ans;
int gcd(int a,int b){
	if(a<2010&&b<2010&&ys[a][b]) return ys[a][b];
	if(a<b) swap(a,b);
	if(b) return gcd(b,a%b);
	return a;
}
void init(){
	for(int i=1;i<2010;i++)
		for(int j=i+1;j<2010;j++) ys[i][j]=ys[j][i]=gcd(i,j);
}
vector<int> y;
int num[244],cnt;
int main(){
	init();
	scanf("%d%d",&n,&K);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++){
			scanf("%d",&a[i][j]);
			if(a[i][j]==-1) continue;
			a[i][j]=__gcd(a[i][j],K);
		}
	for(int i=1;i<=K;i++){//分解因数 
		if(K%i==0){
			y.push_back(i);
			num[i]=cnt++;
		}
	}
	f[1][1][num[a[1][1]]]=1;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++){
			if(a[i][j]==-1) continue;
			for(int p=0;p<y.size();p++){
				f[i][j][num[gcd(1ll*y[p]*a[i][j],K)]]=(f[i][j][num[gcd(1ll*y[p]*a[i][j],K)]]+f[i-1][j][p]+f[i][j-1][p])%mod;
			}
		}
	printf("%lld",f[n][n][y.size()-1]); 
} 

D.平行部落_multiverse

原:P8026 [ONTAK2015] Bajtocja

赛时写的朴素暴力,获得了 10pts 的好成绩。

正解是什么,哈希+并查集维护树上启发式合并?不太想学新东西,先鸽一下吧,大概率不会填坑。

标签:10,const,22,int,31,am,2024,ll,mod
From: https://www.cnblogs.com/Moyyer-suiy/p/18493664

相关文章

  • 2024年最新最全傻瓜式教学青龙面板拉取,rabitpro短信登录,账密登录对接无界spy自动监控J
    上一期我们写了服务器宝塔面板搭建,青龙面板拉取并对接短信登录,没看过的小伙伴点传送门直达。这一期我们继续讲进阶教程无界spy对接tgbot自动监控JD线报自动运行开卡教程。从这里开始强烈建议拥有一台外网服务器,比如零成本的甲骨文云,申请需要一点小门槛,就是需要有一张visa或......
  • KBPC1010-ASEMI新能源专用方桥KBPC1010
    编辑:llKBPC1010-ASEMI新能源专用方桥KBPC1010型号:KBPC1010品牌:ASEMI封装:KBPC-4安装方式:直插批号:2024+现货:50000+正向电流(Id):10A反向耐压(VRRM):1000V正向浪涌电流:200A正向电压(VF):1.10V引脚数量:4芯片个数:4芯片尺寸:MIL功率(Pd):中小功率工作温度:-55°C~150°C类型:整流方......
  • 重磅!7本On Hold期刊被踢出SCI,10月WOS目录更新,附EXCEL下载
    【SciencePub学术】重磅!10月WOS目录更新,7本SCI被踢,并且被踢期刊均来自此前被OnHold的期刊,看来OnHold期刊的情形真的不容乐观,接下来小编给大家仔细介绍一下期刊变动情况。继上次WOS期刊目录更新之后,本次10月更新共有以下期刊发生变动:•SCIE:有7本期刊由于质量原因被剔除;......
  • 2024 Fall NJU ISE 课程笔记
    友情链接:https://eaglebear2002.github.iohttps://spricoder.github.iohttps://wbl-z.github.io/1-1自动化测试目录1-2物联网目录2-1数据库目录3-1机器学习目录3-2移动互联网4-1编译原理目录4-2需求需求笔记目录5-1概率论概率论笔记......
  • 20222310 2024-2025-1 《网络与系统攻防技术》实验三实验报告
    一、实验内容1.正确使用msf编码器,veil-evasion,自己利用shellcode编程等免杀工具或技巧(1)正确使用msf编码器,使用msfvenom生成如jar之类的其他文件(2)学会使用veil,加壳工具(3)能够使用C+shellcode编程2.通过组合应用各种技术实现恶意代码免杀成功实现了免杀的,简单语言描述原理,不......
  • 浏览器指纹修改指南2024 - 寻找Geolocation API实现位置(九)
    引言在上一篇文章中,我们介绍了GeolocationAPI的定义、作用及其在浏览器指纹中的重要性。我们还讨论了修改GeolocationAPI返回值以保护用户隐私的必要性。本篇文章将深入Chromium源码,找到GeolocationAPI的实现位置,并分析其关键属性,为后续的修改提供基础。1.Chromium源码中......
  • 2024java面试常见八股文整理
    Java基础1.常用的Java集合有哪些,有什么应用场景Java集合可以分为Collection和Map两种体系Collection接口:单列数据,定义存取一组对象的方法的集合LIst:元素有序、可重复的集合Set:元素无序、不可重复的集合Map接口:双列数据,保存具有映射关系“Key-value对”的集合2.Java线......
  • 题解:CF1225E Rock Is Push
    很玄妙的一道dp题。HintAnalysis首先你要确保你会做当石头没有/固定的情况,这道题其实也是dp。考虑石头带来的影响,唯一的作用就是限制你的移动,比方说你下面有\(3\)块石头,由于只能向右或向下移动,你实际上往下只能走到当前列第\(n-3\)行。于是对于石头的处理,设\(rs[i][j......
  • 2022 International Collegiate Programming Contest, Jinan Site
    2022InternationalCollegiateProgrammingContest,JinanSiteK.StackSort题意给一个从1到n的排序,按顺序把这些数压入m个栈全部入栈后,每次选择一个栈,把数字全部弹出再换下一个要求弹出顺序是升序的思路发现要把\(x\)和\(x-1\)压入同一个栈,这样出栈才能按顺序可以......
  • 在win10安装和使用wsl
    WSLwsl(WindowsSubsystemforLinux)是微软在Windows操作系统中引入的一个功能,它允许用户直接在Windows上运行Linux发行版的二进制可执行文件,而无需使用虚拟机或双启动系统。WSL提供了一个兼容层,使得Linux应用程序能够运行在Windows的内核上。wsl有以下特点:兼容性:wsl允许Linux应......