首页 > 其他分享 >Codeforces Round 885 (Div. 2) C. Vika and Price Tags

Codeforces Round 885 (Div. 2) C. Vika and Price Tags

时间:2023-08-05 20:34:41浏览次数:44  
标签:return 885 Tags int Price Vika rightarrow

C. Vika and Price Tags

C - Vika and Price Tags

题意:

​ 初始两串数列\(a, b\),对于第\(i\)个数,令\(c_i=|a_i-b_i|\),然后将数列\(a=b,b = c\)。重复这样的操作,问是否可能让\(a\)串全部变成0。

思路:

这题实际上之前已经发过,但最近打牛客对这题有了新的理解,所以来记录一下。

​ 让我们假设\(a >> b\),那么我们模拟的过程就会变成如下这样:

\[(a, b)\rightarrow (b,a-b)\rightarrow (a-b,a-2b)\rightarrow (a-2b,b)\rightarrow (b,a-3b)\rightarrow (a-3b,a-4b)\rightarrow \\(a-4b,b)\rightarrow (b,a-5b)\rightarrow (a-5b,a-6b)\rightarrow (a-6b,b) \rightarrow (b,a-7b) \]

​ 仔细观察可以发现,\((a-kb,b)\)和\((b,a-tb)\)的结构在反复出现,且\(k\)一定为偶数,\(t\)一定为奇数。

​ 对于这种一个数不断地减去另一个数的形式,我们可以回想起,裴蜀定理得,\(a,b\)辗转相减只可能得到其$gcd $的若干倍(gcd辗转相除的原理)

​ 也即是说,对于\((a,b)\)我们可以将其变成\((a\%b,b)/(b,a\%b)\),记\(t = a/ b\)

​ 对于\(t\)为奇数,\((a,b)\rightarrow(b,a \% b)\),次数为\((t - 1)/2 * 3 + 1\)

​ 对于\(t\)为偶数,\((a, b) \rightarrow (a\%b,b)\),次数为\(t/2*3\)

int cal(int a, int b){
    if(a == 0){
        return 0;
    }
    else if(b == 0){
        return 1;
    }
    if(a >= b){
        int t = a / b;
        if(t % 2){
            return cal(b, a % b) + 1 + (t - 1) / 2 * 3;
        }
        else{
            return cal(a % b, b) + t / 2 * 3;
        }
    }
    else{
        return 1 + cal(b, abs(a - b));
    }
}
 
void QAQ(){
    int n;
    cin >> n;
    vector<int> a(n + 1), b(n + 1);
    for(int i = 1; i <= n; i ++) cin >> a[i];
    for(int i = 1; i <= n; i ++) cin >> b[i];
    set<int> s;
    for(int i = 1; i <= n; i ++){
        if(a[i] == 0 && b[i] == 0) continue;
        s.insert(cal(a[i], b[i]) % 3);
    }
    if(s.size() <= 1) cout << "YES" << endl;
    else cout << "NO" << endl;
}

裴蜀定理得,\(a,b\)辗转相减只可能得到其$gcd $的若干倍(gcd辗转相除的原理)

标签:return,885,Tags,int,Price,Vika,rightarrow
From: https://www.cnblogs.com/woods4325/p/17608568.html

相关文章

  • 1848 Round 885 (Div. 2)
    VikaandHerFriends给定一张网格图,Vika在\((x,y)\)处,她的\(k\)个朋友分别在\((x_{1\simk},y_{1\simk})\)处,每次所有人都必须移动到相邻各格子,询问Vika能否永远逃离她烦人的朋友考虑对格子进行黑白染色,每次移动一定会变换格子颜色,那么只有相同颜色的人才会碰......
  • Codeforces Round 885 (Div. 2)
    CodeforcesRound885(Div.2)A.VikaandHerFriends题目大意太长了click思路可以手动模拟一下,可以发现当两个人的\(x+y\)值就行相同的就能抓到了#include<bits/stdc++.h>usingnamespacestd;intmain(){intT;cin>>T;while(T--){......
  • Codeforces Round 885 (Div. 2) 题解
    A.VikaandHerFriends看一下样例就可以发现,Vika以及她的朋友都不能走对角线,在这种情况下Vika和朋友的距离为偶数,且朋友一定追不上Vika所以直接判断Vika和朋友的距离是否都为偶数即可B.VikaandtheBridge显然贪心,枚举颜色,找到相邻距离最大的两块木板,记该距离为\(......
  • P8859 冒泡排序
    我回来了。参考:https://www.luogu.com.cn/blog/_post/509374、https://www.luogu.com.cn/blog/_post/510710。考虑type1,注意到\(1\)是不能被超越的,且一个数操作多次不优,因此第一步操作\(1\)不劣。因此从小到大归位每个数不劣,答案即为总数减去前缀\(\max\)的数目。从小到......
  • Codeforces Round #885 数学专场
    妙,我只能说妙。今天补DEF发现除了F诡秘的杨辉三角,我都能独立做出来。但为什么我感觉DE难度不如C!!!!A题意:一个人站在\((x,y)\)处,而其他人分别在\((x_1,y_1)\dots(x_n,y_n)\),每一次这个人先移动一步到上下左右四个格子,然后其他\(n\)个人再移动一步,求是否永远这个人与其他人不......
  • jstl tags
    前言=========================================================================JSTL标签库,是日常开发经常使用的,也是众多标签中性能最好的。把常用的内容,放在这里备份一份,随用随查。尽量做到不用查,就可以随手就可以写出来。这算是Java程序员的基本功吧,一定要扎实。 JSTL全名为J......
  • Codeforces Round 885 (Div. 2) A - C
    A.VikaandHerFriendsProblem-A-Codeforces题意:​ 在\(n*m\)的范围内,\(a\)和她的朋友在追逐游戏,每秒\(a\)和朋友必须从当前位置移到相邻的格子里(上下左右),在这一秒结束时\(a\)不能和朋友在同一格内。现在知道\(a\)和每一个朋友的初始位置,问\(a\)是否会被朋友追上。思路:......
  • SVN的标准目录结构:trunk、branches、tags
    我们在一些著名开源项目的版本库中,通常可以看到trunk,branches,tags等三个目录。由于SVN固有的特点,目录在SVN中并没有特别的意义,但是这三个目录却在大多数开源项目中存在,这是因为这三个目录反映了软件开发的通常模式。trunk是主分支,是日常开发进行的地方。branches是分支......
  • #885
    //A//如果两者的距离是奇数的话,那就追不上,如果是偶数,那就追的上//因为偶数是与小明同类型的位置,只需要把小明逼到墙角就可以了//可以画一个九宫格,然后把9x9的格子分两种颜色染上,一开始在相同颜色的格子一定会相遇#include<bits/stdc++.h>#defineintlonglongusing......
  • Codeforces Round 885 (Div. 2)
    Preface打的就是依托答辩居然也能上分,看来手稳还是重要的说D题半场开香槟以为随便写,然后没想到怎么处理这个局部没有三分性的函数,直接GG后面听学长一说其实分成四种函数分别求最值即可直接恍然大悟,只能说还是太菜太菜而且F好像是个蓝桥杯的某个题的弱化版,我说比赛的时候怎么那......