首页 > 其他分享 >AtCoder Beginner Contest 336

AtCoder Beginner Contest 336

时间:2024-01-15 19:57:59浏览次数:38  
标签:AtCoder Beginner dp1 int 336 long tie dp2 define




B - CTZ

难度: ⭐

题目大意

给定一个数n, 输出其二进制最后有几个连续的0;

解题思路

模拟一下就行;

神秘代码

#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define endl '\n'
using namespace std;
const int N = 2e5 + 10, mod = 998244353;
typedef pair<int, int> PII;
int n, m, idx;
signed main() {
    IOS; 
    cin >> n;
    while(n){
        int x = n & 1;
        if(x){
            cout << idx;
            break;
        }
        else idx++;
        n >>= 1;
    }
    return 0;
}




C - Even Digits

难度: ⭐

题目大意

如果一个数的每个位都是偶数, 那么那个数就是好的; 请问第n个好数是多少;

解题思路

由题意得, 每个数都只能由0 2 4 6 8组成; 所以我们可以把好数看作是n的五进制表示; 由0 2 4 6 8 代替 0 1 2 3 4即可;

神秘代码

#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define endl '\n'
using namespace std;
const int N = 2e5 + 10, mod = 998244353;
typedef pair<int, int> PII;
int n, m, idx;
void solve(int u){
    if(u < 5){
        cout << 2 * u;
        return;
    }
    solve(u / 5);
    cout << 2 * (u % 5);
}
signed main() {
    IOS; 
    cin >> n;
    solve(n - 1);
    return 0;
}




D - Pyramid

难度: ⭐⭐⭐

题目大意

我们定义1, 2... n - 1, n, n - 1 ...2, 1为n位金字塔数; 现在给定n个数, 可以对其进行任意次以下种操作, 问最多能得到几位金字塔数;
1- 选择其中一个数减一
2- 删除第一个数或者最后一个数

解题思路

简单分析后发现这个题与其从两边往中间找, 不如确定金字塔数的中心来的方便; 我们可以用dp来找出从左往右以第i个数结尾的金字塔数左侧的序列长度; 如果p[i]是金字塔数左侧第j个数, 那么只要p[i] >= j就可以; 所以只要p[i] > dp1[i - 1]那么就可以接在后面, 否则就只能开一个新的金字塔数, 并且长度就是p[i]; 从右往左也是同理;
对于以第i个数为中心的金字塔数的长度就是dp1和dp2的较小者; 遍历n个数找出最大值即可;

神秘代码

#include<bits/stdc++.h>
#define int long long
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define endl '\n'
using namespace std;
const int N = 2e5 + 10, mod = 998244353;
typedef pair<int, int> PII;
int n, m, res;
int p[N];
int dp1[N], dp2[N];
signed main() {
    IOS; 
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> p[i];
    for(int i = 1; i <= n; i++){
        if(p[i] > dp1[i - 1]){
            dp1[i] = dp1[i - 1] + 1;
        }
        else dp1[i] = p[i];
    }
    for(int i = n; i >= 1; i--){
        if(p[i] > dp2[i + 1]){
            dp2[i] = dp2[i + 1] + 1;
        }
        else dp2[i] = p[i];
    }
    for(int i = 1; i <= n; i++){
        res = max(res, min(dp1[i], dp2[i]));
    }
    cout << res;
    return 0;
}




E - Digit Sum Divisible

难度: ⭐⭐⭐




F - Rotation Puzzle

难度: ⭐⭐⭐⭐

标签:AtCoder,Beginner,dp1,int,336,long,tie,dp2,define
From: https://www.cnblogs.com/mostimali/p/17966176

相关文章

  • abc336 E - Digit Sum Divisible 题解 数位DP
    题目链接:https://atcoder.jp/contests/abc336/tasks/abc336_e题目大意:我们定义一个整数\(n\)的数位和为\(n\)的十进制表示中的各位上的数字之和。比如:整数\(2024\)的数位和为\(2+0+2+4=8\)。一个正整数\(n\)被称作一个好数如果\(n\)能被它的数位和整除......
  • AtCoder Beginner Contest 336
    AtCoderBeginnerContest336比赛链接A-LongLoong思路:简单的模拟代码:#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongvoidsolve(){intn;//cin>>n;cin>>n;cout<<"L";for(inti=......
  • AtCoder Grand Contest 051 D C4
    洛谷传送门AtCoder传送门下文的点\(1,2,3,4\)对应原题面中的\(S,T,U,V\)。直接对无向图欧拉回路计数不太好做。考虑给边定向。枚举有\(i\)条边是从\(1\)到\(2\)的。那么\(2\to1\)有\(a-i\)条边。由于这个图必须满足每个点的入度等于出度,设\(j\)条\(......
  • ABC336
    T1:LongLoong模拟代码实现n=int(input())print('L'+'o'*n+'ng')T2:CTZ__builtin_ctz或countr_zero代码实现#include<bits/stdc++.h>usingnamespacestd;intmain(){unsignedn;cin>>n;cout<......
  • AtCoder Beginner Contest 336
    AtCoderBeginnerContest336A-LongLoong#include<bits/stdc++.h>#defineendl'\n'//#defineintlonglongusingnamespacestd;voidsolve(){ intx; cin>>x; cout<<"L"; while(x--)cout<<"o&q......
  • AtCoder World Tour 2022 B The Greatest Two
    原题面:https://atcoder.jp/contests/wtf22-day2/tasks/wtf22_day2_b题面翻译:一个长度为\(n\)的排列\(p\),每次可以把一个长\(k\)区间的最大与次大值交换,问操作任意次数后可以得到的排列数量对\(998244353\)取模。这题被我搬到了一场多校联考中。在搬到的题面中,我加入了......
  • AtCoder Beginner Contest 335 G Discrete Logarithm Problems
    洛谷传送门AtCoder传送门考虑若我们对于每个\(a_i\)求出来了使得\(g^{b_i}\equiva_i\pmodP\)的\(b_i\)(其中\(g\)为\(P\)的原根),那么\(a_i^k\equiva_j\pmodP\)等价于\(kb_i\equivb_j\pmod{P-1}\),有解的充要条件是\(\gcd(b_i,P-1)\midb_j\)。显然......
  • AtCoder Beginner Contest 335 (Sponsored by Mynavi)
    AtCoderBeginnerContest335(SponsoredbyMynavi)A-2023代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;#definefifirst#definesesecondvoidsolve(){strings;cin>>s;......
  • AtCoder Beginner Contest 335 总结
    ABC335总结A.202<s>3</s>翻译给你一个由小写英文字母和数字组成的字符串\(S\)。\(S\)保证以2023结尾。将\(S\)的最后一个字符改为4,并打印修改后的字符串。分析两种做法:直接把最后一个字符改为4,然后输出。输出前\(n\)个字符后输出4。code#include<bits/stdc......
  • AtCoder Beginner Contest 295
    B-Bombsd难度:⭐题目大意给定一个n*m的网格,其中'.'表示空白,'#'表示障碍物,数字x表示此处有一个炸弹,会将附近曼哈顿距离小于等于x的格子都变成空白;问所有炸弹爆炸后的网格;解题思路数据范围很小,暴力即可;神秘代码#include<bits/stdc++.h>#definei......