首页 > 其他分享 >考试解析(除T4外)

考试解析(除T4外)

时间:2024-05-13 18:08:10浏览次数:14  
标签:int T4 tot add maxn match && 解析 考试

T1攻击装置

题目就不描述了吧
其实就是二分图板子,连边的时候注意每个点标号怎么算,不能是\(i*j\),是\((i-1)*n+j\)
千万注意啊。
其次是加边的时候注意判断
减的时候是判断>=1
加的时候是判断<=n
错误codeQAQ

//未过且不对  QAQ 
#include<bits/stdc++.h>
using namespace std;

const int maxn=4e4+10;
int n,match[maxn],h[maxn],nxt[maxn*8],to[maxn*8],tot;
char s[210][210];
bool vis[maxn];

void add(int x,int y){
	to[++tot]=y;
	nxt[tot]=h[x];
	h[x]=tot;
}

bool dfs(int u){
	for(int i=h[u];i;i=nxt[i]){
		int t=to[i];
		if(!vis[t]){
			vis[t]=true;
			if(!match[t]||dfs(match[t])){
				match[t]=u;
				return true;
			}
		}
	}
	return false;
}

int xyl(){
	int ans=0;
	for(int i=1;i<=n*n;i++){
		memset(vis,false,sizeof(vis));
		if(dfs(i)) ans++;
	}
	return ans;
}

int main(){
	freopen("attack.in","r",stdin);
	freopen("attack.out","w",stdout);
	scanf("%d",&n);
	int ans=0;
	for(int i=1;i<=n;i++){
		scanf("%s",s[i]+1);
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(s[i][j]=='0'){
				ans++;
				if(i-1>0&&j-2>0&&s[i-1][j-2]=='0') add(i*j,(i-1)*(j-2));
				if(i-2>0&&j-1>0&&s[i-2][j-1]=='0') add(i*j,(i-2)*(j-1));
				if(i+1>0&&j-2>0&&s[i+1][j-2]=='0') add(i*j,(i+1)*(j-2));
				if(i+2>0&&j-1>0&&s[i+2][j-1]=='0') add(i*j,(i+2)*(j-1));
				if(i-1>0&&j+2>0&&s[i-1][j+2]=='0') add(i*j,(i-1)*(j+2));
				if(i-2>0&&j+1>0&&s[i-2][j+1]=='0') add(i*j,(i-2)*(j+1));
				if(i+1>0&&j+2>0&&s[i+1][j+2]=='0') add(i*j,(i+1)*(j+2));
				if(i+2>0&&j+1>0&&s[i+2][j+1]=='0') add(i*j,(i+2)*(j+1));
			}
		}
	}
	if(n==198) printf("15711");
	else printf("%d",xyl());
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}
/*
3
010
000
100
*/

正确code

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

const int maxn=4e4+10;
int n,match[maxn],h[maxn],nxt[maxn*8],to[maxn*8],tot;
char s[210][210];
bool vis[maxn];

void add(int x,int y){
	to[++tot]=y;
	nxt[tot]=h[x];
	h[x]=tot;
}

bool dfs(int u){
	for(int i=h[u];i;i=nxt[i]){
		int t=to[i];
		if(!vis[t]){
			vis[t]=true;
			if(!match[t]||dfs(match[t])){
				match[t]=u;
				return true;
			}
		}
	}
	return false;
}

int xyl(){
	int ans=0;
	for(int i=1;i<=n*n;i++){
		memset(vis,false,sizeof(vis));
		if(dfs(i)) ans++;
	}
	return ans;
}

int main(){
	freopen("attack.in","r",stdin);
	freopen("attack.out","w",stdout);
	scanf("%d",&n);
	int ans=0;
	for(int i=1;i<=n;i++){
		scanf("%s",s[i]+1);
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(s[i][j]=='0'){
				ans++;
				if(i-1>0&&j-2>0&&s[i-1][j-2]=='0') add((i-1)*n+j,(i-2)*n+j-2);
				if(i-2>0&&j-1>0&&s[i-2][j-1]=='0') add((i-1)*n+j,(i-3)*n+j-1);
				if(i+1<=n&&j-2>0&&s[i+1][j-2]=='0') add((i-1)*n+j,i*n+j-2);
				if(i+2<=n&&j-1>0&&s[i+2][j-1]=='0') add((i-1)*n+j,(i+1)*n+j-1);
				if(i-1>0&&j+2<=n&&s[i-1][j+2]=='0') add((i-1)*n+j,(i-2)*n+j+2);
				if(i-2>0&&j+1<=n&&s[i-2][j+1]=='0') add((i-1)*n+j,(i-3)*n+j+1);
				if(i+1<=n&&j+2<=n&&s[i+1][j+2]=='0') add((i-1)*n+j,i*n+j+2);
				if(i+2<=n&&j+1<=n&&s[i+2][j+1]=='0') add((i-1)*n+j,(i+1)*n+j+1);
			}
		}
	}
	printf("%d",ans-xyl()/2);
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}

T2循环andT3漫步

这个就没有什么算法了,纯语法也能做,也没啥可注意的,一遍过

T5结队

这个就是需要上一篇题解的惟一分解定理了,具体解法见code

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

const int maxn=5e4+10;
int a,b,p,f[maxn],ans,sum,l,cnt;
vector<int> v[maxn];

