首页 > 其他分享 >CodeTON Round 6 (Div. 1 + Div. 2)( A-D )

CodeTON Round 6 (Div. 1 + Div. 2)( A-D )

时间:2023-09-19 14:24:09浏览次数:35  
标签:int ll CodeTON long read using Div include Round

A. MEXanized Array

下次还得得签快一点,嘉心糖4分就过了


思路

一个简单的讨论 n k x 之间关系就行

完整代码

#include<bits/stdc++.h>
using namespace std ; 
#define ll long long
inline int read(){
    int s=0,w=1 ; char g=getchar() ; while( g>'9'||g<'0' ){if(g=='-')w=-1;g=getchar() ; }
    while( g>='0' && g <='9' )s=s*10+g-'0',g=getchar() ; return s*w ; 
} 
#define ll long long
void solve(){
    int n = read() , k = read() , x = read() ; 
    if( n < k ){
        cout<<-1<<endl ; return ; 
    }
    if( x > k ){
        ll sum = 0 ; 
        for( int i = 0 ; i < k ; ++i )sum += min( i , k-1 ) ; 
        for( int i = k ; i < n ; ++i )sum += x ; 
        cout<<sum<<endl ; return ; 
    }
    else if( x < k-1 ){
        cout<<-1<<endl ; return ; 
    }
    else{
        ll sum = 0 ; if( x == k )x-- ; 
        for( int i = 0 ; i < n ; ++i )sum += min( i , x ) ; 
        cout<<sum<<endl ; return ; 
    }
}
int main(){
    int t = read()  ; 
    while(t--)solve() ; 
    return 0 ; 
}

B. Friendly Arrays

赛后发现这题慢了的原因是分开写了一样的东西


思路

奇偶性+或运算的性质
因为最后要异或起来,所以不难发现:

奇数: Min = 全部或起来 Max = 不动
偶数: Max = 全部或起来 Min = 不动

完整代码

#include<bits/stdc++.h>
using namespace std ; 
#define ll long long
inline int read(){
    int s=0,w=1 ; char g=getchar() ; while( g>'9'||g<'0' ){if(g=='-')w=-1;g=getchar() ; }
    while( g>='0' && g <='9' )s=s*10+g-'0',g=getchar() ; return s*w ; 
} 
#define ll long long
const int MAXN = 200005 ;  
int a[MAXN] , b[MAXN] ; 
void solve(){
    int n = read() , m = read() ;
    for( int i = 1 ; i <= n ; ++i )a[i] = read() ; 
    for( int j = 1 ; j <= m ; ++j )b[j] = read() ; 
    int tmp = 0  , ans1 = 0 , ans2 = 0  ; 
    for( int j = 1 ; j <= m ; ++j )tmp |= b[j] ; 
    for( int i = 1 ; i <= n ; ++i )ans1 ^= (a[i]|tmp) , ans2 ^= a[i] ; 
    if(n%2)cout<<ans2<<" "<<ans1<<endl ; 
    else cout<<ans1<<" "<<ans2<<endl ; 
}
int main(){
    int t = read()  ; 
    while(t--)solve() ; 
    return 0 ; 
}

C. Colorful Table

傻逼ssw愚蠢地放错了位置,重置了l , r ,被ftp给叉了


思路

其实考虑到小的会覆盖大的。那我们从小到大考虑,倘若处理数 3 的时候 , 如果两侧有 1 2 占据满了所有位置,那么3所占的矩形周围就会被 1 2 占满。

翻译一下:我们用 L r 维护当前左右两侧据当前处理数最远的位置(第一个非小于的位置)

完整代码

#include<bits/stdc++.h>
using namespace std ; 
#define ll long long
inline int read(){
    int s=0,w=1 ; char g=getchar() ; while( g>'9'||g<'0' ){if(g=='-')w=-1;g=getchar() ; }
    while( g>='0' && g <='9' )s=s*10+g-'0',g=getchar() ; return s*w ; 
} 
#define ll long long
const int MAXN = 100005 ;  
vector<int>a[MAXN] ; bool used[MAXN] ; 
void solve(){
    int n = read() , k = read() ; 
    //cout<<n<<" --------- "<<k<<endl ;
    for( int i = 0 ; i <= k ; ++i )a[i].clear() ; 
    for( int i = 0 ; i <= k ; ++i )a[i].push_back(0) ; 
    for( int i = 1 ; i <= n ; ++i ){
        int x = read() ; a[x][0]++ ; used[i] = false ; 
        a[x].push_back(i) ; 
    }//cout<<n<<" --------- "<<k<<endl ;
    int l = 0 , r = n+1 ;
    for( int i = 1 ; i <= k ; ++i ){
        int ma = -10000000 , mi = 100000000 ; 
        while( used[l+1] && l < r )l++ ; while( used[r-1] && l < r )r-- ; 
        for( int j = 1 ; j <= a[i][0] ; ++j ){
            ma = max( ma , a[i][j] ) , mi = min( mi , a[i][j] ) ; 
            used[ a[i][j] ] = true ; 
        }
        if( ma == -10000000 || mi == 100000000 ){
            cout<<0<<" "  ; continue ; 
        }
        cout<<(r-l-1)*2<<" " ; 
    }
    cout<<endl ;
}
int main(){
    int t = read()  ; 
    while(t--)solve() ; 
    return 0 ; 
}

D. Prefix Purchase

嘉心糖:小学数学不及格,除法都不会


思路

其实考虑这么一个思路:我一定在能选相同次数下,选最远的 。 那考虑res的分配

实行以下策略:

不断寻找相同次数下,选最远的,将k减去消耗,将剩下的cost都降低(记录一个base_cost),不断重复这个过程直至跑完即可

完整代码

