第一次天梯赛:

B-B:孵化小鸡

题解:二进制枚举所有可能性,一个一个枚举出来,@离散数学,真值表。

题目如下:

二进制枚举代码如下

点击查看代码
#include <bits/stdc++.h>
using namespace std; int main ()
{
int n;
cout<<"输入你要枚举的个数";
cin>>n;
for(int i=0;i<=(1<<n)-1;i++){
int j=i;//把i化成二进制数;
int p=0;//所有可能性的下标
vector<int> e;//存下标的数组
while(j)
{
if(j%2)
{
e.push_back(p);
}
p++;
j/=2;
}
cout<<"第"<<i<<"种下标"<<"\n";
for(int k=0;k<e.size();k++){
cout<<e[k];
}
cout<<"\n"; }
return 0;
}

完整代码如下:

点击查看代码
#include <bits/stdc++.h>
#define int long long
#define MOD 1000000007
using namespace std; int a[25],b[25],mm[25],t[105]={0},p[105]={0};; //学会这个暴力题乱杀。 struct asmd{
int l,r;
int k,p;
}s[12]; int32_t main() {
int T = 1;
//cin >> T;
while (T--) {
int n,m,mn=1e9;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i]>>b[i]>>mm[i];
for(int j=a[i];j<=b[i];j++){
if(mm[i]>t[j]){
t[j]=mm[i];
}
}
}
for(int i=0;i<m;i++){
cin>>s[i].l>>s[i].r>>s[i].k>>s[i].p;
}
for(int i=0;i<=(1<<m)-1;i++){
int pos=0;
vector<int>q;
int ii=i;
while(ii){
if(ii%2){
q.push_back(pos);
}
pos++;
ii>>=1;
}
int f=1,sum=0;
for(int j=0;j<q.size();j++){
sum+=s[q[j]].p;
for(int k=s[q[j]].l; k<=s[q[j]].r;k++){
p[k]+=s[q[j]].k;
}
}
for(int j=1;j<=100;j++){
if(t[j]>p[j]){
f=0;
break;
}
}
memset(p,0,sizeof p); //重置
if(f){
mn=min(mn,sum);
}
}
cout<<mn<<endl;
}
}

D-D 划分田地

题解:跟上面那道题类似,都是枚举暴力,找每种矩形的x左右两边和y上下两边然后拿剩下的点和x,y的两个值进行比较,累加

然后插入vector存储每一个不同的土豆数,然后ans++,枚举所有得出答案;

题目如下:

代码如下

点击查看代码
#include<bits/stdc++.h>

using namespace std;

using i32 = int32_t;
using i64 = long long; #define int i64 using pii = pair<int, int>;
using vi = vector<int>; i32 main() {
ios::sync_with_stdio(false), cin.tie(nullptr);
int n;
cin >> n;
vector<pii> a(n);
for (auto &[x, y]: a) cin >> x >> y; set<vi> res; res.insert(vi()); for (int ax = 0; ax <= 50; ax++)
for (int bx = ax; bx <= 50; bx++)
for (int ay = 0; ay <= 50; ay++)
for (int by = ay; by <= 50; by++) {
vi s;
for (int k = 0; k < n; k++) {
if (ax <= a[k].first and a[k].first <= bx and ay <= a[k].second and a[k].second <= by)
s.push_back(k);
}
res.insert(s); }
cout << res.size() << "\n";
return 0;
}

I-I
找除数
题解:这道题是质数和因数分解,需要掌握线性筛和质数筛;

质数筛

https://blog.csdn.net/Bananaaay/article/details/124698131

线性筛

https://blog.csdn.net/weixin_46522531/article/details/128422821

题目如下:

代码如下

点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
int prime[1000006],cnt;
bool st[1000006];
void get_prime(int n){
for(int i=2;i<=n;i++){
if(!st[i]){
prime[cnt++]=i;
}
for(int j=0;i*prime[j]<=n;j++){
st[i*prime[j]]=1;
if(i%prime[j]==0)
break;
}
}
}
void solve() {
int x;
cin >> x;
vector<int>g;
for (int i = 0; prime[i]<= x / prime[i] and i<cnt; ++i) {
int dq=0;
while (x % prime[i] == 0) {
dq++;
x /= prime[i];
}
if(dq){
g.push_back(dq);
}
}
if (x > 1)
g.push_back(1);
int ans=1;
for (auto p: g) {
ans = ans * (p+ 1);
}
cout<<ans<<endl;
}
int main(){
ios::sync_with_stdio(false),cin.tie(0);
get_prime(100000);
int t;
cin>>t;
while (t--){
solve();
}
}

第一次天梯赛学到的暂时只有这么多,还有一些dp正在学习中,此地留空,方便到时候补dp。

J-J

最后都是零

题解:这道题我用贪心做出来了,就是找每个数中的最大值,然后减去这个数,剩下一位的时候ans++,剩下为10的时候ans+=2;

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define ll long long int max(int n)
{
int ma=0;
while(n>0)
{
int res = n%10;
if(res>=ma)
{
ma=res;
}
n=n/10;
}
return ma;
}
int main ()
{
int ans = 1;
int n;
cin>>n;
if(n<=9)
cout<<1;
else if(n==10)
cout<<2;
else
{
while(n>10)
{
n=n-max(n);
ans++;
}
if(n==10)
cout<<ans+1;
else if(n<10)
cout<<ans;
} return 0;
}

第二次天梯赛

比赛时间为3小时,oi赛制。

题一:奶茶袋搜集

题解:贪心,以前没有怎么见过,结合了一点的差分数组和前缀和的思想,将每相邻两个数的差值从小到大排序,我们去掉最大的 m-1个差值,类比于在最大的m-1个差值

