黑龙江农垦科技职业学院喜迎寒假多校联赛2(快乐ak场)-题解总结

本文主要是介绍黑龙江农垦科技职业学院喜迎寒假多校联赛2(快乐ak场)-题解总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

附上链接:
黑龙江农垦科技职业学院喜迎寒假多校联赛2(快乐ak场)
在这里插入图片描述
总体:由于考试的时候是按照通过率的节奏来走的,所以像A,B题,一开始都没有打算开题,最后阶段一直死磕D题的二分,直到结束也没找出错误来。。。。。。
最后发现。。。。二分的上界和下届写错了。。。。。。裂开

A数组截取

思路很简单,用两个指针的方式,左指针先不动,右指针往后移,如果不满足条件,左指再往后移,最后找出最长区间。。多么简单啊。。。再也不跟AC率做题了。。。。

据出题人说数据范围很大,建议使用快读。

附上AC代码:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
const int mod = 1e9+7;
const int maxn = 77797;
#define iss ios::sync_with_stdio(false)
inline ll read(){ll s = 0, w = 1; char ch = getchar();while (ch < 48 || ch > 57) { if (ch == '-') w = -1; ch = getchar(); }while (ch >= 48 && ch <= 57) s = (s << 1) + (s << 3) + (ch ^ 48), ch = getchar();return s * w;
}
ll a[20000005];
int main(){ll n = read(),k = read();ll l = 0,sum = 0,ans = -1;for(int i = 0 ; i < n ;++i){a[i] = read();sum += a[i];while(sum > k) sum -= a[l++];if(sum == k) ans = max(ans,i - l + 1);}printf("%lld\n",ans);
}

小结:通过这题,又再一次复习了双指针的用法。l,r真是妙呀。

B排列数字

没啥好说的,直接暴力枚举判断是否满足条件,用dfs或者STL next_permutation(a,a+n)

#include<bits/stdc++.h>
using namespace std;
#define f(i,a,b)  for(int i=(a);i<=(b);i++)
int n,m;
long long a[20];
int ans;
int main()
{  cin>>n>>m;f(i,0,n-1)a[i]=i;do{long long sum=0;f(i,0,n-1){sum=sum*10+a[i];}if(sum%m==0)ans++;}while(next_permutation(a,a+n));if(ans)cout<<ans;elsecout<<-1; }

C查成绩

水题,前缀和,没啥好说的

#include<iostream>
#include<cstdlib>
#include<queue>
#define ll long long
using namespace std;
ll a[1000010];
char ch;
ll read(){while(ch =getchar(), ch < '0' || ch > '9');ll res = ch - 48;while(ch = getchar(), ch >= '0' && ch <= '9')res = res * 10 + ch - 48;return res;
}
int main(){ll n,m,i,x,y;n = read(),m = read();for(i = 1;i <= n;i ++)x = read(),a[i] = a[i-1] + x;while(m--){x = read();y = read();cout<<a[y] - a[x-1]<<endl;}return 0;
}

D学生分组(求区间最大值的最小值)

第一感觉是个典型的DP,于是开始无脑写DP,写着写着,回去看了一下数据范围。。
于是开始写二分,大概15分钟左右,写出二分。。于是这场比赛开始无限卡壳了,

思路:二分答案,判断是否满足条件。

二分的核心代码,check()函数:

int check(ull mid)
{ull s=1;ull sum=0;for(int i=0;i<m;i++){sum=sum+a[i];if(sum>mid){ sum=a[i];s++;}   if(s>k)return false;}return true;
}

小结:给学生分组的代码,值得反复推敲 。

如果枚举到有答案更大,则不满足,另减去当前a[i]值,上一组分为一组,分组数加1

for(int i=0;i<m;i++){sum=sum+a[i];if(sum>mid){ sum=a[i];s++;}   

如果大于分组数,则不满足条件要求:

if(s>k)return false;

值得思考的是,只要分组数小于等于K,就满足条件。题目条件是求区间和最大值的最小值,如果分组更小的答案都满足条件,那么K组的也一定满足条件。

附上赛后AC代码:

#include<bits/stdc++.h>
using namespace std;
#define ull unsigned long long
unsigned long long m,k;
ull a[1000020];
ull maxx,minn;
char ch;
ull read(){while(ch =getchar(), ch < '0' || ch > '9');ull res = ch - 48;while(ch = getchar(), ch >= '0' && ch <= '9')res = res * 10 + ch - 48;return res;
}
int check(ull mid)
{ull s=1;ull sum=0;for(int i=0;i<m;i++){sum=sum+a[i];if(sum>mid){ sum=a[i];s++;}   if(s>k)return false;}return true;
}
int main()
{     //freopen("in.txt","r",stdin);scanf("%lld%lld",&m,&k); for(ull i=0;i<m;i++){a[i]=read(); maxx+=a[i];if(minn<a[i])minn=a[i];}while(maxx>minn){ull mid=(maxx+minn)/2; if(check(mid))maxx=mid;elseminn=mid+1;}cout<<maxx;  
} 

原因竟然只是出在这里:

    if(check(mid))maxx=mid;elseminn=mid+1;

一开始我一直写成这样:

    if(check(mid))maxx=mid+1;elseminn=mid;

对二分的理解还是不够。。。。有点背模板的感觉。

二分是上届和下届不清楚的同学,最好是先手动模拟几个样例

E:删数问题

N久以前做过这道题,当时用贪心的方法

于是写了贪心的算法,超时。。。数据范围应该是扩大了

后面交流听大佬说用单调栈,不是很熟练单调栈的用法,后期再补。

F异或运算

结论题:
  让 n 对应二进制每一位都为 1 即为答案。

#include<iostream>
using namespace std;
int main(){long long n;long sum = 1;int len = 0;scanf("%lld",&n);while(n){n /=2;len++;}while(len--){sum *= 2;}cout<<sum-1;return 0;
}

G%%%Alan

在一个地方,卡了好久!!!!!!!

这里一定要注意,用getchar()去掉回车

scanf("%d",&n);  
getchar();//scanf()会带来一个回车,用getchar()去掉它,这是为了下面的gets 
gets(s);

附上AC代码:

#include<bits/stdc++.h>
using namespace std;
long long n;
string s;
int  z[2000];
bool g[2000];
int mark=0;
int sum;
int main()
{     int now;//freopen("in.txt","r",stdin);
scanf("%d",&n);getchar();for(int i=1;i<=n;i++){  getline(cin,s);mark=0;int sa=s.size();for(int j=0;j<sa;j++){if(s[j]=='A'){mark++;now=j+1;while(s[now]==' ')now++;if(s[now]=='l'){mark++;now++;while(s[now]==' ')now++;if(s[now]=='a'){  mark++;now++;while(s[now]==' ')now++;if(s[now]=='n') {mark++;now++;}}}}if(mark==4){break;	}}if(mark==4) for(int j=0;j<sa;j++)if(s[j]=='%')sum++;}printf("%d",sum);} 

H&Icg写项目

结构体排序,没啥好说的。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<deque>
#include<cmath>
#include<algorithm>
using namespace std;
int n;
struct node
{string s;string m;string x;string h; long long z;
}a[1000200];
int cmp(node b,node c)
{if(b.s==c.s)return b.z<c.z;if(b.s.size()!=c.s.size())return b.s.size()<c.s.size();else if(b.s!=c.s)return b.s<c.s;else return b.z>c.z;
}
int main()
{//freopen("in.txt","r",stdin);cin>>n;for(int i=1;i<=n;i++){cin>>a[i].s>>a[i].m>>a[i].x>>a[i].h;a[i].z=i;}sort(a+1,a+n+1,cmp); for(int i=1;i<=n;i++){cout<<a[i].s<<" "<<a[i].m<<" "<<a[i].x<<" "<<a[i].h<<endl;	} } 

J签到题

这篇关于黑龙江农垦科技职业学院喜迎寒假多校联赛2(快乐ak场)-题解总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/166815

相关文章

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总

Python中实现进度条的多种方法总结

《Python中实现进度条的多种方法总结》在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码... 目录一、简单的打印方式二、使用tqdm库三、使用alive-progress库四、使用progres

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的