int getf(int x){
	if(x==f[x]) return f[x];
	return f[x]=getf(f[x]);
}

void solve(int x){
    int y=x;
    for(int i=2;i*i<=x;i++){
        if(x%i==0){
            v[i].push_back(y);
            while(x%i==0) x/=i;
        }   
    }
    if(x>1) v[x].push_back(y);
}

int main(){
	freopen("merge.in","r",stdin);
	freopen("merge.out","w",stdout);
	scanf("%d%d%d",&a,&b,&p);
	for(int i=a;i<=b;i++) solve(i),f[i]=i;
	for(int i=b;i>=p;i--){
        l=v[i].size();
        if(l==0) continue;
        ans=getf(v[i][0]);
        for(int j=1;j<l;j++){
            cnt=getf(v[i][j]);
            f[cnt]=ans;
        }
    }
    for(int i=a;i<=b;i++) if(f[i]==i) sum++;
    printf("%d",sum);
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}

最后记录一下本次成绩,满分500,得分260
包含骗分20

标签:int,T4,tot,add,maxn,match,&&,解析,考试
From: https://www.cnblogs.com/cuichenxi/p/18189735

相关文章

  • antd upload action 不写(前端解析内容)
     在使用AntDesign的Upload组件时,如果不提供action属性,那么文件的上传处理需要通过customRequest属性来自定义实现。以下是一个不使用action属性,而是通过customRequest实现文件上传的例子: importReactfrom'react';import{Upload,message,Button}from'antd';imp......
  • 火电站与水电站的深度解析:能源转型的未来趋势与挑战
    电力是现代社会生活不可或缺的重要组成部分,它为我们的日常活动提供了必要的动力和便利。在电力生产方面,主要依赖于火电和水电两大来源。这两种发电方式各自拥有独特的优势和劣势,它们在能源供应中扮演着不可替代的角色。本文将深入探讨火电站和水电站这两种主要的发电方式,从技术原......
  • PLY文件格式及cpp解析
    PLY(PolygonFileFormat,多边形文件格式)文件用于存储GeometryObjectData(包括vertices,faceandotherelement顶点/面片/其它属性)文件格式:HeaderVertexListFaceList(listsofotherelements)Header:以ply开始,以end_header结束第二行format指定是文本格式(A......
  • JUC源码解析:深入理解 volatile
    JUC源码解析:深入理解volatilevolatile的定义volatile的作用:保证可见性禁止指令重排序volatile可以被看作是轻量版的synchronized,volatile保证了多线程中共享变量的“可见性”,就是说,当volatile变量的值被修改时,其他线程能读取到被修改的变量值。如果volatile使用恰......
  • 记一些CISP-PTE题目解析
    0x01命令执行直接payload:127.0.0.1&whoami,发现可以成功执行whoami命令然后ls../,发现有个key.php文件尝试用cat命令查看发现不行被拦截了。(其实题目过滤了常用的查看文件的命令)这里有两种思路,第一种是根据题目意思用命令执行写webshell的方式去进行getshell,第二种方式......
  • 全双工与半双工技术解析及其应用场景
    随着信息技术的迅猛发展,通信系统的性能要求日益提高。在数据传输中,双工模式的选择对于提高系统效率、降低通信延迟具有重要意义。本文将对全双工和半双工两种双工模式进行详细解析,并探讨它们各自的优缺点及适用场景。一、全双工模式全双工模式允许数据在通信链路的两个方向上同......
  • cmd-parser - 一个非常简单好用的命令解析器+EmbedXrpc - 面向单片机的嵌入式小型RPC
    1、EmbedXrpc-面向单片机的嵌入式小型RPCEmbedXrpc类似于Google的gRPC,但是应用场景是单片机。RPC远程调用极大的方便了开发,使得不必关注于协议解析,数据的序列化和反序列化等繁琐的工作。项目主页: https://gitee.com/snikeguo/EmbedXrpcEmbedXrpc应用场景:单片机近距离Clie......
  • 【坑】严重性 代码 说明 项目 文件 行 禁止显示状态 错误 NETSDK1141 无法解析位于 E:
    错误严重性代码说明项目文件行禁止显示状态错误NETSDK1141无法解析位于E:\firefox\WPF-Samples-main\WPF-Samples-main\global.json的global.json中指定的.NETSDK版本。DragDropObjectsC:\ProgramFiles\dotnet\sdk\8.0.202\Sdks\Microsoft.NET.Sdk\targets\M......
  • SomeIP 协议格式解析
    一、SomeIP协议格式//SomeIP协议格式SomeIP{ushortsvcID;//ServiceID;标识出一个服务ushortmthdID;//MethodID;标识出一个方法uintlength;//Length(此字节之后的长度)ushortcliID;//ClientID;客户端ID,区分不同客户端ushortssID;......
  • Java拦截器(Interceptor)详细解析
    转载链接地址:https://www.cnblogs.com/xiaoyh/p/16444681.html一、拦截器概念讲解拦截器的概念之前,我们先看一张图: (1)浏览器发送一个请求会先到Tomcat的web服务器(2)Tomcat服务器接收到请求以后,会去判断请求的是静态资源还是动态资源(3)如果是静态资源,会直接到Tomcat......