22级ACM 4.16 周赛 题解

news2024/11/16 23:51:04

这场能题解写的感觉没多少其实(真的不是因为懒),既然有人想要题解,那么就随便写一下吧,其实大部分的题都有人写出来,感觉这场真的不需要

A 题 题解

Count Interval AtCoder - abc233_d_霾まる的博客-CSDN博客

B题 题解

2021四川省icpc省赛H题 Nihongo wa Muzukashii Desu 日本語は難しいです!_霾まる的博客-CSDN博客

C题 题解:

线段树的典题,输入 去重 二分 线段树区间修改 最后求值即可。emmmmm,可能难在了 离散化去重的思想?还是线段树的板子? (本来想拉道线段树的板子,看看大家学的怎么样,拉的这道题没有达到效果,感觉这道题拉的挺失败的,应该拉道更板子的

(随机挑选一个代码看着比较顺眼的代码

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<set>
#include<algorithm>
#include<map>
#include<string.h>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
typedef long long ll;
typedef pair<int,int>PII;
int t;
int n,an;
int ans=0;
struct we{
	int l,r;
}hh[100005];
int tr[400005];
bool v[10000000];
int b[400005];
void add(int l,int r,int x,int L,int R,int id){
	if(L<=l&&R>=r){
		tr[x]=id;
		return;
	}
	if(tr[x]){
		tr[x<<1]=tr[x];
		tr[x<<1|1]=tr[x];
		tr[x]=0;
	}
	int mid=(l+r)>>1;
	if(L<=mid)add(l,mid,x<<1,L,R,id);
	if(R>mid)add(mid+1,r,x<<1|1,L,R,id);
}



void cha(int x,int l,int r){
	if(l==r){
		if(v[tr[x]]==0&&tr[x]){
			ans++;
			v[tr[x]]=1;
		}
		return;
	}
	if(tr[x]){
		tr[x<<1]=tr[x<<1|1]=tr[x];
		tr[x]=0;
	}
	int mid=(l+r)>>1;
	cha(x<<1,l,mid);
	cha(x<<1|1,mid+1,r);
}



int main(){
	ios::sync_with_stdio(false);
	cin.tie();
	cout.tie();
	cin>>t;
	while(t--){
		cin>>n;
		memset(v,0,sizeof v);
		memset(tr,0,sizeof tr);
		an=0;
		ans=0;
		for(int i=1;i<=n;i++){
			cin>>hh[i].l>>hh[i].r;
			b[++an]=hh[i].l;
			b[++an]=hh[i].r;
		}
		sort(b+1,b+an+1);
		an=unique(b+1,b+an+1)-b-1;
		for(int i=1;i<=n;i++){
			int l=lower_bound(b+1,b+an,hh[i].l)-b;
			int r=lower_bound(b+1,b+an,hh[i].r)-b;
			add(1,an,1,l,r,i);
		}
		cha(1,1,an);
		
		printf("%d\n",ans);
	}
	
}

D题 

The 2021 CCPC Guangzhou Onsited

是这场中的 H  签到题

题解的话,看这篇比较好,我觉得写的优雅 又 美丽

2021CCPC广州 H. Three Integers_h three integers__sky123_的博客-CSDN博客

E 题

这题比D题还要简单,不过不知道为什么没有人写。

推结论的话,也很好推。不推结论的话,打表 或者 手模样例,最多到5,就能发现规律。可惜没有人写。(唉,这道题网上的题解感觉写的都挺烂,什么题解,还要我亲自动手写)

我们很容易推得

​​​​​​​

 

#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <math.h>
#include <stdio.h>
#include<vector>
#include<queue>
#include<map>
#include <unordered_map>
#include<set>
#include<tuple>
#include<numeric>
#include<stack>
using namespace::std;
typedef long long  ll;
inline char nc() {
    static char buf[1000000], *p1 = buf, *p2 = buf;
    return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1000000, stdin), p1 == p2) ? EOF : *p1++;
}
template <typename _Tp> inline void read(_Tp&sum) {
    char ch = nc(); sum = 0;
    while (!(ch >= '0'&&ch <= '9')) ch = nc();
    while (ch >= '0'&&ch <= '9') sum = (sum << 3) + (sum << 1) + (ch - 48), ch = nc();
}
inline __int128 read128(){
    __int128 x = 0, f = 1;
    char ch128 = getchar();
    while(ch128 < '0' || ch128 > '9'){
        if(ch128 == '-')
            f = -1;
        ch128 = getchar();
    }
    while(ch128 >= '0' && ch128 <= '9'){
        x = x * 10 + ch128 - '0';
        ch128 = getchar();
    }
    return x * f;
}
inline void print128(__int128 x){
    if(x < 0){
        putchar('-');
        x = -x;
    }
    if(x > 9)
        print128(x / 10);
    putchar(x % 10 + '0');
}
//struct dian{
//    double x,y;
//}A,B,C,D,E,F;//点
//cin>>A.x>>A.y>>B.x>>B.y>>C.x>>C.y>>D.x>>D.y>>E.x>>E.y>>F.x>>F.y;
//double len(dian x,dian y){
//    return sqrt((x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y));
//}//两点之间距离
//double xj(dian x,dian y,dian z){
//    x.x-=y.x;
//    x.y-=y.y;
//    z.x-=y.x;
//    z.y-=y.y;
//    return x.x*z.y-x.y*z.x;
//}//叉积
int n,t;
const ll N=998244353;
ll ksm(ll x,ll y){
    ll oper=1;
    while (y) {
        if (y&1) {
            oper=oper*x%N;
        }
        x=x*x%N;
        y>>=1;
    }
    return oper;
}
void wanyurukong(){
    cin>>n;
    ll na=1;
    if (n<=3) {
        for (int i =1; i<=n; i++) {
            na*=i;
        }
        
    }
    else{
        na=3*ksm(2, n-2)%N;
        
    }
    cout<<na<<"\n";
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(); cout.tie();
    cin>>t;
    while (t--) {
        wanyurukong();
    }
    //wanyurukong
    return 0;
}
 

 F题

