首页 > 其他分享 >Codeforces Round #820 (Div. 3) F

Codeforces Round #820 (Div. 3) F

时间:2022-11-04 12:11:08浏览次数:56  
标签:return int sum Codeforces void Div 820 size

F. Kirei and the Linear Function

首先我们知道的是给定长度w 都是%9意义下的
所以我们枚举四个位置的数就是9^4 预处理出来答案
这里我们要去w长度的串%9 但是w的位数过高 我们不能直接就是 转成int来做
我们这里就有一个引理 x \mod 9的值与 x 的各位数字之和 \mod 9 的值相等
(说起来这个也是我上次在和学长闲谈时知道的 没想到直接用上了
然后我们知道了这个之后就直接用前缀和处理出来
好像就没什么要写的了 直接上代码吧

vector<int>a[9],sum(N);
map<pair<int,int>,pair<int,int>>mp;
pair<int,int> find(int i,int j){
    if(i==j){
        if(a[i].size()>=2)return {a[i][0],a[i][1]};
        else return {-1,-1};
    }else{
        if(a[i].empty()||a[j].empty())return {-1,-1};
        return {a[i][0],a[j][0]};
    }
}
string s;
void init(){
    for(int i=0;i<9;i++)a[i].clear();sum.clear();
    mp.clear();
    cin>>s;int n=(int)s.size();s=")"+s;
    int w;cin>>w;
    for(int i=1;i<=n;i++)sum[i]=s[i]-'0';
    for(int i=1;i<=n;i++)sum[i]+=sum[i-1];
    for(int i=1;i+w-1<=n;i++)
        a[(sum[i+w-1]-sum[i-1])%9].push_back(i);
    for(int k=0;k<9;k++)
        for(int m=0;m<9;m++){
            mp[{k,m}]={-1,-1};
            for(int i=0;i<9;i++)
                for(int j=0;j<9;j++)
                    if((i*m+j)%9==k){
                        auto t=find(i,j);
                        if(t.first==-1&&t.second==-1)continue;
                        if(mp[{k,m}].first==-1&&mp[{k,m}].second==-1)mp[{k,m}]=t;
                        else if(mp[{k,m}]>t)mp[{k,m}]=t;
                    }
        }
}
void solve(){
    int l,r,k;cin>>l>>r>>k;
    int t=(sum[r]-sum[l-1])%9;
    cout<<mp[{k,t}].first<<' '<<mp[{k,t}].second<<endl;
}

标签:return,int,sum,Codeforces,void,Div,820,size
From: https://www.cnblogs.com/ycllz/p/16857332.html

相关文章

  • Codeforces Global Round 20 D F1 F2/more
    https://codeforc.es/contest/1672F1https://www.luogu.com.cn/blog/AlexWei/solution-cf1672f1将置换分解为若干轮换(环),悲伤值越大\(\Rightarrow\)环越少(设环为\(k......
  • Contest 2050 and Codeforces Round #718 (Div. 1 + Div. 2) D
    D.ExplorerSpace我们考虑一个性质就是他最多就是找到一条k/2的最短路径然后回来这样是肯定是包含最优解的这个观察第二个样例我们将其改变一下要是我们一半的长度......
  • CodeForces 1540B Tree Array
    CF传送门洛谷传送门很强的一个题。发现根的选择很重要,于是考虑先枚举根。考虑枚举两个点对\(i,j\(i<j)\),如果\(j\)比\(i\)先被标记,那么\(i,j\)就贡献了一个逆......
  • CodeForces - 204A Little Elephant and Interval
    题意:给定区间[l,r],问区间内有多少第一个数字和末尾数字一样的数。解:练习一些数位dp。先从高到低dp[pos][fir]表示dp到第pos个位置,以fir开头的串的数量,其中fir不为0。这道......
  • Manthan, Codefest 18 (rated, Div. 1 + Div. 2) (E,F,G)
    LinkEm次操作,每次加边后询问最大旅行团。旅行团的定义:旅行团中的每个人都至少有k个邻接点在团里。显然会肯定很想全选,但是有的人压根没有k个邻接点,只能直接删掉,然后一......
  • Codeforces Round #610 (Div. 2) C
    C.PetyaandExamhttps://codeforces.com/contest/1282/problem/C考虑贪心先对于时间排序然后贪心我们可以不考那我们可以在此之前离开然后在离开之前这段时间多做......
  • np.divide()
    用例:numpy.divide(x1,x2,/,out=None,*,where=True,casting=‘same_kind’,order=‘K’,dtype=None,subok=True[,signature,extobj])=<ufunc‘true_divide’......
  • Codeforces Round #634 (Div. 3) E
    E2.ThreeBlocksPalindrome(hardversion)我们考虑一种最优构造对于一个数x我们肯定要的是他的前几个再最后几个中间选最多的一个数这样显然是最优的我们枚举x......
  • Codeforces Global Round 7 D
    D1.Prefix-SuffixPalindrome(Easyversion)easy版本我们只需要n2dp预处理出快速判断回文串然后我们再通过双指针O(n)求解最大串intdp[5010][5010];voidsolve(){......
  • Codeforces Round #820 (Div. 3) A-G
    比赛链接A题解知识点:模拟时间复杂度\(O(1)\)空间复杂度\(O(1)\)代码#include<bits/stdc++.h>#definelllonglongusingnamespacestd;boolsolve(){......