首页 > 其他分享 >《看了受制了》第十三天,4道题,合计57道题

《看了受制了》第十三天,4道题,合计57道题

时间:2023-09-11 22:11:37浏览次数:48  
标签:道题 int 57 long st ++ include sum 第十三天

2023年9月11日

前面几天去建模,虽然感觉根本过不了。。。。。哎,我们继续回归受制了系列。最近也会总结知识。今天是第二次AK周赛。

ACWING5148 字符串匹配

题目理解,本题是个贪心。题目一点是B串可以随意调整顺序,那就非常EZ了。

  • 我们只需要进行对AB串做一个字符出现次数的统计
  • 先去匹配是否有完全相同的,然后打标记,证明已经被算过了
  • 然后再匹配大小写即可

代码实现

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;

const int N = 200, M = 2e5;

int a[N];
int b[N];
string n, m;
bool st[M];

int main()
{
    cin >> n >> m;


    for(int i = 0 ; i < m.size(); i++)
    {
        int p = int(m[i]);
        b[p]++;
    }

    int resa = 0, resb = 0;
    for(int i = 0 ; i < n.size(); i++)
    {
        int p = int(n[i]);

        if(b[p])
        {
            resa++;
            b[p]--;
            st[i] = true;
        }
    }

    for(int i = 0; i < n.size(); i++)
    {
        if(!st[i])
        {
            int p = int(n[i]);
            if(p < 97 && b[p + 32])
                resb++, b[p + 32]--;
            else if(p >= 97 && b[p - 32])
                resb++, b[p - 32]--;
        }
    }

    cout << resa << " " << resb;

    return 0;
}

ACWING5147 数量

题目理解

该题是DFS,我们枚举各种长度的47串的组合即可。

代码实现

#include<iostream>
#include<cstring>
using namespace std;

const int N = 10;

int n, u = 1;
int st[N];
int res;


void dfs(int p)
{
    if(p == u)
    {
        int sum = 0;

        for(int i = 0; i < p; i++)
            sum =  sum * 10 + st[i];

        if(sum <= n)
            res++;

        return;
    }

    st[p] = 4;
    dfs(p+1);
    st[p] = 7;
    dfs(p+1);
}


int main()
{
    cin >> n;
    int t = n;
    while(t)
    {
        memset(st, 0, sizeof st);
        dfs(0);
        t /= 10;
        u += 1;
    }

    cout << res;
    return 0;
}

最大GCD

题目理解

简单数论???应该不算吧,就理解题目,就是n / 2。因为1 ~ n中两数,且不相同的最大公约数就是n / 2

  • 因为最大值是n,如果n是偶数,那么n的越大公约数就是n / 2
  • 如果n是奇数,那么就是(n - 1) / 2int自带下取整,所以就是n / 2

代码实现

#include<iostream>
using namespace std;

int main()

{
    int n;
    cin >> n;

    for(int i = 1; i <= n; i++)
    {
        int a;
        cin >> a;
        cout << a / 2 << endl;
    }


    return 0;
}

ACWING5201 午餐音乐会

题目理解

对于我来说,这个题非常棒!是我完全没有做过的类型题。该题目需要完成一个目的就是让移动的消耗最少。
这个题的知识点是三分,因为我之前接触的二分,么办法解决,因为我没法确定是往左移损耗最小还是往右移动损耗最小。
我们经过分析题目可以得到如下图示结果:
每一个人的移动消耗图解

  • 我们可以看出,只有在这个长度为D的区间,损耗是0,往两边都会增加。是一个下凸函数。
  • 下凸函数有个性质,就是多个下凸函数求和,仍为下凸函数。
  • 然后我们就可得到总的损耗变化趋势,如下图。
    总体下凸趋势
  • 得到这个趋势,我们取三等分点。我们首先规定,左边的三等分点一定是大于等于右边的三等分点。那么就会有以下两种情况。
    情况一
    情况二
    很明显根据图示,橘色部分一定不会是答案,那么就可以把我的左边界,赋值为左三等分点!!
  • 右三等分点的情况相同。可以将右三等分点右边的部分去掉!那么最后就可以找到答案啦!!
    这个题非常不错!学到了新东西!

代码实现

#include<iostream>
#include<cmath>
using namespace std;

const long long N = 2e5 + 10;

long long p[N], w[N], D[N];
int n;
int l = 0, r = 1e9;


long long check(long long u)
{

    long long sum = 0;


    for(long long i = 1; i <= n; i++)
    {
        if(abs(p[i] - u) > D[i])
        {

            if(u >= p[i])
                sum += w[i] * (u - p[i]  - D[i]);
            else
                sum += w[i] * (p[i] - u - D[i]);
        }
    }

    return sum;
}