输出肯定是不行的。

我们直接手动模拟除法就好,除不了,就是乘10,然后小数点后推一位。然后细心一点就好了(直接放你们其中一个人AC代码了

#include<iostream>
using namespace std;
int c[1005];
int main()
{
	int a,b,k;
	cin>>a>>b>>k;
	if(a==b)
	{
		cout<<1<<".";
		for(int i=1;i<=k;i++)cout<<0;
	}
	else
	{
		int z=0;
		while(z<=k+1)
		{
			z++;
			a*=10;
			c[z]=a/b;
			if(a>=b&&a!=0)a=a%b;
		}
		if(c[k+1]>=5)c[k]+=1;
		cout<<0<<".";
		for(int i=1;i<=k;i++)cout<<c[i];
	}
	return 0;
}

G 题

去年的ccpc河南省省赛的题,过了签到,过了这道题,再过一道树上MEX,罚时少一点,就可以金牌了。

题解:2022河南省CCPC省赛H题旋转水管_霾まる的博客-CSDN博客

H 题

吉林省赛 拓扑排序的板子题,应该是没人会的,可以都去学一下,这个类似于一种思想。

这道题的话,感觉没什么好说的。就是要确定的,所以我们从可以唯一确定的开始推,然后不断修改行列的状态,再找下一个唯一确定的,典型拓扑排序。

/*Looking! The blitz loop this planet to search way
 
 Only my RAILGUN can shoot it 今すぐ
 
 身体中を  光の速さで
 
 駆け巡った確かな予感
 
 掴め! 望むものなら残さず
 
 輝ける自分らしさで
 
 信じてるよ  あの日の誓いを
 
 この瞳に光る涙それさえも  強さになるから
 
 */
#include <iostream>
#include <algorithm>
#include <string.h>
#include <string>
#include <math.h>
#include <stdio.h>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#include <unordered_map>
#include<set>
#include<tuple>
#include<numeric>
using namespace::std;
typedef long long  ll;
inline char nc() {
    static char buf[1000000], *p1 = buf, *p2 = buf;
    return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1000000, stdin), p1 == p2) ? EOF : *p1++;
}
template <typename _Tp> inline void read(_Tp&sum) {
    char ch = nc(); sum = 0;
    while (!(ch >= '0'&&ch <= '9')) ch = nc();
    while (ch >= '0'&&ch <= '9') sum = (sum << 3) + (sum << 1) + (ch - 48), ch = nc();
}
inline __int128 read128(){
    __int128 x = 0, f = 1;
    char ch128 = getchar();
    while(ch128 < '0' || ch128 > '9'){
        if(ch128 == '-')
            f = -1;
        ch128 = getchar();
    }
    while(ch128 >= '0' && ch128 <= '9'){
        x = x * 10 + ch128 - '0';
        ch128 = getchar();
    }
    return x * f;
}
inline void print128(__int128 x){
    if(x < 0){
        putchar('-');
        x = -x;
    }
    if(x > 9)
        print128(x / 10);
    putchar(x % 10 + '0');
}
//struct dian{
//    double x,y;
//}A,B,C,D,E,F;//点
//cin>>A.x>>A.y>>B.x>>B.y>>C.x>>C.y>>D.x>>D.y>>E.x>>E.y>>F.x>>F.y;
//double len(dian x,dian y){
//    return sqrt((x.x-y.x)*(x.x-y.x)+(x.y-y.y)*(x.y-y.y));
//}//两点之间距离
//double xj(dian x,dian y,dian z){
//    x.x-=y.x;
//    x.y-=y.y;
//    z.x-=y.x;
//    z.y-=y.y;
//    return x.x*z.y-x.y*z.x;
//}//叉积
int n;
int ff[1005][1005];
int h[1005],l[1005];
int s1[1005],s2[1005];
int enddh[1005],enddl[1005];
pair<int, int>jkl;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(); cout.tie();
    cin>>n;
    for (int i =1; i<=n; i++) {
        for (int j =1; j<=n; j++) {
            cin>>ff[i][j];
            if (ff[i][j]!=-1) {
                h[i]++;
                l[j]++;
                s1[i]^=ff[i][j];
                s2[j]^=ff[i][j];
            }
        }
    }
    for (int i =1; i<=n; i++) {
        cin>>enddh[i];
    }
    for (int i =1; i<=n; i++) {
        cin>>enddl[i];
    }
    queue<pair<int, int>>q;
    for (int i =1; i<=n; i++) {
        for (int j =1; j<=n; j++) {
            if (ff[i][j]==-1&&(h[i]==n-1||l[j]==n-1)) {
                q.push({i,j});
            }
        }
    }
    while (!q.empty()) {
        jkl=q.front();q.pop();
        if (h[jkl.first]==n-1) {
            ff[jkl.first][jkl.second]=enddh[jkl.first]^s1[jkl.first];
        }
        if(l[jkl.second]==n-1){
            ff[jkl.first][jkl.second]=enddl[jkl.second]^s2[jkl.second];
        }
        s2[jkl.second]^=ff[jkl.first][jkl.second];
        s1[jkl.first]^=ff[jkl.first][jkl.second];
        h[jkl.first]++;
        l[jkl.second]++;
        if ( l[jkl.second]==n-1) {
            for (int i =1; i<=n; i++) {
                if (ff[i][jkl.second]==-1) {
                    q.push({i,jkl.second});
                    break;
                }
            }
        }
        if (h[jkl.first]==n-1) {
            for (int i =1; i<=n; i++) {
                if (ff[jkl.first][i]==-1) {
                    q.push({jkl.first,i});
                    break;
                }
            }
        }
    }
    for (int i =1; i<=n; i++) {
        for (int j =1; j<=n; j++) {
            if (ff[i][j]==-1) {
                printf("-1\n");return 0;
            }
        }
    }
    for (int i =1; i<=n; i++) {
        for (int j =1; j<=n; j++) {
            printf("%d ",ff[i][j]);
        }
        printf("\n");
    }
    return 0;
}

