[EC Final 2020] ICPC2020 东亚赛区决赛重现赛题解

news2024/11/14 15:08:35

比赛链接:EC Final 2020

和 @cyx20110930 组的队,用他的号交的题。顺便帮助他橙名,好耶!(rk 25,我俩各写 2 道)

Problem B:

这道是 @cyx20110930 写的,顺便安利(copy)一下他的题解。

题目意思

有一个n\times m的棋盘,操作n\times m次,每次删掉一个方格,问还剩几个长方形。

思路

正难则反,既然数有多少个比较困难,就直接每次查找少了几个长方形,十分简单。

代码

//暴力
//TEAM_NAME:CYX&LSY AK ICPC
//Problem B
//By CYX
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,down[505][505],up[505][505],grid[505][505];
int main()
{
    cin>>n>>m;
    //预处理
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m;j++){
            up[i][j]=0;
            down[i][j]=n+1;
        }
    }
    int ans=n*(n+1)/2*m*(m+1)/2,q=n*m;
    while(q--){
        int x,y;
        cin>>x>>y;
        int u=0,d=n+1;
        for(int j=y;j>=1;j--){//从1至y找u,d,看对每个格子能影响多大区域
            if(grid[x][j]) break;
            u=max(u,up[x][j]+1);
            d=min(d,down[x][j]-1);
            int a=u,b=d;
            for(int k=y;k<=m;k++){//从y至n找u,d,看对每个格子能影响多大区域
                if(grid[x][k]) break;
                a=max(a,up[x][k]+1);
                b=min(b,down[x][k]-1);
                ans-=abs(x-a+1)*abs(b-x+1);
            }
        }
        cout<<ans<<endl;
        //更新
        grid[x][y]=1;
        for(int j=x;j<=n;j++)up[j][y]=max(up[j][y],x);
        for(int j=x;j>=1;j--)down[j][y]=min(down[j][y],x);
    }
	return 0;
}

Problem F:

这题是我写的awa。

题目意思

有一个无限大的象棋棋盘,两个玩家分别有n,m个车,放置在(x,y)上。

两个车可以被相互攻击要满足这三个条件:

        ①属于不同的玩家

        ②有相同的x或者y

        ③中间没有其他棋子

输出有哪些车可以被攻击到。

思路

我们直接用一个 map 来保存相同行和相同列的棋子,这里我们可以把车按照不同的玩家分为i,i+n。然后我们遍历同一行/列的棋子,看看是否属于不同的玩家。

代码

//模拟
//TEAM_NAME:CYX&LSY AK ICPC
//Problem F
//By LSY
#include <bits/stdc++.h>
using namespace std;
struct rook{
	int pos;
	int id;
};
map<int,vector<rook>> row;
map<int,vector<rook>> col;
bool ans[400005];
bool cmp(rook x,rook y){
	return x.pos<y.pos;
}
int main(){
	int n1,n2;
    cin>>n1>>n2;
    for(int i=1;i<=n1;i++){
        int a,b;
		cin>>a>>b;
        row[a].push_back({b,i});
        col[b].push_back({a,i});
    }
    for(int i=1;i<=n2;i++){
        int a,b;
		cin>>a>>b;
        row[a].push_back({b,i+n1});
        col[b].push_back({a,i+n1});
    }
    for(auto p:row){
        auto c=p.second;
        sort(c.begin(),c.end(),cmp);
        for(int i=1;i<c.size();i++){
            if((c[i].id<=n1 && c[i-1].id>n1) || (c[i-1].id<=n1 && c[i].id>n1)){
                ans[c[i].id]=1;
				ans[c[i-1].id]=1;
			}
        }
    }
    for(auto q:col){
        auto r=q.second;
        sort(r.begin(),r.end(),cmp);
        for(int i=1;i<r.size();i++){
            if((r[i].id<=n1 && r[i-1].id>n1) || (r[i-1].id<=n1 && r[i].id>n1)){
                ans[r[i].id]=1;
				ans[r[i-1].id]=1;
            }
        }
    }
    for(int i=1;i<=n1;i++)
		cout<<ans[i];
    cout<<endl;
    for(int i=n1+1;i<=n1+n2;i++)
		cout<<ans[i];
    return 0;
}

Problem K:

继续copy @cyx20110930 的题解。

题目意思

每人 2 张牌,公共牌区 5 张牌,现在给你你的牌,与公共牌区的 3 张牌,问你是否保证胜利。

思路

只有同花顺可能 Allin。(保证胜利)

证明:

