上周六打了ABC(全球排名:2817;全国排名:535)。
结果:A,B,C题?AC(600分),用时26分钟。D题WA,赛后好久才知道为啥。
目录
网址
A题
题目描述
题目分析
题目代码
B题
题目描述
题目分析?
题目代码
C题
题目描述?
题目分析
题目代码
D题
题目描述
题目分析?
我的Atcoder账号
版权声明
网址
Panasonic Programming Contest 2022(AtCoder Beginner Contest 251) - AtCoderAtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.https://atcoder.jp/contests/abc251
A题
A - Six CharactersAtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.https://atcoder.jp/contests/abc251/tasks/abc251_a
题目描述
题目分析
题目大意:您将获得一个由小写英文字符组成的字符串S。S的长度介于1和3之间(包括1和3)。打印长度为6的字符串,该字符串为重复打印S。可以证明,在这个问题的约束下,这样的字符串是唯一存在的。
题目思路:分三种情况输出。
题目代码
AC代码(好water):
#include<bits/stdc++.h>
using namespace std;
#define AC return 0;
int main(){
cin.tie(0);
ios::sync_with_stdio(0);
string s; cin>>s;
if(s.size()==1) cout<<s<<s<<s<<s<<s<<s;
else if(s.size()==2) cout<<s<<s<<s;
else cout<<s<<s;
AC
}
//ACplease!!!
/* printf(" \n");
printf(" \n");
printf(" * * * * * * * * * * * * \n");
printf(" * * * * * * * * \n");
printf(" * * * * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * \n");
*/
B题
B - At Most 3 (Judge ver.)AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.https://atcoder.jp/contests/abc251/tasks/abc251_b
题目描述
题目分析?
题目大意:有N个重量称为重量1,重量2,…,重量N。重量i的质量为ai。
如果满足以下条件,则可以说正整数n是一个好整数:
我们最多可以选择3种不同的重量,使它们的总质量为n。
有多少小于或等于W的正整数是好整数?
题目思路:分三种情况(选一个,选两个,选三个)。记得set(博主超爱用)。
题目代码
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define AC return 0;
int main(){
cin.tie(0);
ios::sync_with_stdio(0);
int n,w; cin>>n>>w;
int a[310];
set<int>se;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) if(a[i]<=w) se.insert(a[i]);
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(a[i]+a[j]<=w) se.insert(a[i]+a[j]);
}
}
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
for(int k=j+1;k<n;k++){
if(a[i]+a[j]+a[k]<=w) se.insert(a[i]+a[j]+a[k]);
}
}
}
cout<<se.size();
AC
}
//ACplease!!!
/* printf(" \n");
printf(" \n");
printf(" * * * * * * * * * * * * \n");
printf(" * * * * * * * * \n");
printf(" * * * * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * \n");
*/
C题
C - Poem Online JudgeAtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.https://atcoder.jp/contests/abc251/tasks/abc251_c
题目描述?
题目分析
题目大意:
诗歌在线评委(POJ)是一个在线评委,为提交的字符串打分。
有N份提交给POJ。在第i次最早的提交中,提交了字符串Si,并给出了Ti分数。(同一字符串可能已提交多次。)
请注意,POJ不一定会对具有相同字符串的提交内容给出相同的分数。
如果提交中的字符串从未在任何早期提交中提交,则该提交称为原始提交。
如果提交的是得分最高的原始提交,则称其为最佳提交。如果有多份此类提交,则只有最早的一份被视为最佳提交。
查找最佳提交的索引。
题目思路:还是set去重,再去打擂台取最大值。
题目代码
AC代码:
#include<bits/stdc++.h>
using namespace std;
#define AC return 0;
int main(){
cin.tie(0);
ios::sync_with_stdio(0);
int n; cin>>n;
pair<int,string>p[100010];
set<string>se;
for(int i=0;i<n;i++){
cin>>p[i].second;
cin>>p[i].first;
if(se.count(p[i].second)==1) p[i].first=-1;
se.insert(p[i].second);
}
int ans=1;
for(int i=1;i<n;i++){
if(p[i].first>p[ans-1].first) ans=i+1;
}
cout<<ans;
AC
}
//ACplease!!!
/* printf(" \n");
printf(" \n");
printf(" * * * * * * * * * * * * \n");
printf(" * * * * * * * * \n");
printf(" * * * * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * \n");
*/
D题
D - At Most 3 (Contestant ver.)AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.https://atcoder.jp/contests/abc251/tasks/abc251_d
题目描述
题目分析?
题目大意:
给你一个整数W。
你要准备一些砝码,以便满足以下所有条件。
数量介于1和300之间(包括1和300)。
每个砝码有一个不超过10^6的正整数质量。
1和W之间的每个整数(包括1和W)都是一个好整数。这里,如果满足以下条件,则称正整数n为好整数:
我们最多可以从总质量为n的准备好的砝码中选择3种不同的砝码。
打印满足条件的权重组合(答案不唯一)。
题目思路:
让我觉得自己是傻子。
赛时:不管w是多少,永远按二进制输出,30个就够。
WA原因:题目规定——我们最多可以从总质量为n的准备好的砝码中选择3种不同的砝码。
赛后:不管w是多少,永远按十进制输出,300个左右就够。
赛时WA代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
cin.tie(0);
ios::sync_with_stdio(0);
int p=1; int w; cin>>w;
cout<<30<<endl<<1<<" ";
for(int i=1;i<30;i++){
p*=2;
cout<<p<<" ";
}
return 0;
}
//ACplease!!!
/* printf(" \n");
printf(" \n");
printf(" * * * * * * * * * * * * \n");
printf(" * * * * * * * * \n");
printf(" * * * * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * \n");
*/
赛后AC代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
int w; cin>>w;
cout<<300<<endl;
for(int i=1;i<=100;i++) cout<<i<<" "<<i*100<<" "<<i*10000<<" ";
return 0;
}
//ACplease!!!
/* printf(" \n");
printf(" \n");
printf(" * * * * * * * * * * * * \n");
printf(" * * * * * * * * \n");
printf(" * * * * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * \n");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * \n");
*/
我的Atcoder账号
joe_zxq - AtCoderAtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.https://atcoder.jp/users/joe_zxq
版权声明
———————————————— 版权声明:本文为CSDN博主「joe_zxq21」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明, ?不欢迎 ? 欢迎大家的转载和关注。 ?
|