I 题

没什么好说的,就是树状数组的板子题。找一下 逆序对 就好,这道题甚至不需要离散化。

树状数组专题的第一道题 是需要 离散化的 找逆序对,按道理来说应该能直接写出来的。

#include<iostream>
#include<stdio.h>
#include<math.h>
#include<set>
#include<algorithm>
#include<map>
#include<string.h>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
typedef long long ll;
int t,x,y,n;
ll a[500005];
ll b[500005];
ll lowbit(ll x){
	return x&(-x);	
}
void add(ll x){
	for(int i=x;i<=n;i+=lowbit(i)){
		b[i]++;
	}
}
ll cha(ll x){
	ll ans=0;
	for(int i=x;i>0;i-=lowbit(i)){
		ans+=b[i];
	}
	return ans;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie();
	cout.tie();
	cin>>t;
	while(t--){
		memset(b,0,sizeof b);
		cin>>n;
		for(int i=1;i<=n;i++)cin>>a[i];
		ll ans=0;
		for(int i=n;i>=1;i--){
//			cout<<cha(a[i])<<"***\n";
			ans+=cha(a[i]);
			add(a[i]);
		}
		printf("%lld\n",ans);
	}
	
}

本来预期 人均 5~6题,中间还感觉题拉简单了,后来发现 感觉 早了。

