2019年7月31日(基本功练习1)

状态不好!!……

prob1&prob2,傻逼题,都是基础操作的练习,练手的,一个练循环,一个练\(sort\)和循环,垃圾,上代码:
\(T1\):

#include<iostream>
#include<cstdio>
using namespace std;
#define in read()
#define fur(i,a,b) for(int i=a;i<=b;i++)
#define int long long
inline int read()
{
    int x=0,f=1;char ch=getchar();
    for(;!isalnum(ch);ch=getchar()) if(ch=='-') f=-1;
    for(;isalnum(ch);ch=getchar()) x=x*10+ch-'0';
    return x*f;
}
int ans[2];
signed main()
{
    int t=in;
    while(t--)
    {
        int n=in;
        ans[0]=ans[1]=0;
        fur(i,1,n) ans[i%2]+=in;
        fur(i,1,n) ans[(i%2)^1]+=in;
        printf("%lld\n",ans[0]>ans[1]?ans[1]:ans[0]);
    }
    return 0;
}

\(T2\):

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define in read()
#define fur(i,a,b) for(int i=a;i<=b;i++)
#define jiba signed
const int xx=1e5+10;
inline int read()
{
    int x=0,f=1;char ch=getchar();
    for(;!isalnum(ch);ch=getchar()) if(ch=='-') f=-1;
    for(;isalnum(ch);ch=getchar()) x=x*10+ch-'0';
    return x*f;
}
int a[xx];
jiba main()
{
    int t=in;
    while(t--)
    {
        int n=in;
        fur(i,1,n) a[i]=in;
        sort(a+1,a+n+1);
        if(a[1]<a[2]-1)
        {
            printf("%d\n",a[1]);
            continue;
        }
        if(a[n]>a[n-1]+1)
        {
            printf("%d\n",a[n]);
            continue;
        }
        fur(i,1,n)
        {
            if(a[i]==a[i+1])
            {
                printf("%d\n",a[i]);
                break;
            }
        }
    }
    return 0;
}

prob5:Dish Owner

傻逼并查集,结果还调了老子半天,\(fuck\),不说了,上代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define in read()
#define fur(i,a,b) for(int i=a;i<=b;i++)
#define ll long long
inline int read()
{
    int x=0,f=1;char ch=getchar();
    for(;!isalnum(ch);ch=getchar()) if(ch=='-') f=-1;
    for(;isalnum(ch);ch=getchar()) x=x*10+ch-'0';
    return x*f;
}
const int xx=1e4+10;
int fa[xx],s[xx];
inline int find(int i){return i==fa[i]?i:(fa[i]=find(fa[i]));}
int main()
{
    int t=in;
    while(t--)
    {
        int n=in;
        fur(i,1,n) fa[i]=i,s[i]=in;
        int m=in;
        while(m--)
        {
            int op=in;
            if(op==0)
            {
                int x=in,y=in;
                int u=find(x),v=find(y);
                if(u==v)
                {
                    puts("Invalid query!");
                    continue;
                }
                if(s[u]>s[v]) fa[v]=u;
                else if(s[u]<s[v]) fa[u]=v;
            }
            else
            {
                int x=in;
                printf("%d\n",find(x));
            }
        }
    }
    return 0;
}

prob3:Cooking Schedule

傻逼二分,二分最长长度,判断可否,特判一即可,注意当最长长度为\(k\)时在一段长度为\(len\)的\(0\)或\(1\)中的最优划分策略为修改\(len/(k+1)\)天:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define in read()
#define fur(i,a,b) for(int i=a;i<=b;++i)
#define jiba signed
inline int read()
{
    int x=0,f=1;char ch=getchar();
    for(;!isalnum(ch);ch=getchar()) if(ch=='-') f=-1;
    for(;isalnum(ch);ch=getchar()) x=x*10+ch-'0';
    return x*f;
}
const int xx=1e6+10;
int len[xx],all,need,ans1,ans2;
char op[xx];
inline bool check(int k)
{
    int now=0;
    fur(i,1,all)
    {
        if(len[i]>k)
        {
            int u=len[i];
            now+=u/(k+1);
            if(now>need) return false;
        }
    }
    return true;
}
jiba main()
{
    int t=in;
    while(t--)
    {
        fur(i,1,all) len[i]=0;
        int n=in,hd=2,tl=0;
        all=0;need=in;
        ans1=0;ans2=0;
        scanf("%s",op);
        len[++all]++;
        op[0]-='0';
        if(op[0]!=0) ans1++;
        else ans2++;
        fur(i,1,n-1)
        {
            op[i]=op[i]-'0';
            if(op[i-1]!=op[i]) ++all;
            if(op[i]!=i%2) ans1++;
            else ans2++;
            ++len[all];
            tl=max(tl,len[all]);
        }
        if(ans1<=need||ans2<=need)
        {
            puts("1");
            continue;
        }
        int ans=tl;
        while(hd<=tl)
        {
            int mid=(hd+tl)>>1;
            if(check(mid)) tl=mid-1,ans=mid;
            else hd=mid+1;
        }
        printf("%d\n",ans);
    }
    return 0;
}

