首页 > 其他分享 >Edu 145 A~D

Edu 145 A~D

时间:2023-04-30 11:24:06浏览次数:26  
标签:typedef 145 int Edu long ans 断点 逆序

A. Garland

将情况按照相同的数字的个数进行分类讨论即可。

如1113 相同数字数最大为3 对应的答案为6

B. Points on Plane

通过画图和观察数据,可以发现答案等于sqrt(n)向上取整再减1

值得注意的是浮点数会损失精度,保险起见,要用long double和sqrtl

或者使用二分

C. Sum on Subarrays

思维题,这类题目往往需要通过尝试,画图,模拟样例等找出一些性质

然后将这些性质组合起来,得出答案

写这类题目的关键就是要多尝试,不要心急

本题我们可以发现如果在数组的末尾放置合适的正数可以增加n个正区间,接着在n-1的位置放,又可以增加n-1个正区间。

我们就以这样的方式减少k,直到某个位置i使得k<i,这时我们就在k位置放,k+1位置放一个绝对值大于k位置正数的负数。

通过这种方式我们可以构造出所有的k

递归写法

#include<bits/stdc++.h>

using namespace std;

#define endl '\n'
typedef long long LL;
typedef pair<int,int> PII;
const int INF=0x3f3f3f3f;

void fun(vector<int>&ans,int n,int k){
    if(!k){
        for(int i=0;i<n;i++)ans[i]=-1;
        return;
    }
    if(k>=n){
        ans[n-1]=400;
        fun(ans,n-1,k-n);
    }else{
        ans[k-1]=100;
        ans[k]=-200;
        for(int i=k+1;i<n;i++)ans[i]=-1;
        fun(ans,k-1,0);
    }
}

void solve(){
    int n,k;
    cin>>n>>k;
    vector<int>ans(n);
    fun(ans,n,k);
    for(int i=0;i<n;i++)cout<<ans[i]<<' ';
    cout<<endl;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T;
    cin>>T;
    while(T--){
        solve();
    }   
    return 0;
}

1809D - Binary String Sorting
最终状态一定是左边全为0,右边全为1

根据代价,我们一定是保证总操作次数最少的情况下,尽量多使用第一个操作

如果只使用交换,需要交换的次数就等于逆序对的数量

可以证明(无论是01串还是一般的串):如果逆序对的数量大于等于2,那么一定存在一个数构成了2个及以上个数的逆序对,那么我们就可以通过一次删除替换2次以上的交换

所以使用操作一的次数一定小于等于1

这样我们就可以可以枚举断点,断点左右为10,就使用操作一,其余全部使用操作二,否则全部使用操作二

对所有断点的结果取个min即可

#include<bits/stdc++.h>

using namespace std;

#define endl '\n'
typedef long long LL;
typedef pair<int,int> PII;
const int INF=0x3f3f3f3f;

const long long C=1e12;

void solve(){
    string s;
    cin>>s;
    s='?'+s;
    int n=s.size()-1;
    vector<int>cnt0(n+2),cnt1(n+2);
    for(int i=1;i<=n;i++)cnt1[i]=cnt1[i-1]+(s[i]=='1');
    for(int i=n;i;i--)cnt0[i]=cnt0[i+1]+(s[i]=='0');
    LL ans=1e18;
    //枚举断点 注意有n+1个点
    for(int i=0;i<=n;i++){
        LL res=0;
        if(s[i]=='1'&&s[i+1]=='0'){
            res+=C;
            res+=(cnt1[i-1]+cnt0[i+2])*(C+1);
        }else{
            res+=(cnt1[i]+cnt0[i+1])*(C+1);
        }
        ans=min(ans,res);
    }
    cout<<ans<<endl;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T;
    cin>>T;
    while(T--){
        solve();
    }
    return 0;
}

 

标签:typedef,145,int,Edu,long,ans,断点,逆序
From: https://www.cnblogs.com/F-beginner/p/17364558.html

相关文章

  • Educational Codeforces Round 1
    A.TrickySum公式求出1到n的和,然后枚举二等整次幂。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongvoidsolve(){intn;cin>>n;intsum=(1+n)*n/2;for(inti=1;i<=n;i<<=1)sum-=i......
  • Educational Codeforces Round 145 (Rated for Div. 2)
    Preface补题A~D都能秒出,E没看出性质被薄纱了,F感觉是个丁真题随便讨论下就过了后面看了下F的标算是个倍增,感觉Tutorial对性质挖掘的还不够的说A.GarlandSB题,设出现次数最多的颜色个数为\(cm\),若\(cm\le2\)则答案为\(4\);若\(cm=3\)则答案为\(6\),若\(cm=4\)则无解importjav......
  • [P4145 上帝造题的七分钟 2 / 花神游历各国]题解
    P4145上帝造题的七分钟2/花神游历各国题目描述分析一开始在思考有没有一个数学公式来处理每一个开方的操作但发现数据的\(\le10^{12}\)那么最多开六次就变成1了(突破口)这样每一个数的有用操作只有6次其他就全部是1很显然,我们可以去记录每一段是否全为1再用线段树、分......
  • cf-edu-142.D
    题目链接:https://codeforces.com/problemset/problem/1792/D算法:tire树求最长公共前缀(lcp)。反思:题目转换出的题意已大致得到,但怎么具体求不会。思路:tire树维护一个结构,1在哪些位置出现,2在哪些位置出现,以此类推。代码:#include<bits/stdc++.h>usingnamespacestd;consti......
  • Educational Codeforces Round 147 (Rated for Div. 2)
    Preface补题这周比赛挺少,不过后面可能就很少有时间补以前的比赛了的说现在除了要做学校的集训专题外,还要刷一下蓝桥杯国赛的题,可以说是很忙碌了而且由于JAVA的期末考试要来了,为了熟悉下语法以后补题的时候前面的题目可能会用JAVA来写(其实我写的JAVA看起来和C++真没啥区别)A.......
  • PYTHON REDUCE
    Reduce当需要对一个列表进行一些计算并返回结果时,Reduce是个非常有用的函数。举个例子,当你需要计算一个整数列表的乘积时。通常在python中你可能会使用基本的for循环来完成这个任务。现在我们来试试reduce:fromfunctoolsimportreduceproduct=reduce((lambdax......
  • Educational Codeforces Round 147(A~E)(补提记录)
    EducationalCodeforcesRound147(RatedforDiv.2)A:题意:每个问号都能被替换成0~9,求替换每个问号后所能的到的数的数量注:所得到的序列不能有前导0思路:先判断第一位是什么,作为特判,为0,则不能得到任何数输出0,为?则答案×9再依次枚举之后的每一个数,若为问号答案*10#include<io......
  • dolphinscheduler3.1.5-全局参数使用注意事项
    1.每个工作流都应配置本身需要的全局参数,即使是作为sub_process因为工作流的全局变量只能作用到当前工作流中的任务节点及下一级的子工作流的任务节点,再嵌套子工作流,就获取不到最上级工作流的全局变量了。2.SQL任务类型,动态表名如何通过全局变量来获取在SQL任务节点配置本......
  • MapReduce原理
         MapReduce运行流程  MapReduce容错机制 ......
  • [LeetCode] 1342. Number of Steps to Reduce a Number to Zero 将数字变成 0 的操作
    Givenaninteger num,return thenumberofstepstoreduceittozero.Inonestep,ifthecurrentnumberiseven,youhavetodivideitby 2,otherwise,youhavetosubtract 1 fromit.Example1:Input:num=14Output:6Explanation: Step1)14ise......