首页 > 其他分享 >Codeforces Round 903 (Div. 3)

Codeforces Round 903 (Div. 3)

时间:2023-11-24 19:14:06浏览次数:35  
标签:903 int void Codeforces cin -- solve Div dp

Codeforces Round 903 (Div. 3)

A. Don't Try to Count

大概题意给你两个字符串a,b。a串可进行的操作为将整个a串复制到之前的a串后面(直接用a+a即可),然后看操作多少次可以让b串变为a串的子串如果不能就输出-1。

#include <iostream>
using namespace std;
string a,b;
void solve()
{
    int n,m;
    cin>>n>>m;
    cin>>a>>b;
    int cnt=0;
    while(n<m)
    {
        a=a+a;
        n<<=1;
        cnt++;
    }
    for(int i=0;i<n;++i)
    {
        bool pd=1;
        for(int j=i;j<i+m;++j)
        {
            if(a[j]!=b[j-i])
            {
                pd=0;
                break;
            }
        }
        if(pd)
        {
            cout<<cnt<<endl;
            return ;
        }
    }
    a=a+a;
    n<<=1;
    cnt++;
    for(int i=0;i<n;++i)
    {
        bool pd=1;
        for(int j=i;j<i+m;++j)
        {
            if(a[j]!=b[j-i])
            {
                pd=0;
                break;
            }
        }
        if(pd)
        {
            cout<<cnt<<endl;
            return ;
        }
    }


    cout<<-1<<endl;
}
int main() {
    int t;
    cin>>t;
    while(t--) {
        solve();
    }
    return 0;
}

B. Three Threadlets

题意:给三个数,分开他们使得剩下的为相同的

思路:三次分法,可以不完全用,所以只需要考虑最差的情况,将三个数排序为max,min,mid。如果三个数相等直接输出“YES”,如果三个数不相等的话那么就不能分min,如果mid也可以不分的话那么就有这两种情况
$$
max:mid:min=3:2:1(三次都用)/2:2:1(只用两次)
$$
如果mid=min那么只有max需要分那么就有比例为
$$
max:mid:min=4:1:1/3:1:1/2:1:1
$$

#include <iostream>
using namespace std;
void solve(){
    int a,b,c;
    cin>>a>>b>>c;
    if(a==b&&b==c) {
        cout<<"YES"<<"\n";
        return ;
    }int ma=a,mi=a;
    ma=max(ma,b);
    ma=max(ma,c);
    mi=min(mi,b);
    mi=min(mi,c);
    int mid=a+b+c-mi-ma;
    if(ma==2*mi&&mid==2*mi) {
        cout<<"YES"<<"\n";
        return ;
    }if(mid==mi&&ma==3*mi){
        cout<<"YES"<<"\n";
        return ;
    }if(ma==3*mi&&mid==2*mi) {
        cout<<"YES"<<"\n";
        return ;
    }if(mid==mi&&ma==2*mi){
        cout<<"YES"<<"\n";
        return ;
    }if(mid==mi&&ma==4*mi){
        cout<<"YES"<<"\n";
        return ;
    }
    cout<<"NO"<<"\n";
}
int main() {
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

C. Perfect Square

题意:有一个正方形矩阵,我们对其的操作一次为将一个字母++,当这个字母变成'z'时就不会再改变了,问多少次之后我们旋转90°之后和原来的矩阵重合

思路:一共有四种(90/360),我们可以求出这四个坐标中最大的,然后剩下的++记作一次操作

#include <bits/stdc++.h>
using namespace std;
char mp[1010][1010];
void solve(){
    int m;
    cin>>m;
    long long int res=0;
    for(int i=1;i<=m;i++){
        for(int j=1;j<=m;j++){
            cin>>mp[i][j];
        }
    }
    for(int i=1;i<=m/2;i++){
        for(int j=1;j<=m/2;j++){
            int ma=max(mp[i][j],max(mp[m-j+1][i],max(mp[m-i+1][m-j+1],mp[j][m-i+1])));
            res+=ma*4-mp[i][j]-mp[m-j+1][i]-mp[m-i+1][m-j+1]-mp[j][m-i+1];
        }
    }
    cout<<res<<endl;
}
int main()
{
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

D. Divide and Equalize

题意:操作:找到一个数x使得ai=ai/x;aj=aj/x;要求:所有数相等

思路:这个变化会使他的乘积没有变化,故我们可知他们的乘积为一个数的n次方,那么他的因数个数应该为n的倍数。

板子:质因数分解

void divide(int x)
{
    for (int i = 2; i <= x / i; i ++ )
        if (x % i == 0)
        {
            int s = 0;
            while (x % i == 0) x /= i, s ++ ;
            cout << i << ' ' << s << endl;
        }
    if (x > 1) cout << x << ' ' << 1 << endl;
    cout << endl;
}
#include <bits/stdc++.h>
using namespace std;
void solve(){
    int n;
    cin>>n;
    map<int,int> q;
    for(int j=0;j<n;j++){
        int x;
        cin>>x;
        for (int i = 2; i <= x / i; i ++ )
            if (x % i == 0)
            {
                int s = 0;
                while (x % i == 0) x /= i, s ++ ;
                q[i]+=s;
            }
        if (x > 1) q[x]++;
    }
    for(auto x:q){
        if(x.second%n!=0){
            cout<<"NO"<<"\n";
            return ;
        }
    }
    cout<<"YES"<<"\n";
}
signed main() {
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}

E. Block Sequence

题意:操作:删除一个数;要求:让数列分成一块一块的(什么叫块:假设你a[i]=x,那么a[i]~a[i+x-1]为一个块)

1.把自身直接删了dp[i]=dp[i-1]+1;

2.假设左边已经有一个完美的块,要使整个序列都为完美,只需要后面也为完美块,假设后面的数<a[i],dp[i]=d[i+1]+1;如果相等dp[i]=0,如果后面的数>a[i]那么dp[i]=ap[i+a[i]+1];

#include <bits/stdc++.h>
using namespace std;
const int MAX=1e6+10;
int dp[MAX],arr[MAX];
void solve()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>arr[i];
    }
    dp[n + 1] = 0;
    for(int i = n; i >= 0; i --)
    {
        if(arr[i] + i > n) dp[i] = dp[i + 1] + 1;
        else if(arr[i] + i == n) dp[i] = 0;
        else dp[i] = dp[i + arr[i] + 1];
        dp[i] = min(dp[i], dp[i + 1] + 1);
    }
    cout << dp[0] << '\n';
}
int main()
{
    int t;
    cin>>t;
    while (t--){
        solve();
    }
    return 0;
}

