AtCoder Beginner Contest 251 打比赛总结

  • A+
所属分类:C/C++ 比赛笔记 Atcoder

上周六打了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版权协议,转载请附上原文出处链接及本声明,  不欢迎   欢迎大家的转载和关注。
 

w3cjava

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: