首页 > 其他分享 >Codeforces Round 928(Div. 4)

Codeforces Round 928(Div. 4)

时间:2024-02-20 15:34:09浏览次数:31  
标签:奇数 int 个数 Codeforces 928 solve ans Div

Dashboard - Codeforces Round 928 (Div. 4) - Codeforces

第一次参加CF,最后一道题连题都没读,下次不会就跳,菜是原罪

A:找字符串中A,B数量,遍历一下最后比较即可

B:判断是三角形还是正方形,题目表示除了正方形就是三角形,所以直接判断是不是正方形,用ans数组记录每一行 1 的个数,然后从大到小排序,如果有ans[1] 和 ans[2]相等,就是正方形,不然就是三角形

void solve(){
    int n;cin>>n;
    memset(a,0,sizeof(a));
    memset(ans,0,sizeof(ans));
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            cin>>a[i][j];
            if(a[i][j]-'0'==1) ans[i]++;
        }
    }
    sort(ans+1,ans+1+n,cmp);
    if(ans[1]==ans[2]) cout<<"SQUARE"<<endl;
    else cout<<"TRIANGLE"<<endl;
}

C:计算数位和,但是直接算的话会超时,所以其实考察的是前缀和,提前把200000个数每个数的数位和计算并存起来,直接用就可以了

int a[maxn],b[maxn];
int f(int x){
    int ans=0;
    while(x>0){
        ans+=x%10;
        x/=10;
    }
    return ans;
}
void solve(){
    int n;cin>>n;
    cout<<b[n]<<endl;
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    for(int i=1;i<=200000;i++){
        a[i]=f(i);
        b[i]=b[i-1]+a[i];
    }
    int t;cin>>t;
    while(t--){
        solve();
    } 
    
    return 0;
}

D:判断是否存在两个数二进制的每一位相不相同,注意这里需要判断31位,如果输入的n个数中存在两个数的每一位都不同,就在一个组,不然那个数一个人一组,可以得出存在的这两种数异或为0。

思路是用map来记录,如果跟这个数异或为0的数没出现过,先让它自己一个组,把他的另一半(即异或为0的数)也放进来,这样下次碰见他的另一半的时候,发现关于他已经有一个组了,直接把他从组里删除就可以了

void solve(){
    int n;cin>>n;
    map<ll,int> mp;
    int ans=0;
    for(int i=1;i<=n;i++){
        int x;cin>>x;
        if(!mp[x]){
            ans++;
            mp[((1<<31)-1)^x]++;
        }else mp[x]--; 
    }
    cout<<ans<<endl;
}

E:放牌的问题,根据样例的解释模拟一下,发现跟分治有点沾边,下面是一个推导:

当n=7:

f(1,2,3,4,5,6,7)
=f(2,4,6)  相当于  ( f(1,2,3) )*2
=f(2) 相当于 ( f(1) )*2

所以相当于每次删去奇数,剩下的偶数 / 2 变成奇数
当n=18:
f([1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18], 15)
=f([2,4,6,8,10,12,14,16,18], 6)    删掉:(18+1)/2个数
=f([1,2,3,4,5,6,7,8,9], 6)*2          
=f([2,4,6,8], 1)*2    删:(9+1)/2个数
=f([1,2,3,4], 1)*4

void solve(){
    int n,k;cin>>n>>k;
    int cnt=0; //轮次 
    while(k>(n+1)/2){ //k大于奇数的个数 
        int num=(n+1)/2; //奇数的个数 
        k-=num;  //奇数在第一轮已经放下,所以减去放下的数 
        n/=2;    //剩下元素/2变成奇数 
        cnt++;   //轮次+1 
    }
    cout<<((2*k-1)<<cnt)<<endl;  
}

 

继续努力吧,争取下次Div4全部写完

标签:奇数,int,个数,Codeforces,928,solve,ans,Div
From: https://www.cnblogs.com/accbulb/p/18023223