记得好好打专题+补题。

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

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

相关文章

AI绘画王炸功能Control Net安装教程

原文&#xff1a;AI绘画王炸功能Control Net安装教程 - 知乎 AI绘画&#xff0c;最近两大王炸功能出圈了。 一个就是超真实超细节的美女图片&#xff0c;已经快和照片无异了&#xff0c;甚至有人用AI绘画的“女仆照片”开始招募游艇会了&#xff0c;具体教程可以查看Lora这篇…

一键生成元宇宙 AI又杀疯了

人类十几年的进步水平&#xff0c;AI用几个月就能轻易实现。在展示了超强的文本对话能力和一键生图功能后&#xff0c;AI大模型不打算停下&#xff0c;开始挑战搭建3D空间这一更高难度的动作。 这次&#xff0c;Facebook母公司Meta想当一把主导者。几天前&#xff0c;它的首席…

185-二35

Java185-二35单列集合顶层接口collection迭代器增强forlambda表达式list特有方法遍历数据结构数组Linkedlist集合泛型类&#xff0c;泛型方法&#xff0c;泛型结构泛型方法泛型的通配符泛型总结数据结构数据结构&#xff08;二叉树&#xff09;前序遍历数据结构&#xff08;二叉…

crm系统有哪些?具体的功能有哪些?

市面上的CRM系统有很多&#xff0c;例如简道云、销售易、salesforce、纷享销客、SugarCRM等等&#xff0c;这些都是比较知名的&#xff0c;前面也有写过很多关于CRM选型的内容&#xff0c;大家可以点进我的主页翻阅一下。 那么&#xff0c;CRM具体的功能有哪些&#xff1f;下面…

计算机网络 - UDP协议 与 TCP协议可靠性(传输层)

前言 本篇介绍UDP报文格式&#xff0c;认识UDP报文&#xff0c;介绍TCP报文格式&#xff0c;了解TCP可靠性的核心机制&#xff0c;TCP通信中三次握手与四次挥手&#xff1b;如有错误&#xff0c;请在评论区指正&#xff0c;让我们一起交流&#xff0c;共同进步&#xff01; 文…

EDA基础概念

EDA基础概念EDA和CADCAD工具EDA工具EDA技术实现目标可编程逻辑器件简称PLD发展历程FPGA简介CPLD简介FPGA和CPLD区别是否需要同时学习FPGA和CPLDXilinx&#xff08;赛灵思&#xff09;公司介绍&#xff08;AMD收购&#xff09;开发工具Xilinx产品Altera&#xff08;阿尔特拉&…

Qt关于QPainter绘制1px宽度图形带来的问题思考

前言 前段时间遇到这样一个问题&#xff0c;使用QPainter绘制直线的时候&#xff0c;设置了笔宽为1像素&#xff0c;但是绘制出来的线条却是2px宽度&#xff0c;而且设置的画笔颜色很明显是降低了透明度&#xff0c;不是最“纯正”的颜色。 当时就感觉非常奇怪&#xff0c;明明…

【FPGA实验1】FPGA点灯工程师养成记

对于FPGA几个与LED相关的实验&#xff08;包括按键点灯、流水灯、呼吸灯等&#xff09;的记录&#xff0c;方便日后查看。这世界上就又多了一个FPGA点灯工程师了&#x1f60f; 成为一个FPGA点灯工程师分三步&#xff1a;一、按键点灯1、按键点灯程序2、硬件实现二、流水灯1、流…

Vue2-黑马(二)

目录&#xff1a; &#xff08;1&#xff09;vue2-基础-属性绑定 &#xff08;2&#xff09;vue2-事件绑定 &#xff08;3&#xff09;vue2-双向绑定 &#xff08;4&#xff09;vue2-计算属性 &#xff08;1&#xff09;vue2-基础-属性绑定 属性与js数据绑定&#xff1a; …

react-router原理

前端路由的原理 自己来监听URL的改变&#xff0c;改变url&#xff0c;渲染不同的组件(页面)&#xff0c;但是页面不要进行强制刷新&#xff08;a元素不行&#xff09;。 hash模式&#xff0c;localhost:3000/#/abc 优势就是兼容性更好&#xff0c;在老版IE中都可以运行缺点是…

DNS配置

TCP/IP提供了通过IP地址来连接到设备的功能&#xff0c;但对用户来讲&#xff0c;记住某台设备的IP地址是相当困难的&#xff0c;因此专门设计了一种字符串形式的主机命名机制&#xff0c;这些主机名与IP地址相对应。 在IP地址与主机名之间需要有一种转换和查询机制&#xff0c…

CANopen | 对象字典OD 06 - 创建对象字典变量,通过TPDO定时发送

文章目录一、前言二、实验目的三、对象字典OD四、TPDO1定时发送tx_Value变量一、前言 该笔记的程序: github 二、实验目的 CANopen从站有一个变量tx_Value&#xff0c;映射到TPDO1上。接着&#xff0c;CANopen从站每1S发送一次TPDO1&#xff0c;将tx_Value发送出去。 三、…

PasteSpider之文件同步软件的介绍

作为PasteSpider系统中的一大特色&#xff0c;那就是文件的差量同步和配置同步。能够实现对不同需求的良好实现。 在网站https://www.pastecode.cn/下载文件同步软件后&#xff0c;完全解压到自己的文件夹内&#xff0c;然后双击“SpiderSyncFile”,如下图&#xff1a; 打开登陆…

Nginx模板自动化

背景 在日常工作中&#xff0c;我们经常需要创建Nginx配置文件的模板&#xff0c;以便在不同的环境中快速部署和配置Nginx服务器。然而&#xff0c;这样的任务通常需要重复性高、耗时长&#xff0c;且容易出错。为了加快这些任务的完成&#xff0c;并提高工作效率&#xff0c;…

C/C++开发,认识opencv各模块

目录 一、opencv模块总述 二、opencv主要模块 2.1 opencv安装路径及内容 2.2 opencv模块头文件说明 2.3 成熟OpenCV主要模块 2.4 社区支持的opencv_contrib扩展主要模块 2.5 关于库文件的引用 一、opencv模块总述 opencv的主要能力在于图像处理&#xff0c;尤其是针对二维图…

字节8年测试经验,送给想要学习自动化测试的同学6条建议

我的职业生涯开始和大多数测试人一样&#xff0c;开始接触都是纯功能界面测试。那时候在一家电商公司做测试&#xff0c;做了有一段时间&#xff0c;熟悉产品的业务流程以及熟练测试工作流程规范之后&#xff0c;效率提高了&#xff0c;工作比较轻松&#xff0c;也得到了更好的…

QML控件--Dial

文章目录一、控件基本信息二、控件使用三、属性成员四、成员函数五、信号一、控件基本信息 Import Statement&#xff1a;import QtQuick.Controls 2.14 Since&#xff1a;Qt 5.7 Inherits&#xff1a;Control 二、控件使用 Dial&#xff1a;是一个旋钮控件&#xff1b; im…

【权限维持】黄金白银票据隐藏账户C2远控RustDeskGotoHTTP

文章目录内网域&单机版-权限维持-基于用户-隐藏用户内网域-权限维持-基于服务TGT-黄金白银票据黄金方法&#xff1a;白银方法&#xff1a;内网域-权限维持-基于软件-GotoHTTP&RustDesk—无需安装C2 GotoHTTPC2 RustDesk 推荐内网域&单机版-权限维持-基于用户-隐藏用…

Plist文件是什么?

plist 文件是一种用于存储应用程序配置信息的文件格式&#xff0c;其中包含应用程序的各种设置和数据。在过去&#xff0c;plist 文件通常是以.plist 格式存储的。然而&#xff0c;随着时间的推移&#xff0c;人们开始使用.plistx 格式来存储更复杂的数据结构和数据。如果您需要…

MySQL日期时间函数汇总、时间格式转换方法

MySQL日期时间函数汇总、时间格式转换方法时间函数日期时间格式转换date_format函数EXTRACT()DATE_ADD()DATE_SUB()DATEDIFF函数时间函数 函数描述NOW()返回当前的日期和时间CURDATE()返回当前的日期CURTIME()返回当前的时间DATE()返回日期或日期/时间表达式的日期部分HOUR()获…