题目给定的牌为 h1,h2,c1,c2,c3 设对方的两张为 g1,g2 剩下两张未给出的公共牌为 c4,c5。

若给定的五张牌次于四张一样(炸弹)的牌型,则存在 g1=g2=c4=c5 使得对方构成炸弹的牌型,故不可 Allin。

若给定的五张牌构成炸弹的牌型,此时由于四种花色都有,则一定有一张公共牌的花色不同于 h1 与 h2,不妨设这张牌为 c1,那么存在一种方案使得 c1,c4,c5,g1,g2 构成同花顺,故不可 Allin。

当给定的五张牌为同花顺,此时可枚举对方牌型,看是否有赢的可能。对方赢的牌型必须满足以下条件:

  • 是大于给定五张牌的同花顺

  • 没有 h1,h2

  • 至少包含 c1,c2,c3 其中一张

综上,证毕。

代码

当时他口胡出了上面的思路,丢给我写的。(CYX op)

//模拟
//TEAM_NAME:CYX&LSY AK ICPC
//Problem K
//By LSY
#include <bits/stdc++.h>
using namespace std;
string h1,h2,c1,c2,c3;
vector<int> v;
int transfer(string x){
    if(x[0]>='0' && x[0]<='9')
        return x[0]-'0';
    if(x[0]=='T')
        return 10;
    if(x[0]=='J')
        return 11;
    if(x[0]=='Q')
        return 12;
    if(x[0]=='K')
        return 13;
    if(x[0]=='A')
        return 14;
}
int main(){
    int T;
    cin>>T;
    while(T--){
        v.clear();
        string h1,h2,c1,c2,c3;
        cin>>h1>>h2>>c1>>c2>>c3;
        int flag=0,p=0;
        if(h1[1]==h2[1] && h2[1]==c1[1] && c2[1] == c1[1] && c3[1] == c2[1]){
            v.push_back(transfer(h1));
            v.push_back(transfer(h2));
            v.push_back(transfer(c1));
            v.push_back(transfer(c2));
            v.push_back(transfer(c3));
            sort(v.begin(),v.end());
            for(int i=1;i<v.size();i++){
                if(v[i-1]+1==v[i])
					continue;
                else{
                	p=1;
					break;
				}
            }
            if(!p){
                if(max(transfer(h1),transfer(h2))>=10)
					flag=1;
                if(max(transfer(h1),transfer(h2))>=max(max(transfer(c1),transfer(c2)),transfer(c3)))
					flag=1;
            }
        }
        if(flag){
            cout<<"Allin"<<endl;
            continue;
        } 
        v.clear();
        if(transfer(h1)==14 && transfer(h2)==5){
            if(h1[1]==h2[1] && h2[1]==c1[1] && c2[1]==c1[1] && c3[1]==c2[1]){
                v.push_back(transfer(c1));
                v.push_back(transfer(c2));
                v.push_back(transfer(c3));
                sort(v.begin(),v.end());
                if(v[0]==2 && v[1]==3 && v[2]==4){
                    cout<<"Allin"<<endl;
                    continue;
				}
            }
        }
        if(transfer(h2)==14 && transfer(h1)==5){
            if(h1[1]==h2[1] && h2[1]==c1[1] && c2[1]==c1[1] && c3[1]==c2[1]){
                v.push_back(transfer(c1));
                v.push_back(transfer(c2));
                v.push_back(transfer(c3));
                sort(v.begin(),v.end());
                if(v[0]==2 && v[1]==3 && v[2]==4){
					cout<<"Allin"<<endl;
					continue;
				}
            }
        }
        cout<<"check"<<endl;
    }
    return 0;
}

Problem L:

依旧是搬运 @cyx20110930 的题解。

题目意思

有一个数组a_1,a_2,a_3......,a_n​,求出乘积最小的 t 数组t_1,t_2,t_3,......t_n使得对于每个 i(1\leq i\leq n),a_i\times t_i\times a_{i+1}\times t_{i+1}是完全平方数。

思路

明显对于每个a_i\times t_i其因数的出现次数只有两种情况:都是奇数或都是偶数。

对这两种情况分别计算,取最小值即可。

代码

