AtCoder Beginner Contest 160 A ~ E
A
水题签到:
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
if(s[2] == s[3] && s[4] == s[5]){
cout<<"Yes"<<endl;
}
else
cout<<"No"<<endl;
return 0;
}
B
水题
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll n;
cin>>n;
ll res = n / 500;
ll ans = n % 500 / 5;
cout<<res * 1000 + ans * 5<<endl;
return 0;
}
C
水题
题意:一开始没看懂题,就是围绕园的最北的那个点的距离,我一直看成了点都在池塘北面,在一条直线上!害
思路:直到题意以后就很容易做了,因为是一个园,所以走过所有的房子的话,肯定是在某俩个房子之间那个距离没有走,加上这个距离就是完整的园了,那么要求距离最小,就需要找出相邻房子之间的最大值,然后减去即可
py蒙佬的。思路差不多
#include <bits/stdc++.h>
#define maxn 200005
using namespace std;
int a[maxn];
int main(){
int n,k;
cin>>k>>n;
cin>>a[0];
int maxx=-1,sum=0;
for(int i=1;i<n;i++){
cin>>a[i];
sum+=abs(a[i]-a[i-1]);
maxx=max(maxx,a[i]-a[i-1]);
}
sum+=abs(abs(a[n-1]-k)+a[0]);
maxx=max(maxx,abs(abs(a[n-1]-k)+a[0]));
cout <<sum-maxx<<endl;
}
D.
题意:就是一个n个点的图,相邻的点之间有一条边,然后对应的特别的两个点之间也让有一条边,然后让你求就是多少对(i,j)之间的最短距离等于k(k>=1 && k<=n-1)
思路:我们可以看图就是把所有点之间的距离都记录下来,没找到一个不同点之间的最短距离那么就那个数组的距离+1,然后最后输出就行了
#include<bits/stdc++.h>
using namespace std;
const int Max = 1e4 + 5;
int n, x, y, a[Max];
int main() {
cin>>n>>x>>y;
for (int i = 1; i <= n - 1; i++) {
for (int j = i + 1; j <= n; j++) {
int dis = j - i;
dis = min(dis, abs(i - x) + abs(j - y) + 1);
a[dis]++;
}
}
for (int i = 1; i <= n - 1; i++)
cout<<a[i]<<endl;
return 0;
}
E
题意:很简单就是无色苹果可变颜色,然后有红苹果跟绿苹果,每种颜色的苹果要求吃的个数有限,让你求能得到的最大的美味值。
思路:我们从红苹果中选取前x个最大的,在绿苹果中选取y个最大的,然后都压入数组或者队列,然后在把无色的苹果都压入数组,最后对这个数组进行排序,然后从中挑选出前x+y个最大的苹果就行了
#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define F first
#define S second
using ll = long long;
using P = pair<int,int>;
int main() {
int x, y, a, b, c;
cin >> x >> y >> a >> b >> c;
vector<int> ps(a), qs(b), rs(c);
rep(i, a) cin >> ps[i];
rep(i, b) cin >> qs[i];
rep(i, c) cin >> rs[i];
sort(ps.rbegin(), ps.rend());
sort(qs.rbegin(), qs.rend());
vector<int> v;
rep(i, x) v.push_back(ps[i]);
rep(i, y) v.push_back(qs[i]);
rep(i, rs.size()) v.push_back(rs[i]);
sort(v.rbegin(), v.rend());
ll res = 0;
rep(i, x + y) res += v[i];
cout << res << endl;
return 0;
}