当前位置: 首页 > java >正文

2024江西ICPC部分题解

题目列表

  • A - Maliang Learning Painting
  • C - Liar
  • G - Multiples of 5
  • H - Convolution
  • J - Magic Mahjong
  • K - Magic Tree

A - Maliang Learning Painting

题目来源:A - Maliang Learning Painting

在这里插入图片描述

思路分析
这是个签到题,直接输出a+b+c即可

#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{int a,b,c;cin>>a>>b>>c;cout<<a+b+c;return 0;
}

C - Liar

题目来源:C - Liar
在这里插入图片描述
思路分析
这道题非常巧妙,用到贪心的思想,因为ai可正可负可为0,我们可以从两方面考虑:

  • 如果所有数的和加起来等于s,那么所有人说的都是真话,输出n。
    • 如果不等于s,我们只需要把其中一个数变成使它和剩下的数相加等于s的数即可,输出n-1。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,s,a[N],sum;void solve()
{cin>>n>>s;for(int i=1;i<=n;i++)cin>>a[i],sum+=a[i];if(sum==s)cout<<n;elsecout<<n-1;
}
signed main()
{int _=1;
//    cin>>_;while(_--)solve();return 0;
}

G - Multiples of 5

题目来源:G - Multiples of 5
在这里插入图片描述
在这里插入图片描述

思路分析
这道题我们的目的是为了算出这个-11数制对应的十进制数能否被5整除。
但是题目范围很大,这个数的长度就有 1 0 1 4 10^14 1014,显然,如果硬生生转化再存入一个数中是要超出范围的。
那么就要想一个优化的方法,我们不难想出,11的任何次幂个位数一定是1,我们只要把转换过程中每个位数上的数,乘以11的位数减一次方的个位数相加,也就是(比如说x个y,直接累加上x*y),最终再判断这个数能否被5 整除即可,但是要注意如果-11数制下是’A’,要转换成10来计算。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,x,sum;
char c;
void solve()
{cin>>n;sum=0;//sum一定要初始化!!!for(int i=1;i<=n;i++){cin>>x>>c;if(c=='A')sum+=x*10;elsesum+=x*(c-'0');}if(sum%5==0)cout<<"Yes"<<endl;elsecout<<"No"<<endl;
}
signed main()
{int _=1;cin>>_;while(_--)solve();return 0;
}

H - Convolution

题目来源:H - Convolution
在这里插入图片描述
在这里插入图片描述
思路分析
我认为这道题有点难度,仔细读题我们可以发现,矩阵K的值,如果用贪心的思想,在对应的原矩阵中要求的子矩阵的前缀和,如果和为负k对应值取负,同理何为正就取正和为零就取零。
因此我们不必多虑K矩阵中的值,因为K矩阵对应的原矩阵中的值相乘的值等于O矩阵的值只需要算出对应原矩阵中前缀和的绝对值相加就是O矩阵所有元素之和最大的值。
因为输入输出较多所以建议用iOS优化
这里一定要会运用前缀和的思想,不懂的可以先看我的这篇博客:前缀和与差分【入门】原理+例题

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define int long long
using namespace std;
const int N=1e3+1;
int n,m,k,l,a[N][N],s[N][N];
void solve()
{cin>>n>>m>>k>>l;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];s[i][j]=s[i-1][j]+s[i][j-1]+a[i][j]-s[i-1][j-1];}}int x=n-k+1,y=m-l+1,sum=0;for(int i=x;i<=n;i++){for(int j=y;j<=m;j++){sum+=abs(s[i][j]-s[i-x][j]-s[i][j-y]+s[i-x][j-y]);}}cout<<sum;}
signed main()
{IOS;int _=1;
//    cin>>_;while(_--)solve();return 0;
}

J - Magic Mahjong

题目来源:J - Magic Mahjong
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
思路分析
这是一道简单的模拟题,我们只需要读懂题意。
这里的意思是在所有的麻将牌中,最初有14张牌组成,看这14张牌,

  • 如果包括所有的字牌和幺九牌,并且额外重复其中任意一张牌,就输出 Thirteen Orphans.
  • -如果有7对牌就输出 7 Pairs.
  • 如果上述条件都不满足,就输出 Otherwise。
    我们可以定义一个map将每一组牌都存进去,然后判断数量为1的牌有多少个(记为x)和数量为2的牌有多少个(记为y)。
  • 如果X=12,Y=1那么有可能符合第一种情况,仍需继续判断是否包括所有的字牌和幺九牌,这里可以定义一个字符串数组存入所有的字牌和幺九牌,然后遍历这个数组,看它其中的每个元素对应的map值是不是都不等于零。
  • 如果y=7,那么它就满足第2种情况。
  • 否则直接输出otherwise。
