AtCoder Beginner Contest 336
A - Long Loong
思路:
简单的模拟
代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve() {
int n;
// cin>>n;
cin>>n;
cout<<"L";
for(int i=1;i<=n;i++){
cout<<"o";
}
cout<<"ng"<<endl;
}
signed main() {
int t=1;
// cin >> t;
while (t--) {
solve();
}
return 0;
}
B - CTZ
思路:
就是将十进制数字转换成二进制数字,最后看看二进制数字最后有多少个零就可了
代码:
#include <bits/stdc++.h>
#include<cstdlib>
using namespace std;
#define int long long
// int l;
std::vector<int> v;
void func(int x){
while(x){
v.push_back(x%2);
x/=2;
}
}
void solve() {
int n;
cin>>n;
func(n);
int ans=0;
for(auto x:v){
if(x==0){
ans++;
}
else{
cout<<ans<<endl;
return ;
}
}
}
signed main() {
int t=1;
// cin >> t;
while (t--) {
solve();
}
return 0;
}
C - Even Digits
思路:
因为只能是由偶数数字组成的,偶数数字又只有0 2 4 6 8,但是除一位数字以外最高位不能是0
这里就可以把他看成是一个五进制数,因为这里我们只有五个数,然后我们将给定的n转换成五进制数,最后每一位乘2就可以了,但是需要注意一下特殊情况就行
代码:
#include <bits/stdc++.h>
#include<cstdlib>
using namespace std;
#define int long long
void solve() {
int n;
cin>>n;
std::vector<int > v;
if(n==1){
cout<<0<<endl;
return ;
}
n--;
while(n){
v.emplace_back(n%5);
n/=5;
}
for(int i=v.size()-1;i>=0;i--){
cout<<v[i]*2;
}
}
signed main() {
int t=1;
// cin >> t;
while (t--) {
solve();
}
return 0;
}
D - Pyramid
思路:
正反各算一下每个位置的前后缀的最大有效长度,然后取最小值的最大值
代码:
#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve() {
int n;
cin>>n;
std::vector<int> a(n+1);
std::vector<int> l(n+1),r(n+1);
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
l[i]=r[i]=0;
}
for(int i=1;i<=n;i++){
l[i]=min(a[i],l[i-1]+1);
}
for(int i=n;i>=1;i--){
r[i]=min(a[i],r[i+1]+1);
}
int ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,min(l[i],r[i]));
}
cout<<ans<<endl;
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
t = 1;
// cin>>t;
while(t--) {
solve();
}
return 0;
}
标签:std,AtCoder,Beginner,int,336,long,--,solve,include
From: https://www.cnblogs.com/du463/p/17964984