AtCoder Beginner Contest 336

2024-01-15 13:28
文章标签 atcoder beginner contest 336

本文主要是介绍AtCoder Beginner Contest 336,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

A、Long Loong

题意:先打印L,再打印n个o,再打印ng

n=int(input())print("L",end="")
for i in range(n):print("o",end="")
print("ng")

B、CTZ

题意:给一个数,将这个数转换为2进制,计算二进制结果后边有多少个0

用lowbit解决,lowbit 一下可以得到2进制数最后一位1的10进制数

n=int(input())x=int(n&(-n))#lowbit
res=0
if x==1:print(res)
else:while x:x//=2res+=1print(res-1)

补充一个bin()函数

n=int(input())
x=bin(n)#可以将10进制转为2进制 bin(8)=0b1000 前面会多一个0b
y=x[::-1]#逆序               bin(10)=0b1010print(y.find('1'))

 

C、Even Digits

 寻找第几个好的数,好的数定义为:每个数位上的数都为偶数

通过打表前20个好的数,可以发现,本质上是一个5进制的数,每5个数进一次位

下边是c++代码,比赛过程中,写完代码一直发现总是与标准答案多进了一位,调了很长时间

写的像依托答辩

#include<bits/stdc++.h>
using namespace std;
#define int long longint o[20];
int d[10]={0,2,4,6,8,8};
signed main()
{o[1]=5;for(int i=2;i<=19;i++){o[i]=o[i-1]*5;}int n;cin>>n;int f=0;int res=0;int f1=0;for(int i=18;i>=1;i--){
//		cout<<"i=="<<i<<"   n=="<<n<<endl;int x=n/o[i];if(x==0&&f==1){res=res*10;} else if(x!=0){			
//			cout<<d[x];if(f1==0){res=d[x];f1=1;}else res=res*10+d[x];f=1;n=n%o[i];}}res=res*10+d[n];string str1=to_string(res);int xx=str1.length();for(int i=xx-1;i>=0;i--){if(str1[i]>='2'){str1[i]=str1[i]-2;break;}else{str1[i]='8';}}for(int i=0;i<xx;i++){if(i==0&&str1[i]=='0'&&xx!=1) continue;else cout<<str1[i]<<"";}cout<<endl;return 0;
}

下边是改进后的代码,发现上边的非常冗余,只需要n在最开始减1就行,因为要对5取余数,那么循环就应该是0~4,所以n应该减1

n=int(input())d=[0,2,4,6,8]
x=5
a=[]
for i in range(18):a.append(x)x*=5
n-=1
f=0
#print(d[0],d[1])for i in range(17,-1,-1):y=int(n//a[i])if y==0 and f==1:print("0",end="")elif y>0:print(d[y],end="")f=1n=int(n%a[i])
print(d[n])

D、 Pyramid 

题意:求最长的金字塔

可以执行一下操作:

令一个数减1,或者删除最前一个数,或者删除最后边一个数

维护一个从左到右的序列和一个从右到左的序列

金字塔的左半边:x[i]=min(x[i-1]+1,a[i])

左半边可以形成的条件是从左到右依次增加,且差值为1,最理性的是1,2,3,4,5,,,

此时需要考虑原序列的影响,假如在3的位置原序列为1,那么就只能再从1开始,那么4的位置是2,以此类推,所以推论就是 x[i]=min(x[i-1]+1,a[i])

即使最开始原序列为 5 6 7 8 3 2 1,那么我们总可以将前4个一直减1,得到1 2 3 4 3 2 1 

同理右半边的推论为:y[i]=min(y[i+1]+1,a[i])

最终答案就是res=max(res,min(x[i],y[i]))

n=int(input())a=list(map(int,input().split()))
x=[0 for i in range(n+1)]
y=[0 for i in range(n+2)]for i in range(1,n+1):x[i]=min(x[i-1]+1,a[i-1])
for i in range(n,0,-1):y[i]=min(y[i+1]+1,a[i-1])
res=0
for i in range(1,n+1):res=max(res,min(x[i],y[i]))
print(res)

这篇关于AtCoder Beginner Contest 336的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/609044

相关文章

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

AtCoder Beginner Contest 370 Solution

A void solve() {int a, b;qr(a, b);if(a + b != 1) cout << "Invalid\n";else Yes(a);} B 模拟 void solve() {qr(n);int x = 1;FOR(i, n) FOR(j, i) qr(a[i][j]);FOR(i, n) x = x >= i ? a[x][i]: a[i][x];pr2(

CF Bayan 2015 Contest Warm Up B.(dfs+暴力)

B. Strongly Connected City time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/probl

CF Bayan 2015 Contest Warm Up A.(模拟+预处理)

A. Bayan Bus time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output 题目链接: http://codeforces.com/contest/475/problem/A The fi

AtCoder Beginner Contest 369 D - Bonus EXP 动态规划

原题链接: https://atcoder.jp/contests/abc369/tasks/abc369_d 思路:   这道题为什么要用动态规划呢,其实,对于第i个怪物,我们有打与不打两种处理方式,而对于打,我们是获得两倍的经验值,还是一倍的经验值,与我们打了奇数只怪物还是打了偶数只怪物有关了,因此我们定义dp[i][0] 为前i只怪物总共打了偶数次,dp[i][1] 为前i只怪物总

2015 Multi-University Training Contest 5 1009 MZL#39;s Border

MZL's Border  Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=5351   Mean:  给出一个类似斐波那契数列的字符串序列,要你求给出的f[n]字符串中截取前m位的字符串s中s[1...i] = s[s.size()-i+1....s.size()]的最大长度。 analyse:   过计算

【UVa】10600 ACM Contest and Blackout 次小生成树

类型:次小生成树 题目大意: 为了举办ACM竞赛,市长决定给所有的n(3 <= n <= 100)所学校提供可靠的电力供应。当且仅当一个学校直接连到电站,或者连到另一个有可靠供应的学校时,才有可靠供应。现在给出在不同学校之间的布线成本,找出最便宜的两种连线方案。一个方案的成本等于其中所有学校之间连线的成本的总和。 题目分析: 次小生成树。 先求出最小生成树,然后枚举所有不在

【POJ】3660 Cow Contest floyd(可以拓扑排序?)

Cow Contest Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 6925 Accepted: 3792 Description N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating i