AtCoder_abc329
A - Spread
题目大意
输入一个字符串由大写字母组成的$S$,输出$S$并在每一个字符之间加上空格
解题思路
随便打打就能过.jpg
代码
// Problem: A - Spread
// Contest: AtCoder - Sky Inc, Programming Contest 2023(AtCoder Beginner Contest 329)
// URL: https://atcoder.jp/contests/abc329/tasks/abc329_a
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
#include<bits/stdc++.h>
using namespace std;
int main(){
char c=getchar();
while(c!='\n'){
cout<<c<<' ';
c=getchar();
}
return 0;
}
B - Next
题目大意
给出$N(2 \le N \le 100)$个整数$A_1,A_2,A_3.....A_N(1 \le A_i \le 100)$,输出其中第二大的整数
解题思路
数据量不大,使用sort()排序之后输出倒数第二个
代码
// Problem: B - Next
// Contest: AtCoder - Sky Inc, Programming Contest 2023(AtCoder Beginner Contest 329)
// URL: https://atcoder.jp/contests/abc329/tasks/abc329_b
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
#include<bits/stdc++.h>
using namespace std;
int n;
int a[105];
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
int p=n-1;
while(a[p]==a[p+1])p--;
cout<<a[p];
return 0;
}
C - Count xxx
题目大意
输入一个长度为$N(n \le 10^5)$,由小写字母组成的字符串$S$,输出$S$中由同一字母组成的非空子串的个数(完全相同的子串不会被重复计数)
例如像是:ssskkyskkkky
他有s,ss,sss,k,kk,kkk,kkkk,y这八个符合要求的子串
解题思路
可以枚举a~z这26个字母。对于每一个字母,遍历一次字符串$S$,记录最长的、连续的、由这个字母构成的子串的长度,那么这个由这个字母构成的子串数量即为该长度数。
代码
// Problem: C - Count xxx
// Contest: AtCoder - Sky Inc, Programming Contest 2023(AtCoder Beginner Contest 329)
// URL: https://atcoder.jp/contests/abc329/tasks/abc329_c
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
#include<bits/stdc++.h>
using namespace std;
int n,ans;
string s;
int main(){
cin>>n>>s;
s=" "+s;
for(int c='a';c<='z';c++){
int len=0;
for(int i=1;i<=n;i++){
int t=0;
while(s[i]==c&&i<=n)
i++,t++;
len=max(len,t);
}
ans+=len;
}
cout<<ans;
return 0;
}
D - Election Quick Report
题目大意
有一场选举,从$N$名候选人中选出一名获胜者,候选人编号为$1,2.....N$。每张选票只投给一位候选人,第$i$张选票投给候选人$A_i$。
选票将按从第一张到最后一张的顺序进行计数,每次计数后,将更新并显示当前的获胜者。
在统计的票数中得票最多的候选人是获胜者。如果有多个候选人得票最多,则编号最小的候选人为获胜者。
对于每一个$i=1,2,....M$,在只计算前$i$张选票时确定一名获胜者。
解题思路
我一看见这道题:这不明显是堆吗,简单。
然后很快啊,就打出了第一版代码:
// Problem: D - Election Quick Report
// Contest: AtCoder - Sky Inc, Programming Contest 2023(AtCoder Beginner Contest 329)
// URL: https://atcoder.jp/contests/abc329/tasks/abc329_d
// Memory Limit: 1024 MB
// Time Limit: 2000 ms
#include<bits/stdc++.h>
using namespace std;
int n,m;
int vn[200005];
struct node{
int id;
int votes;
bool operator < (node b){
if(votes!=b.votes)
return votes<b.votes;
return id>b.id;
}
};
priority_queue <node> heap;
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int x;cin>>x;
vn[x]++;
node np;np.id=x,np.votes=vn[x];
heap.push(np);
cout<<heap.top().id<<endl;
}
return 0;
}
然后一编译,发现连编译都过不了!
我查了大概半个小时左右,只知道是priority_queue <node> heap;
这一句报错,大概是定义结构体的时候出了什么问题。
然后就打开了浏览器认真思考,发现只要我吧结构体重载运算符的部分改成:
bool operator < (node b) const {
if(votes!=b.votes)
return votes<b.votes;
return id>b.id;
}
加上一个const,问题就神奇的解决了。
代码
见上
标签:AtCoder,votes,Contest,int,Limit,abc329 From: https://www.cnblogs.com/lmq742643/p/17872827.html