的地方分段,因为一个段中的极差等于两两相邻数的差之和,所以最后我们只要把最小的m-n个差值

相加即可。

题目如下:

代码如下:

点击查看代码
#include <bits/stdc++.h>
using namespace std;
int a[200010];
int s[200010];
int main(){
int n,m;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) s[i]=s[i-1]^a[i];
cin>>m;
while(m--){
int l,r;cin>>l>>r;
cout<<(s[r]^s[l-1])<<endl;
}
}

题目:该加训了

题解:首先要掌握一些离散数学的知识和位运算的知识,明白位运算结果可以化简成a^b,然后用前缀和的思想把数组的异或和求出来,不然会卡TLE,然后查询前l,到r的异或和。

题目如下:

输入输出



代码如下

点击查看代码
#include <bits/stdc++.h>
using namespace std;
int a[200010];
int s[200010];
int main(){
int n,m;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) s[i]=s[i-1]^a[i];
cin>>m;
while(m--){
int l,r;cin>>l>>r;
cout<<(s[r]^s[l-1])<<endl;
}
}

SUM-ACM天梯赛的更多相关文章

  1. 『ACM C++』 PTA 天梯赛练习集L1 | 048-49

    今日刷题048-049 ------------------------------------------------L1-048---------------------------------- ...

  2. 『ACM C++』 PTA 天梯赛练习集L1 | 052-053

    今日刷题,水题水题 ------------------------------------------------L1-052------------------------------------ ...

  3. 『ACM C++』 PTA 天梯赛练习集L1 | 040-41

    近期安排 校赛3.23天梯赛3.30华工校赛 4.21省赛 5.12 ------------------------------------------------L1-040----------- ...

  4. 『ACM C++』 PTA 天梯赛练习集L1 | 001-006

    应师兄要求,在打三月底天梯赛之前要把PTA上面的练习集刷完,所以后面的时间就献给PTA啦~ 后面每天刷的题都会把答案代码贡献出来,如果有好的思路想法也会分享一下~ 欢迎大佬提供更好的高效率算法鸭~ - ...

  5. 哈尔滨工程大学ACM预热赛

    https://ac.nowcoder.com/acm/contest/554#question A #include <bits/stdc++.h> using namespace st ...

  6. 2018天梯赛第一次训练题解和ac代码

    随着评讲的进行代码和题解会逐步放上来 2018天梯赛第一次训练 1001 : 进制转换 Time Limit(Common/Java):1000MS/10000MS     Memory Limit: ...

  7. [原]sdut2624 Contest Print Server (大水+大坑)山东省第四届ACM省赛

    本文出自:http://blog.csdn.net/svitter 原题:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&am ...

  8. L1-049 天梯赛座位分配​​​​​​​

    L1-049 天梯赛座位分配 (20 分) 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i ...

  9. L1-049. 天梯赛座位分配

    天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情.为此我们制定如下策略:假设某赛场有 N 所学校参赛,第 i 所学校有 M[i] 支队伍,每队 10 位 ...

  10. PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集

    L2-001 紧急救援 (25 分)   作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...

随机推荐

  1. C# 使用大数组内存溢出的解决办法

    在实际开发中,需要读取文件转成byte数组,文件大小四五百兆,采用win10系统,我那台电脑系统版本非常老了,一直没升级,读取文件时,就会出现OutOfMemeory异常,时不时的出现.我程序用的an ...

  2. ShardingJDBC使用不当引发的线上事故

    本文讲述一个由 ShardingJDBC 使用不当引起的悲惨故事. 一. 问题重现 有一天运营反馈我们部分订单状态和第三方订单状态无法同步. 根据现象找到了不能同步订单状态是因为 order 表的 t ...

  3. Vue cli路由

    上面是将Forecast组件作为了Home的子组件使用,现在我们将其作为一个路由组件使用. 在router/index.js路由系统注册路由: { path: '/forecast', name: ' ...

  4. linux中磁盘清理方法(简单好用)

    文章目录1.命令2.df参数说明3.find参数说明4.清理日志文件1.命令先来看解决办法 df -h --显示当前磁盘使用情况cd / --cd到要清理文件的路径下面find . -type f - ...

  5. 理解太阳辐射 DNI DHI GHI

    理解太阳辐射 DNI DHI GHI   DNI: Direct Normal Irradiance 阳光从太阳盘面直接照射到与光路正交的表面,称作直接辐射简写为 DNI. DHI: Diffuse ...

  6. react 过渡动画组件

    在项目中可能会有一些动画效果展示或是页面切换效果,css动画的方式,比较局限,涉及到一些js动画的时候没法处理了.react-transition-group是react的第三方模块,借住这个模块可以 ...

  7. 2024 Web 新特性 - 使用 Popover API 创建弹窗

    Popover API 为开发者提供了一种声明式的方式来创建各种类型的弹窗.目前已在所有三大浏览器引擎中可用,并正式成为 Baseline 2024 的一部分. 一直以来,我们在实现弹出式菜单.提示框 ...

  8. windows 命令行调整分辨率

    windows 命令行调整分辨率 下载:qres_v1.1 https://abcker.lanzouq.com/i1uzA1a5uo8j 解压出来,如:D:\Soft\QRes,不要使用中文名目录. ...

  9. C# JAVA UrlEncode

    C#  JAVA urlencode 默认是不兼容的.C# 需要encode的部分是小写.JAVA 需要encode的部分是大写. /// <summary> /// java UrlEn ...

  10. XML文档定义的几种形式和本质区别

    XML文档定义的形式 两种定义形式:DTD.Schema DTD:数据类型定义(Data Type Definition),用以描述XML文档的文档结构,是早期的XML文档定义形式. Schema:其 ...