首页 > 其他分享 >codeforces round 862

codeforces round 862

时间:2023-04-05 12:11:35浏览次数:28  
标签:int LL 862 cin long codeforces 枚举 ans round

A.

和洛谷上的删数思路一致,后者是找峰顶,这个是找谷底

从前到后枚举每一位与要添加的数比大小,如果要添加的数 <= 该位的数,就继续枚举,否则就将这个数添加在其前面

B.

需要移动的步数 = 两个点所在的层数之差的绝对值,只要计算出所在层数就可以

一开始没想明白怎么算这个层数,先把每个点都变换到了整个图的左下角的1/4块

if x > n / 2, x = n + 1 - x;  if y > n / 2, y = n + 1 - y;

两个点 P (x1,y1) Q(x2,y2);

ans = abs ( min (x1,y1) - min(x2, y2) ) 

C.

b[i] <= a[i-1] && b[i] <= a[i]

所以答案就是b[i] = min (a[i[, a[i-1]) ,初始化 a[0] = a[n+1] = 1e9 + 1;

D.

 

E.

从高到低枚举每一位

首先考虑如何求得一个数字在该数组的位置

对于一个数字 abcde

从 0 开始计数,其所处位置为 a * 9^4 + b * 9^3 + c * 9^2 + d * 9^1 + e * 9^0 + 1

其中,如果 a >= 4,则在计算位置时 a -= 1,因为不能包含4这个数,bcde以此类推

对上面式子进一步解释,也就是其位置 = 以 0 ~ a-1 开头的不含4的五位数个数 + 以 0 ~ b-1 开头的不含4的四位数个数+ 三位 + 两位 + 一位 + 1

如果是从 1 开始计数,那么就 - 1 得到 a * 9^4 + b * 9^3 + c * 9^2 + d * 9^1 + e * 9^0

只需要将这个过程倒推就可以得到对应位置的数字

每次另 k 对 9 取余,所得即为该位的数字,注意,如果余数 >= 4 ,需要 +1 

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;

int T;
LL k;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    cin>>T;
    while(T--)
    {
        string a = "";
        cin>>k;
        while(k)
        {
            int t = k % 9;
            if(t >= 4) t++;
            a += '0' + t;
            k /= 9;
        }
        int siz = a.size();
        reverse(a.begin(),a.end());
        cout<<a<<'\n';
    }
    return 0;
}
View Code

另一个正向推的解法

从最高位向最低位依次枚举1 - 9, 不包含4, 一定是从小到大枚举

变量poi 记录第 i 位数字,初始 poi = 0

那么对于第 i 位数字 j,以它为开头的不含 4 的数字个数为 9^(i-1),如果 k > 9^(i-1),则  k -= 9^(i-1), poi = j ,

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;

int T;
LL s[20];
LL k;
LL ans;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    s[0] = 1;
    s[1] = 9;
    for(int i = 2;i <= 17;i++) s[i] = 9 * s[i-1];
    
    cin>>T;
    while(T--)
    {
        cin>>k;
        k++;
        ans = 0;
        for(int i = 15;i >= 1;i--)
        {
            int now = 0;
            for(int j = 1;j <= 9;j++)
            {
                if(j == 4) continue;
                if(k > s[i-1])
                {
                    k -= s[i-1];
                    now = j;
                }
            }
            ans = ans * 10 + now;
        }
        cout<<ans<<'\n';
    }
    return 0;
}
View Code

 同时4也可以变成任何0 - 9 的数

标签:int,LL,862,cin,long,codeforces,枚举,ans,round
From: https://www.cnblogs.com/xxx3/p/17289102.html

相关文章

  • Codeforces Round 861 (Div. 2)
    Preface这场感觉都是一个礼拜前补题打的了,但由于上周末事情比较多都没来得及写题解因此可能题意都记得不是很清楚了,就简略地谈一谈吧A.LuckyNumbers不难想到直接暴力从左端点枚举到右端点并对每个数进行暴力判断一个很naive的结论就是当答案为\(9\)时直接输出即可,然后我们......
  • Background Removal obs
            BackgroundRemoval/PortraitSegmentation/VirtualGreen-screenv0.5.16GotodownloadAuthorroyshilkrotCreationdateApr15,2021TagsbackgroundgreenscreenportraitremovalsegmentationOverviewU......
  • Codeforces Round 862 A-E
    CodeforcesRound862(Div.2)先简单写一下A-E的题解。A异或的经典性质:\(x\oplusx=0\)。B显然要把字典序最小的那个字母放到最前面。如果这个字母出现了很多次,那么应该选择最后一次出现的位置。这也很容易证明。C联立以后计算一下就行了。比赛的时候爆了一次int。......
  • Codeforces Round 717 (Div. 2) B. AGAGA XOOORRR(位运算)
    https://codeforces.com/contest/1516/problem/B题目大意:给定长度为n的数组a,问我们能不能一直选择两个相邻的元素进行异或后,删除这两个值,把异或值留下来,最后剩下>=2个数字,它们都是相同的?可以做到输出YES,不能的话输出NO。input23022423110outputYESNO题......
  • CodeTON Round 4 (Div. 1 + Div. 2, Rated, Prizes!)-C
    参考了佬的c题题解思路,感觉很巧妙,记录一下https://zhuanlan.zhihu.com/p/618685370#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=2*100010;inta[N];voidsolve(){ intn,c,d; cin>>n>>c>>d; set<int>se......
  • cf-div.2-862d
    题目链接:https://codeforces.com/contest/1805/problem/D赛时没过的题。思路:首先发现一个性质:对于k来说,如果树上的一个点到树的直径的两个端点的距离都小于k的话,那么这个点一定是一个孤立点。证明:采用反证法:假设\(x,y\)为树的直径的两个端点,\(a,b\)为另外两个点,且有\(d[a][x]<k......
  • Codeforces Round 862 (Div. 2) A-D题解
    比赛地址A.WeNeedtheZero题意:给出一个数组,对任意1<=i<=n,令bi=aix,问是否存在x,使得b<sub>1</sub>b2...bn=0Solution如果n为奇数,那么x一定存在,因为偶数个x异或得到的是0,直接令x=0(a<sub>1</sub>a2...an)即可如果n为偶数,那么x取任何值都不会影响结果,所以只用看a1a<sub>2</sub......
  • Codeforces Round 862 (Div. 2) (4.2)
    CodeforcesRound862(Div.2)A-WeNeedtheZero思路:某个数被异或两次相当于没变,即判断n的奇偶性;n为偶数时判断所有数异或后的数是否为0,若为0,输出任意数;n为奇数时答案为所有数异或后的值#include<bits/stdc++.h>usingnamespacestd;typedefpair<int,int>PII;consti......
  • Codeforces Round 862 (Div. 2)A-C思路复盘
    感觉这场前三题都简单,复盘一下赛时的脑回路QAQ,c二分wa了四发赛后才过的血亏A题意:问是否能找到一个数x,有\(b_i=a_i⊕x\),使得\(b\)数组的总异或和为0。思路:赛时模拟样例可以发现先把a数组的总异或和求出来假设为x,然后由异或性质可知相同为0,不同为1,可知这个x可能就是答案。然......
  • background-color 只填充容器的一半
     关键字的取值:toright  (表示从左往右渐变)toleft    (表示从右往左渐变)totop    (表示从下往上渐变)tobottom (表示从上往下渐变)角度的取值: 0deg  (从下到上totop)  180deg(从上到下tobottom)90deg  (从左到右toright)-90deg......