黑龙江农垦科技职业学院喜迎寒假多校联赛2(快乐ak场)蒟弱部分题解
A
双指针,数据太大,实在难受,不想写了
D.ssue与lifehappy给学生分组
思路
二分答案,二分没觉每一个答案,每次检查分组个数是否大于等于m
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int N = 1e6+9;
ull a[N];
ull b[N];
ull r =0,l;
int n,m;
int check(ull x)
{
ull sum = 0,cnt=0;
for(int i=1; i<=n; i++)
{
sum+=a[i];
if(sum>x)
{
sum = a[i];
cnt++;
}
}
if(cnt>=m) return 1;
else return 0;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
{
scanf("%llu",&a[i]);
r+=a[i];
l = max(l,a[i]);
}
while(l<=r)
{
ull mid = l+r>>1;
//如果分得组数,>=m,那么还可以m
if(check(mid)==1) l = mid+1;
else r = mid-1;
}
printf("%llu\n",l);
return 0;
}
E.删删删越小越好
思路
- 如果当前数字的左边有元素大于它,那么就删除它左边比它大的元素
- 单调栈的运用,如果栈顶的元素大于当前元素,那么就出栈,k-1,前提是k不为0
- 一定要注意,输出的时候k还可能不为0
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e7+9;
char stk[N],s[N];
int tt = 0,k;
int main()
{
scanf("%s",s+1);
scanf("%d",&k);
int n = strlen(s+1);
//cout<<k<<" "<<n<<endl;
for(int i=1; i<=n; i++)
{
while(tt&&stk[tt]>s[i]&&k)
{
tt--;
k--;
}
stk[++tt] = s[i];
}
stk[tt+1]='\0';
int flag = 0;
for(int i=1; i<=tt-k; i++)
{
if(stk[i]!='0')
{
flag = 1;
}
if(flag) printf("%c",stk[i]);
}
if(!flag) puts("0");
return 0;
}
G
暴力,我觉得数据有问题,数据里貌似含有
AAlanhij%%这样类似的数据
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+9;
typedef long long ll;
string s;
char s0[N];
string p = "Alan";
int main()
{
int n;
cin>>n;
getchar();
int ans = 0;
while(n--)
{
getline(cin,s);
// cout<<s<<endl;
int t = 0;
for(int i=0; i<s.size(); i++)
{
if(s[i]!=' ') s0[t++] = s[i];
}
int cnt = 0;//记录%的个数
s0[t]='\0';
//cout<<s0<<endl;
int flag = 0;
for(int i=0; i<t; i++)
{
if(s0[i]=='%') cnt++;
if(s0[i]=='A'&&flag==0)
{
int mark = 1;
int j;
for( j=i; j<t&&j<i+4; j++)
{
if(s0[j]!=p[j-i])
{
mark = 0;
break;
}
}
if(!mark) flag =0;
else
{
//if(i&&((s0[i-1]>='A'&&s0[i-1]<='Z')||(s0[i-1]>='a'&&s0[i-1]<='z'))) flag = 0;
//else if(j<t&&((s0[j]>='A'&&s0[j]<='Z')||(s0[j]>='a'&&s0[j]<='z'))) flag = 0;
//else flag = 1;
flag = 1;
}
}
}
if(flag) ans+=cnt;
// cout<<ans<<endl;
}
cout<<ans<<endl;
return 0;
}
H&I
思路
结构体排序,但是很多人入坑,因为sort是不稳定的排序,很多人死在了"同用户名先输入的在前面"上,虽然本地测试是正确的,但是提交上去测试还是有可能不能保证"同用户名先输入的在前面",所以需要多加一个条件
这是我wa的。。。。
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+9;
struct node
{
string s,m,x,h;
int num;
}p[N];
bool cmp( node A, node B)
{
if(A.s.size()<B.s.size()) return true;
else if(A.s.size()>B.s.size()) return false;
else if(A.s!=B.s) return A.s<B.s;
else return A.num<B.num;
}
int main()
{
int n;
//ios::sync_with_stdio(false);
// cin.tie(0);
cin>>n;
for(int i=0; i<n; i++)
{
cin>>p[i].s>>p[i].m>>p[i].x>>p[i].h;
p[i].num = i;
}
sort(p,p+n,cmp);
for(int i=0 ;i<n; i++)
{
cout<<p[i].s<<" "<<p[i].m<<" "<<p[i].x<<" "<<p[i].h<<endl;
}
return 0;
}
其他题目都比较容易或者没坑了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话