相关文章

  • Codeforces Round 900 (Div. 3)
    题目A.只要k出现过就是YES#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=1e5+10;#defineinf0x3f3f3f3fvoidsolve(){intn,k;cin>>n>>k;map<int,int>mp;for(inti=0,x;i<n;i++){cin......
  • Codeforces Round 928 (Div. 4) (小白的复盘)
    A.VladandtheBestofFive思路:给你一个长度字符串只包含A和B输出最多的字符解法:按题意来Code:#include<bits/stdc++.h>usingnamespacestd;intmain(){intt;cin>>t;while(t--){strings;cin>>s;intcnt=0;fo......
  • Codeforces Round 928 (Div. 4)(A、B、C、D、E、G)
    目录ABCDEGA统计A、B输出#include<bits/stdc++.h>#defineintlonglong#definerep(i,a,b)for(inti=(a);i<=(b);++i)#definefep(i,a,b)for(inti=(a);i>=(b);--i)#definepiipair<int,int>#definelllonglong#definedbdouble#de......
  • Codeforces Round 928 (Div. 4)
    总结一下最近:感觉过于追求进度了,没有好好的把每题都吃透消化,然后有点依赖题解了,没有好好的思考...B.VladandShapesB题输入二维数组的时候不可以直接两个for循环然后cin,要读入char,再转为数字赋值给二维数组,因为他读入的时候不带有空格而int是要有空格的,这样子比如读000就把它......
  • CF-928(已更新:B C E)
    CF-928排名四千多,目前为止排名最高的一场~E题我赛时基本上是猜的结论(但是也推了快一小时才想到有这个可能性),因此目前只能放个码在这(⊙﹏⊙)D的话问了学长思路,正在补了0-^-0……但是上一场牛客打得特别烂(⊙﹏⊙),还是等我补了牛客的再更新吧-^-B分析观察它的性质,答案为正方......
  • Codeforces Round 924 (Div. 2)
    目录写在前面ABCDEF写在最后写在前面比赛地址:https://codeforces.com/contest/1928。终于把欠下的一堆题补上了呃呃天使骚骚共通线什么构式呃呃,一周目就想走老师线直通单身笑死我了。A签到。发现等分后重新拼接可以得到\(\frac{x}{2}\times2y\)与\(\frac{y}{2}\times2......
  • Codeforces Round 927 (Div. 3)(A~F)
    目录ABCDEFA第一个遇到连续两个荆棘的地方就不能再赢金币了。所以统计连续两个荆棘之前的所有金币#include<bits/stdc++.h>#defineintlonglong#definerep(i,a,b)for(inti=(a);i<=(b);++i)#definefep(i,a,b)for(inti=(a);i>=(b);--i)#definepiipai......
  • Codeforces Round 927 (Div. 3)
    CodeforcesRound927(Div.3)A-ThornsandCoins解题思路:出现连续两个障碍之前,所有金币都能拿到。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;#definefifirst#definesesecondusingi128=__int128_t;......
  • D. Divisible Pairs
    原题链接题解如果\((a_i+a_j)\mod\x==0\)那么\((a_i\mod\x+a_j\mod\x)\mod\x==0\)如果\((a_i-a_j)\mod\y==0\)那么\(a_i\mod\y==a_j\mod\y\)所以我们可以把每个\(a\)的求模情况存下来,\(a[i]\)的贡献为其前面的\(a\)出现的对应求模情况数量\(co......
  • Codeforces Round 927 (Div. 3)
    CodeforcesRound927(Div.3)C.LR-remaindersDescription给定一个长度为\(n\)的数组\(a\)和\(n\)个指令,每条指令为\(\texttt{L,R}\)中的一种。依次处理每个指令:首先,输出\(a\)中所有元素的乘积除以\(m\)的余数。然后,如果当前指令为\(\textttL\),则移除数组......