#include<bits/stdc++.h>
using namespace std ; 
#define ll long long
inline int read(){
    int s=0,w=1 ; char g=getchar() ; while( g>'9'||g<'0' ){if(g=='-')w=-1;g=getchar() ; }
    while( g>='0' && g <='9' )s=s*10+g-'0',g=getchar() ; return s*w ; 
} 
#define ll long long
const int MAXN = 200005 ;  
int c[MAXN]  ; 
int cost[MAXN] , id[MAXN] , tot = 0 ; 
void solve(){
    int n = read() ,  tot = 0 ; 
    for( int i = 1 ; i <= n ; ++i )c[i] = read() ;
    int k = read() ;
    int lim = 1000000005 ; 
    for( int i = n ; i ; --i ){
        if( lim <= c[i] )continue ; 
        lim = min( lim , c[i] ) ;
        id[++tot] = i ; cost[tot] = lim ; 
    } 
    int base = 0 , bcost = 0 ; lim = tot  ; 
    while( base < n ){
        int t = k/( cost[lim]-bcost ) ; 
        for( int i = lim ; i ; i-- ){
            if( k/(cost[i]-bcost) == t ){
                lim = i ; 
            }
        }
        for( int i = base+1 ; i <= id[lim] ; ++i )cout<<t<<" " ; 
        k -= t*(cost[lim]-bcost ) ; base = id[lim] ; bcost = cost[lim] ; lim-- ;
    }
    cout<<endl ; 
}
int main(){
    int t = read()  ; 
    while(t--)solve() ; 
    return 0 ; 
}

标签:int,ll,CodeTON,long,read,using,Div,include,Round
From: https://www.cnblogs.com/ssw02/p/17714503.html

相关文章

  • Oracle中的Round和Trunc函数区别
     一、Oracle中的Round和Trunc:如同对数字进行四舍五入和按位截取一样,Oracle对时间日期也提供了这两种功能。但比起对数字进行四舍五入和截取比较复杂:这是因为时间日期是有格式的。下面看看这两个函数的定义和用途:ROUND(date[,format])TRUNC(date[,format])round四舍五入算法rou......
  • 无涯教程-JavaScript - ROUND函数
    描述ROUND函数将数字四舍五入为指定的位数。ROUND是Excel舍入函数之一。语法ROUND(number,num_digits)争论Argument描述Required/OptionalnumberThenumberthatyouwanttoround.Requirednum_digitsThenumberofdigitstowhichyouwanttoroundthenum......
  • CodeTON Round 6 (Div. 1 + Div. 2, Rated, Prizes!)(A-D)
    CodeTONRound6(Div.1+Div.2,Rated,Prizes!)A.让你找mex为k的n个数,这n个数从0-x,问n个数的和最大值是多少先判断不行的。然后行的肯定有0-k-1,剩下还有就选x就行。查看代码#include<iostream>usingnamespacestd;typedeflonglongll;voidsolve(){ intn,k,x;......
  • win10 按键盘偶尔会出现一个光圈when pressing ctrl, randomly a white circle thing
    whenpressingctrl,randomlyawhitecirclethingappearsaroundmymousecurser.SolutionTwo:Thisonlyappliesifyouhave"Powertoys"installed. OpenPowertoysNavigateto'Mouseutilities'onthesidepanel.Turnoff'......
  • cf1869 div.1,div.2做题记录
    赛时总结div.2A题面对于任意一个区间,我们可以通过一次操作将区间内的数变得全部相同。如果区间内的全部数都相同,那么我们再做一遍区间操作,当这个区间长度为偶数时,区间异或和为\(0\),会清空区间;当区间长度为奇数时,区间内的数不会发生改变。但我们可以将一个长度为奇数的区间拆成......
  • 牛客周赛 Round 12 D 小美的区间异或和
    Link首先这个题目的限制卡的很死,最好是O(n)解决,其次当看到异或的时候,就可以考虑按照二进制位进行计算。对于这个题,我们定义\(dp_i\)表示以\(a_i\)为最右端的子区间的答案的和那么首先可以想到,贡献给这个答案的有两个部分,包括\(a_i\)的和不包括的,其中不包括\(a_i\)的部分的答案......
  • Educational Codeforces Round 107
    依然是四题,但是感觉太久没打,好像变得迟钝了。B题大概就是令\[c={10}^k,a=c*3^k,b=c*2^k\]C的话直接暴力维护每种颜色的第一个位置就行,反正只有50个D的话刚开始没什么想法,构造题什么的真的不会啊打表之后发现,对于k,在cost为0的情况下,最多能造出长度为\(k^2+1\)的串,也就是能够......
  • Codeforces Round 897 (Div. 2) A-E
    A.green_gold_dog,arrayandpermutation题意:给出一个长为\(n\)的数组\(a\),找到一个长为\(n\)的排列\(b\),使得\(a\)与\(b\)对应位置上的元素的差尽可能大Solution将数组\(a\)排序,然后令排列\(n,n-1,...,2,1\)对应到对应的元素即可structnode{intx,id;boolope......
  • 关于round4的反思
    那场只出了A题和K题,K题就是一个模拟题,结构体然后模拟一下情况就出来了,但是情况还蛮多的,当时wa了两发,第一发是因为漏了一种情况,第二发是循环里面出了点小问题,当时在第二发那里卡了很久,因为第一发是因为漏了情况,所以我们理所当然的以为还漏了情况,所以一直在那里想还有什么情况,试了......
  • css让某个view/div 定在某一个位置不动
    position:absolute 可以定位在某个位置,但是会跟着滚动条的位置而改变。postion:fixed可以定位在某个位置,并且也不会跟着滚动条的位置而改变。 postion:fixedleft:0px;bottom:0px; 会定位在底部左边位置。比如返回顶部/返回等。......