//签到
//TEAM_NAME:CYX&LSY AK ICPC
//Problem B
//By CYX
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
bool isprime[1000005];
int pri[1000005],s[1000005],vis[1000005],num[1000005],prime[1000005],cnt,tot;
void init(){
	s[1]=1;
	for(int i=2;i<=1000005;i++){
		if(!isprime[i])prime[++cnt]=i,s[i]=i;
		for(int j=1;j<=cnt;j++){
			if(i*prime[j]>1000005)break;
			isprime[i*prime[j]]=1;
			s[i*prime[j]]=prime[j];
			if(!(i%prime[j]))break;
		}
	}
}
int qpow(int a,int b){
	int ans=1;
	while(b){
		if(b&1)ans=ans*a%1000000007;
		a=a*a%1000000007;
		b>>=1;
	}
	return ans;
}
int main(){
	init();
	cin>>n;
	for(int i=1;i<=n;i++){
		int x;cin>>x;
		tot=0;
		while(x>1){
			if(!vis[s[x]])pri[++tot]=s[x];
			vis[s[x]]++;
			x/=s[x];
		}
		for(int j=1;j<=tot;j++){
			if(vis[pri[j]]%2==1)num[pri[j]]++;
			//num是指数为奇数的质因子的出现次数
			vis[pri[j]]=0;
		}
	}
	int ans=1;
	for(int i=1;i<=cnt;i++){
		if(!num[prime[i]])continue;
		ans*=qpow(prime[i],min(num[prime[i]],n-num[prime[i]]));
		ans%=1000000007;
	}
	cout<<ans;
	return 0;
}

友情提醒:不要Ctrl C+Ctrl V

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2043625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

html+css网页制作 化妆品电商4个页面

htmlcss网页制作 化妆品电商4个页面 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#xff…

操作系统(Linux实战)-进程创建、同步与锁、通信、调度算法-学习笔记

1. 进程的基础概念 1.1 进程是什么&#xff1f; 定义&#xff1a; 进程是操作系统管理的一个程序实例。它包含程序代码及其当前活动的状态。每个进程有自己的内存地址空间&#xff0c;拥有独立的栈、堆、全局变量等。操作系统通过进程来分配资源&#xff08;如 CPU 时间、内…

LabVIEW光纤管道泄漏检测系统

光纤管道泄漏定位系统利用干涉型光纤传感器和数据采集卡进行信号获取与处理&#xff0c;实现了高灵敏度的泄漏点定位。通过软件对泄漏信号进行实时降噪处理和数据库管理&#xff0c;提高了系统的自动化和智能化水平。 项目背景&#xff1a; 长输管道在石油、天然气等行业中发挥…

【C++第十二课-多态】多态概念、多态原理

目录 多态的概念概念多态形成的条件虚函数的重写虚函数重写的两个例外 多态的题目C11增加的关于多态的关键字finaloverride 多态原理虚函数表指针 vfptr多态的实现静态绑定和动态绑定打印虚函数表补充 抽象类概念接口继承和实现继承 多态的概念 概念 具体点就是去完成某个行为…

Centos安装Kafka

安装Kafka 安装Java&#xff0c;因为Kafka运行需要JDK运行环境 sudo yum install java-1.8.0-openjdk-devel.x86_64如果不知道JDK版本&#xff0c;可以使用下面命令查看可用的JDK版本 sudo yum search openjdk添加EPEL仓库 sudo yum install epel-release下载Kafka 先去查看…

nginx初步学习

Nginx 安装 官方源码包下载地址&#xff1a;nginx: download 配置一台虚拟机尽量给的配置高些这样速度快些。 下载文件并解压 加载对应模块 ./configure --prefix/usr/local/nginx \ --usernginx \ # 指定nginx运行用户 --groupnginx \ # 指定ng…

BUUCTF 极客大挑战2019 Upload 1

上传图片&#xff0c;然后抓包 我们可以看到回显 我们改一下content-type 这里我们可以改一下filename为100.phtml&#xff0c;也可以不改 然后我们通过该指令查看一下是否被解析 我们发现flag就在这里 我们cat一下&#xff0c;得到了flag

kubernetes集群下部署mysql 8.0.20单机数据库

一、背景&#xff1a; 因为业务需求&#xff0c;需要在kubernetes集群下部署一个mysql数据库 8.0.20版本的单机服务。 具体实施过程如下&#xff1a; 二、实施部署mysql数据库&#xff1a; mysql 8.0.20的镜像&#xff1a; dockerhub.jiang.com/jiang-public/mysql:8.0.20-stjh…

Windows有哪些免费好用的PDF编辑器推荐?

不是所有PDF编辑器都免费&#xff0c;但我推荐的这3个一定免费简单好用&#xff01;&#xff01; 1、转转大师PDF编辑器 点击直达链接>>pdftoword.55.la 转转大师PDF编辑器是一款专业的PDF编辑工具&#xff0c;功能丰富&#xff0c;操作简单&#xff0c;作为微软office…