标签:903,int,void,Codeforces,cin,--,solve,Div,dp
From: https://www.cnblogs.com/bbbbear/p/17854547.html

相关文章

  • Codeforces Round 910 (Div. 2)
    CodeforcesRound910(Div.2)A.MilicaandString解题思路:统计给定字符串\(s\)中的\(B\)的数量,记录为\(cnt\)。如果\(cnt==k\):输出0;如果\(cnt<k\):从左往右数,将第\(cnt-k\)个\(A\)的位置前的数全部变成\(B\).如果\(cnt>k\):从左往右数,将第\(k-cnt\)个\(B\)的......
  • Graph Neural Networks with Diverse Spectral Filtering
    目录概符号说明DSF代码GuoJ.,HuangK,YiX.andZhangR.Graphneuralnetworkswithdiversespectralfiltering.WWW,2023.概为每个结点赋予不同的多项式系数.符号说明\(\mathcal{V}\),nodeset,\(|\mathcal{V}|=N\);\(\mathcal{E}\),edgeset;\(\mathcal{......
  • 子元素div如何占满整个td标签
    答:两种思路。思路一、放弃表格自带的自适应功能,也就是内容不会自动垂直居中,高度也不会由内容伸展。将div相对td绝对定位,div的边缘都紧贴td的边缘。td{position:relative;}div{position:abolsute;top:0;right:0;bottom:0;left:0;}思路二......
  • CodeForces 1898F Vova Escapes the Matrix
    洛谷传送门CF传送门Type\(1\)是简单的。直接输出空格个数即可。Type\(2\)也是简单的。显然要堵住不在起点和出口最短路上的格子,答案为空格个数减去起点到任一出口的最短路。考虑Type\(3\)。容易发现答案为空格个数减去起点到任两个出口的最短路(公共部分只算一次)。考虑......
  • Codeforces Round 697 (Div. 3)
    A.OddDivisor#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong//#defineint__int128#definedoublelongdoubletypedefpair<int,int>PII;typedefpair<string,int>PSI;typedefpair<string,string>PSS;constintN=......
  • [Codeforces] CF1475C Ball in Berland 题解
    BallinBerland-洛谷题意在毕业典礼上,有​个男孩和​个女孩准备跳舞,不是所有的男孩和女孩都准备结伴跳舞。现在你知道​个可能的舞伴,你需要选择其中的两对,以便使没有人重复地出现在舞伴里,求可能的数量。思路暴力最朴素,也是简单的方法,就是通过暴力组合进行配对。#include......
  • 切换div块内容以及切换点击事件
    今天想不用写好几个div块然后切换点击事件一直修改div中的内容于是写除了这个切换功能,以此记录遇到的问题也为大家解决一个难题。现在是这样的然后写jsfunctionChangeSale(){$("#img_one").attr("src","此处写图片地址");$('.hkeep_name').html("人名");......
  • Codeforces Round 905 (Div. 2)
    \(A.Chemistry\)https://codeforces.com/contest/1888/submission/233505834\(B.Raspberries\)https://codeforces.com/contest/1888/submission/233506474\(C.YouAreSoBeautiful\)题意:给定一个长\(n\)的序列\(a\)。对于区间\([l,r]\),如果\(a\)没有其它子序列(......
  • Codeforces Round 910 E
    tilian我们发现可以通过交换相邻两个的方式让字典序小的任意移动我们目标串t要是t[0]为c我们肯定是找到第一个合法的c的位置每次去找合法并且最优的那么哪些是不合法的呢比如我比c小的a,b位置还在第一个c前肯定就不能用了我们用26个set维护这个过程即可voidsolve()......
  • Codeforces Round 909 (Div. 3)
    CodeforcesRound909(Div.3)A.GamewithIntegers题意:给定一个数\(x\),\(A,B\)两人轮流进行操作,\(A\)先操作。每次给\(x\)加一或者减一,操作完后\(x\%3==0\)者获胜。判断获胜者。解题思路:判断\(A\)操作完是否能获胜,如果不能,那么一定是\(B\)获胜。代码:#include<bit......