int main()
{
    cin >> n;

    for(long long i = 1; i <= n; i++)
        cin >> p[i] >> w[i] >> D[i];


    while (l <= r)
    {
        int midl = l + (r - l) / 3;
        int midr = r - (r - l) / 3;
        if (check(midl) <= check(midr)) r = midr - 1;
        else l = midl + 1;
    }

    cout << min(check(l), check(r));

    return 0;
}

标签:道题,int,57,long,st,++,include,sum,第十三天
From: https://www.cnblogs.com/wxzcch/p/17694672.html

相关文章

  • QOJ # 5573. Holiday Regifting
    题面传送门感觉有点奇妙。首先一个基础的想法就是一个一个往下推,维护每个数往下推的次数,统计当前数在前面的所有数一次归零后会加几次,然后计算这个数需要前面几轮归零,这样将这些系数乘起来就是需要归零的次数了。但是现在有一个问题就是前面每个数往下推的次数可能很大,这东西存......
  • 剑指 Offer 57 - II. 和为s的连续正数序列
    题目链接:剑指Offer57-II.和为s的连续正数序列题目描述:输入一个正整数target,输出所有和为target的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。解法思路:双指针:当总和小于target时,j指针向后移动,直到大于或等于停......
  • CMU15721 笔记:Project 1 - Foreign Data Wrapper
    CMU15-721Project1-ForeignDataWrapperPre2003年,SQL标准中增加了一个访问远程数据的规范,称为外部数据的SQL管理(SQL/MED)。从9.1版开始,PostgreSQL就开始开发这个特性来实现SQL/MED的一部分。在SQL/MED中,远程服务器上的表称为外部表。PostgreSQL的外部数据包裹......
  • 6574: 最大数 线段树/单点加/求区间最大值
    描述 给定一个正整数数列a1,a2,a3,⋯,an,每一个数都在0~p–1之间。可以对这列数进行两种操作:添加操作:向序列后添加一个数,序列长度变成n+1;询问操作:询问这个序列中最后L个数中最大的数是多少。程序运行的最开始,整数序列为空。写一个程序,读入操作的序列,并输出询问操作的......
  • CF1570D 题解
    思路分析前言题解区好似没有用哈希的啊。发现大家都在用map来存是否出现过数字,但是需要注意的是,map的单次查询时间复杂度是\(\mathcalO(\logn)\)的,对于大规模的数据就很可能会TLE。所以,我们可以使用哈希的方法来判断数字是否出现过。浅谈哈希哈希,是通过哈希函数将数......
  • CH59X/CH58X/CH57X sleep模式下串口唤醒收发数据
    整体程序逻辑:下方的具体程序及使用是基于CH592进行的SLEEP模式睡眠唤醒是由协议栈管理的,还在睡眠时,无法接收到数据。已经通过使能HAL_SLEEP开启睡眠。如果需要在睡眠时实时接收串口传来的数据是不可行的,需要先将设备唤醒之后再进行串口数据的接收;将唤醒的条件设置为下降沿唤醒......
  • 样本分析 99eddc2794077f97a5cfe3098f431c4cfc4fd6353957ee715b2eccbff066ce1d 由于.
     https://s.threatbook.com/report/file/99eddc2794077f97a5cfe3098f431c4cfc4fd6353957ee715b2eccbff066ce1d09:30:16:088, 99eddc2794077f97a5cfe3098f431c4cfc4fd6353957ee715b2eccbff066ce1d.exe, 1908:0, 1908, EXEC_create, C:\Users\bonelee\Desktop\99eddc2794077......
  • Apache HTTPD-换行解析漏洞(CVE-2017-15715)
    目录ApacheHTTPD-换行解析漏洞(CVE-2017-15715)1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证1.5、深度利用GetShell1.6、修复建议ApacheHTTPD-换行解析漏洞(CVE-2017-15715)说明内容漏洞编号CVE-2017-15715漏洞名称Apac......
  • P00575. 求约数之和3之完美数
     下面这个代码TLE了,因为做除法的速度比做乘法慢4到5倍。#include<bits/stdc++.h>usingnamespacestd;longlonga,b,ans,f[10000001];intmain(){cin>>a>>b;for(longlongi=1;i<=b/i;i++)for(longlongj=i;j<=b/i;j++){......
  • 《看了受制了》第十二天,4道题,合计53道题
    2023年9月6日今天是Atcoder、ACWING、牛客。预告!!已经再出Atcoder的爬虫翻译了(慢慢集成一下,数学建模完成后完善)。ACWING5199现代艺术题目理解这个题目以a数组作为横行的操作次数,b数组为纵向的操作次数。然后每一个位置的操作次数便是a[i]+b[j]就是第(i,j)的操作次数。......