prob6:Triplets

30分部分分为暴力,在此不介绍。

正解数学推式子,将给定的式子拆开:设目前扫到的\(B\)序列的数为\(Y_p\),将\(A\)与\(C\)序列\(sort\)后,小于等于\(Y_p\)的为\(X_{1-n}\)与\(Z_{1-m}\),则我们要求的为\(\sum_{i=1}^{n}\sum_{j=1}^{m}(X_i+Y_p)* (Z_j+Y_p)\).考虑化简(因式分解之合并同类项),先提公因式\((X_i+Y_p)\),则式子化为\(\sum_{i=1}^{n}((X_i+Y_p)* (\sum_{j=1}^{m}Z_j+m* Y_p))\),同理,最后化简为\((\sum_{i=1}^{n}X_i+n* Y_p)* (\sum_{j=1}^{m}Z_j+m* Y_p)\).于是,确定方案为\(sort\),再扫,逐个\(Y\)进行求解。至此,游戏结束:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define in read()
#define fur(i,a,b) for(int i=a;i<=b;++i)
#define int long long
#define jiba signed
inline int read()
{
    int x=0,f=1;char ch=getchar();
    for(;!isalnum(ch);ch=getchar()) if(ch=='-') f=-1;
    for(;isalnum(ch);ch=getchar()) x=x*10+ch-'0';
    return x*f;
}
const int xx=1e5+10;
const int mod=1e9+7;
int a[xx],c[xx],b[xx];
jiba main()
{
    int t=in+1;
    while(--t)
    {
        int n=in,m=in,r=in;
        fur(i,1,n) a[i]=in;sort(a+1,a+n+1);
        fur(j,1,m) b[j]=in;sort(b+1,b+m+1);
        fur(k,1,r) c[k]=in;sort(c+1,c+r+1);
        int tmp1=0,tmp2=0,ans=0;
        for(int i=1,j=1,k=1;j<=m;++j)
        {
            while(a[i]<=b[j]&&i<=n) tmp1=(tmp1+a[i])%mod,++i;
            while(c[k]<=b[j]&&k<=r) tmp2=(tmp2+c[k])%mod,++k;
            ans=(ans+(tmp1+(i-1)*b[j]%mod)%mod*(tmp2+(k-1)*b[j]%mod)%mod)%mod;
        }
        printf("%lld\n",ans);
    }
    return 0;
}

prob4:CodeChef-SUBREM

树型\(DP\),数组\(f[i]\)和\(w[i]\)分别记录\(i\)子树中的最大收益与点权和

转移方程:\(f[i]=max(\sum f[son[i][j]],-w[i]-x)\)

目标:\(w[1]+f[1]\)

两遍\(dfs\),游戏结束:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;
#define in read()
#define fur(i,a,b) for(int i=a;i<=b;i++)
#define int long long
#define jiba signed
inline int read()
{
    int x=0,f=1;char ch=getchar();
    for(;!isalnum(ch);ch=getchar()) if(ch=='-') f=-1;
    for(;isalnum(ch);ch=getchar()) x=x*10+ch-'0';
    return x*f;
}
const int xx=1e5+10;
int f[xx],w[xx],x,fa[xx];
bool vis[xx];
vector<int>e[xx];
inline void dfs1(int g)
{
    fur(i,0,(int)e[g].size()-1)
    {
        if(vis[e[g][i]]) continue;
        vis[e[g][i]]=true;
        fa[e[g][i]]=g;
        dfs1(e[g][i]);
        w[g]+=w[e[g][i]];

    }
}
inline void dfs2(int g)
{
    f[g]=0;
    fur(i,0,(int)e[g].size()-1)
    {
        if(e[g][i]==fa[g]) continue;
        dfs2(e[g][i]);
        f[g]+=f[e[g][i]];
    }
    f[g]=max(f[g],-w[g]-x);
}
inline void init(int n)
{
    fur(i,1,n)
    {
        vis[i]=false;
        e[i].clear();
        fa[i]=0;
    }
}
jiba main()
{
    int t=in+1;
    while(--t)
    {
        int n=in;x=in;
        fur(i,1,n) w[i]=in;
        fur(i,1,n-1)
        {
            int x=in,y=in;
            e[x].push_back(y);
            e[y].push_back(x);
        }
        vis[1]=true;
        dfs1(1);
        dfs2(1);
        printf("%lld\n",f[1]+w[1]);
        init(n);
    }
    return 0;
}

\(ps\):以后考试要调整好心态,而且最好少\(dabai\)

原文地址:https://www.cnblogs.com/ALANALLEN21LOVE28/p/11313008.html

时间: 2024-07-31 18:47:51

2019年7月31日(基本功练习1)的相关文章

实验报告(2019年4月31日)

