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

Codeforces Round 962(Div. 3)

时间:2024-07-27 19:17:36浏览次数:12  
标签:962 int ll Codeforces cin -- solve ans Div

Codeforces Round 962 (Div. 3)

A.legs

题解: 简单的贪心,可以对n预处理,将n除以2,此时可将动物视为1,则动物便是1条或两条腿,此时若是奇数才需要鸡,否则全部是牛便是最优解

Show Code
#include< bits/stdc++.h >
#define ANS cout << ans << '\n'
using namespace std;
void solve()
{
    int n,ans=0;
    cin>>n;
    n/=2;
    if(n&1) ans++,n--;
    n>>=1;
    ans+=n;
    ANS;
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int T = 1;
    cin >> T;
    while(T--) solve();
    return 0;
}

B.Scale

题解:简单的模拟

Show Code
#include < bits/stdc++.h >
#define FOR(i,j,n,k) for(int i = (j);i <= (n);i +=k )
using namespace std;
solve()
{
    int n,k;
    cin>>n>>k;
    vector< string> s(n+5);
    FOR(i,1,n,1) cin>>s[i];
    FOR(i,1,n,k) {
        FOR(j,0,n-1,k) cout<< s[i][j];
        cout<< endl;
    }
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int T = 1;
    cin >> T;
    while(T--) solve();
    return 0;
}

C.Sort

题解:简单的前缀数据结构维护处理,遍历字符串,使用int cnt[N][26]记录前缀不同字符种类数量,由题意我们不考虑该[l,r]区间字母的顺序,只需要满足同类字符数量相同即可,因此对于每次询问,使用 cnt[r][j]-cnt[l-1][j]得出该种字符在这个区间的数量并让答案加上两个串在该字符的数量差,最后将答案除2输出(原始答案是重了一倍的情况)

Show Code
#include < bits/stdc++.h>
#define FOR(i,j,n,k) for(int i = (j);i <= (n);i +=k )
#define ANS cout << ans << '\n'
using namespace std;
const int N = 2e5 + 10;
int n,q;
string a,b;
int cnta[N][26],cntb[N][26];
void init()
{
    a=" "+a,b=" "+b;
    FOR(i,1,n,1){
        FOR(j,0,25,1){
            cnta[i][j]=cnta[i-1][j];
            cntb[i][j]=cntb[i-1][j];
            cnta[i][j]+=(a[i]-'a')==j?1:0;
            cntb[i][j]+=(b[i]-'a')==j?1:0;
        }
    }
}
void solve()
{
    cin>>n>>q;
    cin>>a>>b;
    init();
    FOR(i,1,q,1){
        int l,r,ans=0;
        cin>>l>>r;
        FOR(j,0,25,1){
            int aa=cnta[r][j]-cnta[l-1][j];
            int bb=cntb[r][j]-cntb[l-1][j];
            ans+=abs(aa-bb);
        }
        ans/=2;
        ANS;
    }
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int T = 1;
    cin >> T;
    while(T --)
    {
        solve();
    }
    return 0;
}

D.Fun

题解:暴力枚举,枚举a,b,时间复杂度O(nlog(n))

\[当a=1时,b<= \frac{n}{1} , 当a=2时,b<= \frac{n}{2} ,当a=i时,b<=\frac{n}{i} \]

显然此时出现调和数列,而调和数列的数列和约为 ln(n+1)+r 证明链接

Show Code
#include< bits/stdc++.h >
#define ANS cout << ans << '\n'
typedef long long ll;
using namespace std;
int n,k;
void solve()
{
    cin>>n>>k;
    ll ans=0;
    for(int a=1;a<=n;a++){
        for(int b=1;a*b<=n&&(a+b)< ;b++){
            ans=ans+min((n-a*b)/(a+b),k-a-b);
        }
    }
    ANS;
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int T = 1;
    cin >> T;
    while(T--) solve();
    return 0;
}

E.Decode

题解:大概题意:字符串中每个[l,r]区间中0,1数量相等的子串的数量和的总和字串的子串,正向思维,现找出每个子区间,再从子区间中找满足的子串,难以进行,不妨逆向来,从满足的子串出发,若子串满足,其l,r可知该串对答案的贡献值,即(l+1)*(n-r+1),即包含该串的子区间数量,于是我们正向向右推进,以i为子串的右端点,用map记录左侧已扫过的点的贡献值,前缀和的方式记录,遇到1,temp++,否则temp--,每次走到这个右端点就找左侧与之相等的点, 易错细节即初始时mp[0]=1