ZYNQ—vitis—网口传输信号波形数据

ZYNQ—vitis—网口传输信号波形数据 工程功能&#xff1a;ADC采集信号&#xff0c;将波形数据通过BRAM传输到PS端&#xff0c;然后用UDP以太网发送。&#xff08;附加&#xff1a;ILA观察信号&#xff0c;发送的数据包含帧头&#xff0c;&#xff09; FPGA端——用BRAM将信号传…

如何在一个页面上定位多个关键词?

我应该针对多个关键词优化我的页面吗&#xff1f; 对于大多数网站来说&#xff0c;答案都是肯定的。 如果你制定的策略是仅针对一个关键字优化你的网页&#xff0c;这可能会导致一些问题。例如&#xff0c;如果一个网页只能使用一个关键字&#xff0c;那么他们可能会开发出非…

vue2利用html2canvas+jspdf动态生成多页PDF

业务需求中&#xff0c;前端把页面上的内容导出为图片&#xff0c;pdf&#xff0c;excel是常有的事。当然&#xff0c;这些工作后端也是能做。秉着前端是万能的理念&#xff0c;今天就站在前端的角度上&#xff0c;来实现将页面内容导出为pdf&#xff0c;实现指定div内容导出&a…

【数据结构篇】~复杂度

标题【数据结构篇】~复杂度 前言 C语言已经学完了&#xff0c;不知道大家的基础都打得怎么样了&#xff1f; 无论怎么说大家还是要保持持续学习的状态&#xff0c;来迎接接下来的挑战&#xff01; 现在进入数据结构的学习了&#xff0c;希望大家还是和之前一样积极学习新知识…

ESP32人脸识别开发--人脸识别模型(六)

ESP-DL ESP-DL 为**神经网络推理**、**图像处理**、**数学运算**以及一些**深度学习模型**提供 API&#xff0c;通过 ESP-DL 能够快速便捷地将乐鑫各系列芯片产品用于人工智能应用 ESP-DL 无需借助任何外围设备&#xff0c;因此可作为一些项目的组件&#xff0c;例如可将其作…

使用Python制作贪吃蛇小游戏

引言 贪吃蛇游戏是一款经典的电子游戏&#xff0c;玩家通过控制一条不断增长的蛇在格子内移动&#xff0c;并吃掉随机出现的食物来获得分数。随着分数的增加&#xff0c;蛇的身体也会越来越长&#xff0c;游戏的难度也随之提升。在本文中&#xff0c;我们将详细介绍如何使用Py…

天途推出无人机软硬件定制服务

近年&#xff0c;随着低空经济高速发展&#xff0c;无人机已成为千行百业的生产和工作辅助工具&#xff0c;很多行业用户都有信息化数字化的软件需求&#xff0c;以及不同负载的集成设计需求。 天途拥有云平台开发、自主飞控系统、控制算法、无人机AI数据系统等核心技术研发团队…

Flink常见面试题整理

Flink常见面试题整理 文章目录 Flink常见面试题整理1. 数据倾斜问题怎么解决&#xff1f;2、什么是Flink中的窗口3、Flink中的水位线&#xff08;Watermarks&#xff09;是什么&#xff1f;4、Flink中的定时器实现机制是什么&#xff1f;有什么作用&#xff1f;5、Flink中的状态…

llama3.1本地部署方式

llama3.1 资源消耗情况 &#xfeff;Llama 3.1 - 405B、70B 和 8B 的多语言与长上下文能力解析&#xfeff; &#xfeff; 70B版本&#xff0c;FP1616K token需要的资源约为75G&#xff1b;FP16128K token需要的资源约为110G &#xfeff; 1、ollama ollama工具部署及使用…

力扣面试经典算法150题:找出字符串中第一个匹配项的下标

找出字符串中第一个匹配项的下标 今天的题目是力扣面试经典150题中的数组的简单题: 找出字符串中第一个匹配项的下标 题目链接&#xff1a;https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/description/?envTypestudy-plan-v2&envIdto…

免费远程控制电脑的软件有哪些?

什么是远程控制&#xff1f; 远程控制是一种通过网络从一台设备操作另一台设备的技术。连接后&#xff0c;用户可以直接远程操作那台电脑进行各种操作。随着科技的不断进步和用户需求的增加&#xff0c;远程控制市场日益蓬勃。远程控制不仅应用于远程办公和远程教学&#xff0…