#include<bits/stdc++.h>
#define int long long
using namespace std;
string s,s1;
map<string,int>mp;
string s2[]={"1p","9p","1s","9s","1m","9m","1z","2z","3z","4z","5z","6z","7z"};
void solve()
{mp.clear();//记得清空mpcin>>s;int ans=0;for(int i=0;i<s.size();i++){ans++;s1+=s[i];if(ans==2){mp[s1]++;ans=0;s1.clear();}}int x=0,y=0;for(auto v:mp){if(v.second==1)x++;if(v.second==2)y++;}int f=0;if(x==12&&y==1){for(int i=0;i<13;i++){if(mp[s2[i]]==0){f=1;break;}}if(!f){cout<<" Thirteen Orphans"<<endl;return ;}}if(y==7){cout<<" 7 Pairs"<<endl;return ;}cout<<" Otherwise"<<endl;
}
signed main()
{int _=1;cin>>_;while(_--)solve();return 0;
}

K - Magic Tree

题目来源:K - Magic Tree
在这里插入图片描述
在这里插入图片描述

思路分析

这道题就是找规律,通过找前面几个数的规律我们发现数量s的值是有规律的:

  • m=1,s=1= 2 0 2^0 20
  • m=2,s=2= 2 1 2^1 21
  • m=3,s=4= 2 2 2^2 22
  • m=4,s=8= 2 3 2^3 23
  • m=n,s=2^(n-1)

因此我们只需要输出s的值即2的(n-1)次方,主要是这个数会很大该怎么优化取模,可以让s初始化为1,因为M的范围是1e5,所以我们可以遍历从1到m-1每次让s*2并对998244353 取模再赋值给s,最后输出s的值即可。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=998244353;void solve()
{int m,sum=1;cin>>m;for(int i=1;i<m;i++){sum=(sum*2)%N;}cout<<sum;
}
signed main()
{int _=1;
//    cin>>_;while(_--)solve();return 0;
}

今天的题解就到这里。希望对你有所帮助动动您发财的小手点赞收藏吧 你的鼓励就是我的动力!!!

http://www.xdnf.cn/news/2104.html

相关文章:

  • 数据分析管理软件 Minitab 22.2.2 中文版安装包 免费下载
  • 【Hive入门】Hive分桶表深度解析:从哈希分桶到Join优化的完整指南
  • 数字技术驱动下教育生态重构:从信息化整合到数字化转型的路径探究
  • 【摩尔定律】
  • Python爬虫实战:获取高考资源网各学科精品复习资料
  • C#中的弱引用使用
  • Set的学习
  • Eclipse Debug 配置指南
  • A. Ideal Generator
  • Maven 依赖冲突调解与版本控制
  • 百度AI开发者大会:连发多款AI应用,覆盖AI数字人等热门赛道
  • 【高频考点精讲】实现垂直居中的多种CSS方法比较与最佳实践
  • 2.4goweb项目上传到csdn的git仓库
  • 前端面试宝典---vue原理
  • 【OpenCV】第二章——图像处理基础
  • 丝杆升降机换油周期深度解析:从理论模型到自动化监测的全栈实践​
  • [官方IP] Shift RAM
  • Python 第 11 节课 - string 与 random 的方法
  • io_uring概述:现代 Linux 异步 IO 的新范式
  • 启动命令汇总(Redis / Kafka / Flume / Spark)
  • 【MCP Node.js SDK 全栈进阶指南】中级篇(5):MCP客户端高级开发
  • 云原生--核心组件-容器篇-3-Docker三大核心之--镜像
  • 19.【.NET 8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--当前项目拆分规划
  • 【10分钟读论文】Power Transmission Line Inspections电力视觉水文
  • 链表相交.
  • Java 日志:掌握本地与网络日志技术
  • 一文了解智慧教育顶刊TLT的研究热点
  • Linux进程地址空间
  • py语法基础理解
  • femap许可常见问题及解决方案