Show Code
#include
using namespace std;
const int N=2e5+5;
typedef long long ll;
const int mod=1e9+7;
string s;
void solve()
{   
    cin>>s;
    int n=s.size();
    s=" "+s;
    ll temp=0;
    map< ll,ll> mp; 
    mp[0]=1;
    ll ans=0;
    for(int i=1;i<=s.size();i++){
        if(s[i]=='1') temp++;
        else temp--;
        ans=ans+mp[temp]*(n-i+1)%mod;
        mp[temp]+=i+1;
    }
    ans%=mod;
    cout<< ans<< endl;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int T;
    cin>>T;
    while(T--) solve();
    return 0;
}

标签:962,int,ll,Codeforces,cin,--,solve,ans,Div
From: https://www.cnblogs.com/hannna/p/18327347

相关文章

  • Codeforces Round 962(Div .3)
    CodeforcesRound962(Div.3)A.legs题解:简单的贪心,可以对n预处理,将n除以2,此时可将动物视为1,则动物便是1条或两条腿,此时若是奇数才需要鸡,否则全部是牛便是最优解ShowCode#include<bits/stdc++.h>#defineANScout<<ans<<'\n'usingnamespacestd;voidsolve(){......
  • 【做题笔记】板刷 CodeForces
    CF1987DWorldisMine第一想法是贪心的决策,考虑到是博弈论,每一轮决策肯定都是最优的。显然贪心做法假掉。发现问题具有最优子结构与后效性,考虑dp。将\(a_i\)数组排序,将相同元素打包成块,块长为\(b_{a_i}\)。设\(f_{i,j}\)表示以第\(i\)个块结尾,剩余决策数为\(j\)的最......
  • Codeforce 962 Div3 C~E 题解
    C题目大意​给定两个字符串a,b,q个询问,每次操作可以将a[i]赋值为任意一个字符,每次询问[l,r]区间内使得sorted(a[l,r])==sorted(b[l,r])的最小操作次数分析​ 不妨先考虑一个区间如何判断sorted后的字串是否相等,发现跟字符出现的次数有关,于是考虑前缀和预处理每一个26......
  • Codeforces Round 962 (Div. 3) 题解
    A.Legshttps://codeforces.com/contest/1996/problem/A翻译:农夫约翰的农场又迎来了美好的一天。农夫约翰来到农场后,数了数n条腿。众所周知,农场里只住着鸡和牛,一只鸡有2条腿,而一头牛有4条腿。假设约翰农场主数清了所有动物的腿,那么他的农场里最少有多少动物?思路求最少......
  • Codeforces Round 962 (Div. 3) 补题记录(A~G)
    这场Div.3难度高于平时。A#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=500100;inta[N];signedmain(){intT;scanf("%lld",&T);while(T--){intn;scanf("%lld",......
  • Codeforces Round 961
    省流:运气好没有掉分)B2Bonquet(HardVertion)(CF1995B2)事实上B1都写挂了(尖叫)处理花瓣数相差不超过1的花,可以用map存储每种花的数量,顺序遍历即可(其实是不想排序统计,好麻烦);那么如何计算最终答案呢。。。此处省略我赛时乱七八糟的一堆复杂做法,比较简单的写法是先找到一个可行的......
  • Codeforces 913 div3 A-G
    A题意分析把给定的坐标的那一行和那一列的其他所有坐标都输出来C++代码#include<iostream>usingnamespacestd;intmain(){ intt; cin>>t; while(t--){ strings; cin>>s; for(inti=1;i<=8;i++){ if(i+'0'!=s[1])cout<<s[0]<<i<<end......
  • CodeForces 1883A Morning
    题目链接:CodeForces1883A【Morning】思路    模拟,特判当密码中的某个元素为0时,用10减去当前光标的位置,并修改光标的位置为当前元素,再操作依次显示当前元素。对于其他情况则直接使用光标的位置减去目标位置,修改光标位置为当前元素,然后再操作一次显示当前元素。代码#......
  • CodeForces 1883B Chemistry
    题目链接:CodeForces1883B【Chemistry】思路    判断最多删去k个字符后剩下的部分为回文字符串,所以优先删除将个数为奇数个的相同字符删为偶数,当最后留下的字符串中,奇数个数的相同字符种类小于等于1时才会是回文字符串,如:aaabbbccc,此时个数为奇数的相同字符种类有三种,分......
  • 题解:Codeforces Round 961 (Div. 2) C
    C.Squaringtimelimitpertest:2secondsmemorylimitpertest:256megabytesinput:standardinputoutput:standardoutputikrpprppfoundanarray\(a\)consistingofintegers.Helikesjustice,sohewantstomake\(a\)fair —thatis,makeitnon......