c程序实验报告 姓名:黄志乾????实验地点:教学楼514教室????实验时间:4月30日 实验项目: ???1.编写由三角形三边求面积的函数 ???2.编写求N阶乘的函数 ???3.求两个整数的最大公约数 ???4.打印输出指定图形 ???5.求500以内所有亲密数对 ???6.利用复化梯形公式计算定积分 ???7.计算Ackerman函数 ???8.编写计算x的y次幂的递归函数getpower(int x,int y).并在主程序中实现输入输出. ???9.编写计算学生年龄的递归函数 ???

行政区划代码之历史(1980年至2019年12月31日)

引用地址:http://www.zxinc.org/gb2260.htm code,name 110000,北京市 110100,市辖区 110101,东城区 110102,西城区 110103,崇文区 110104,宣武区 110105,朝阳区 110106,丰台区 110107,石景山区 110108,海淀区 110109,门头沟区 110110,燕山区 110111,房山区 110112,通州区 110113,顺义区 110114,昌平区 110115,大兴区 110116,怀柔区 110

2019年5月31日-linux就该这么学-第12课

第10章 使用Apache 服务部署静态网站 10.1 网站服务程序(1) IIS--(Internet Information Services)-运行在windows平台,为Windows默认的Web服务程序:(2) Nginx--系统资源消耗低.并发能力强:(3) Apache--可运行在Linux系统.Unix系统甚至是Windows系统中,支持基于IP.域名及端口号的虚拟机功能,支持多种认证方式,集成有代理服务器模块.安全Socket层(SSL),能够实施监控服务状态与定制日志消息,并

2019年3月31日 LeetCode——69 Java之 x 的平方根

题目要求: 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: 输入: 4 输出: 2 示例 2: 输入: 8 输出: 2 说明: 8 的平方根是 2.82842...,   由于返回类型是整数,小数部分将被舍去.思路:题目要求实现x的平方根,最后结果只保留整数部分.很容易的想到用二分法.代码示例: class Solution { public int mySqrt(int x

2019年3月31日 工作总结

做了什么 问卷系统的数据导入,包括问卷首页.问卷模板(问卷题目.问卷答案). 问卷拒绝,用户不想填写问卷,需要点击拒绝并选择拒绝原因. 做的很好的地方 问卷系统上线基本没有产生问题 问卷拒绝上线的时候没有出现问题,准时准点 存在的问题以及需要改进的方向 问卷有多个入口,当时没有测到.老的接口我做了兼容处理,有些入口调用了新的接口(可能是前端没有做好兼容),导致出错.解决办法就是做回归测试. 问卷导入本来计划一周全部完成的,错误的评估了工作量,结果周五只完成了 4 个问卷. -- 导入慢的原因是人

SPSS 2019年10月31日 20:20:53今日学习总结

◆描述性统计分析 概念:描述性统计分析方法是指应用分类.制表.图形及概括性数据指标(去均值,方差等)来概括数据分布特征的方法. 而推断性统计分析方法则是通过随机抽样,应用统计方法把从样本数据得到的结论推广到总体的数据分析方法统计上需要把样本数据所御寒信息进行概括,融合和抽象, 从而得到反映样本数据的综合指标.这些指标称为统计量.描述数据特征的统计量可分为两类:一类表示数据的中心位置, 如均值,中位数,众数等,另一类表示数据的离散程度,如方差,标准差,极差等用来衡量个体偏离中心的程度在描述定性观测

2019年10月31日 万能异常

  Exception 万能异常 while True: #用while + continue 实现循环输入 try: age=input('>>') int(age) num=input('num2>>>') int(num) except ValueError as e: #把valueerror内容 取名为e,在哪个地方捕捉到异常,则会跳到except 继续往下执行 print(e) except KeyError as e: print('keyerror',e) e

2019左其盛好书榜,没见过更好的榜单(截至3月31日)

各位书友如果看到更好的好书榜,欢迎向我推荐. 见了不少好书榜,没见过比我这个更好的.以下4条大部分好书榜一条都做不到: 1:我这个好书榜中的书都是我认真读过的: 2:给出具体的星级,好书又分了3.5星.4星.4.5星.5星四个档次: 3:我有过多年的技术类.管理类.产品类岗位的工作经验,市面上其他榜单有不少是专职编辑制定的: 4:除了好书榜之外,我还有差评榜(为此当然会得罪许多人). 此外其实还有一条就是制榜者的洞察力,不过这一条相对比较虚我就不说了. 各位书友如果看到更好的好书榜,欢迎向我推荐

2019左其盛差评榜,罕见的差书榜(截至3月31日)

差书榜除了我这个再没见过别的媒体自媒体给出过.毕竟给差评是得罪人的事,另外给一些名人的书打差评也需要一定的见识和勇气. 各位书友如果看到好的差书榜,欢迎向我推荐. 这个清单是今年截至3月31日我看过并且有点名气的.我给了差评(2.5星.2星.1星)的书,还有一种情况就是预期较高的3星也列进来.以经管类书为主. 这个好书榜每月初更新,内容截至上月底. 在公众号的菜单中可以找到持续更新的好书榜.差评榜.总榜. 经管类书我看的多,评级的参考意义比其他类别更大. 经管类图书的评级,主要考察思想的新颖度和