【考试】9.18

最近这题解是真不想写,

正好这次不太难,就放个代码吧

1>比赛

新奇的方法,但是我不想分析

精度操作很烦人

#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
int n;
const int N=5e4+3;
long long a[N],b[N];
long long sum[N],sq_sum[N],ans;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
    for(int i=1;i<=n;i++) scanf("%lld",&b[i]);
    sort(a+1,a+n+1),sort(b+1,b+n+1);

    for(int i=1;i<=n;i++)
        sum[i]=sum[i-1]+b[i],sq_sum[i]=sq_sum[i-1]+b[i]*b[i];

    for(int i=1;i<=n;i++)
    {
        int pos=upper_bound(b+pos,b+n+1,a[i])-b-1;
        ans+=a[i]*a[i]*pos +sq_sum[pos] -2*a[i]*sum[pos] ;
        ans-=a[i]*a[i]*(n-pos) +(sq_sum[n]-sq_sum[pos]) -2*a[i]*(sum[n]-sum[pos]);
    }

    double t=ans*1.0/n;
    printf("%.1lf\n",t);
    return 0;
} 

2>数字

乘法原理,容斥原理,dp

//dfs递归->超时
//全排列->失败
//递推->0.3s->ok!

//两种条件,本质相似,但是计数会重复(或运算)
//条件只有一个,sum相等,所以就cnt*cnt
//然后*2

//再想交集
//额......  

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<ctime>
using namespace std;
int n,len;
char c[15];
const int N=1003,mod=999983;
int d[13],cnt[N][N*10];
long long ans[5];

void prepare()
{
    int mx;
    cnt[0][0]=1;
    for(int i=1;i<=n;i++)
    {
        mx=i*9;
        for(int j=1;j<=len;j++)
            for(int k=d[j];k<=mx;k++)
                cnt[i][k]=(cnt[i][k] +cnt[i-1][k-d[j]])%mod;
    }
}
void work(int pos,int k)
{
    int mx=k*9;
    for(int i=0;i<=mx;i++) ans[pos]=(ans[pos]+1LL*cnt[k][i]*cnt[k][i]%mod)%mod;
}

int main()
{
    scanf("%d%s",&n,c+1) ;
    //clock_t startTime,endTime;
    //startTime = clock();
    len=strlen(c+1);
    for(int i=1;c[i];i++) d[i]=c[i]-‘0‘;
    prepare();

    work(0,n);
    ans[0]<<=1;
    work(1,n>>1);
    work(2,n+1>>1);

    printf("%lld\n",((ans[0]-ans[1]*ans[2])%mod+mod)%mod);
    //endTime = clock();//计时结束
    //cout << "The run time is: " <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
    return 0;
} 

3>祖孙询问

水啊,LCA

#include<cstdio>
#include<cstdlib>
#include<vector>
#include<algorithm>
using namespace std;
int n,m,rt,q;
const int N=4e4+3;
int dep[N],fa[N][17];
vector <int> g[N];
void dfs(int u,int ff)
{
    fa[u][0]=ff,dep[u]=dep[ff]+1;
    for(int i=1;i<17 && fa[u][i-1];i++)
        fa[u][i]=fa[fa[u][i-1]][i-1];

    int sz=g[u].size() ;
    for(int i=0;i<sz;i++)
        if(g[u][i]!=ff) dfs(g[u][i],u);
}
void query(int u,int v)
{
    if(!dep[u] || !dep[v])
    {
        printf("0\n");
        return ;
    }

    int flag=2;
    if(dep[u]<dep[v]) swap(u,v),flag=1;
    int dis=dep[u]-dep[v];
    for(int i=1,j=0;i<=dis;i<<=1,j++)
        if(dis&i) u=fa[u][j];
    if(u==v) printf("%d\n",flag);
    else printf("0\n");
}
int main()
{
    scanf("%d",&n);
    int u,v;
    while(n--)
    {
        scanf("%d%d",&u,&v);
        if(v==-1) rt=u;
        else g[u].push_back(v),g[v].push_back(u);
    }
    dfs(rt,0);

    scanf("%d",&q);
    while(q--)
    {
        scanf("%d%d",&u,&v);
        query(u,v);
    }

    return 0;
}

#include<cstdio>

#include<cstdlib>

#include<algorithm>

using namespace std;

int n;

const int N=5e4+3;

long long a[N],b[N];

long long sum[N],sq_sum[N],ans;

int main()

{

scanf("%d",&n);

for(int i=1;i<=n;i++) scanf("%lld",&a[i]);

for(int i=1;i<=n;i++) scanf("%lld",&b[i]);

sort(a+1,a+n+1),sort(b+1,b+n+1);

for(int i=1;i<=n;i++)

sum[i]=sum[i-1]+b[i],sq_sum[i]=sq_sum[i-1]+b[i]*b[i];

for(int i=1;i<=n;i++)

{

int pos=upper_bound(b+pos,b+n+1,a[i])-b-1;

ans+=a[i]*a[i]*pos +sq_sum[pos] -2*a[i]*sum[pos] ;

ans-=a[i]*a[i]*(n-pos) +(sq_sum[n]-sq_sum[pos]) -2*a[i]*(sum[n]-sum[pos]);

}

double t=ans*1.0/n;

printf("%.1lf\n",t);

return 0;

}

原文地址:https://www.cnblogs.com/xwww666666/p/11548788.html

时间: 2024-10-08 07:14:55

【考试】9.18的相关文章

2017-5-17-Train:喵哈哈村的魔法考试 Round #18 (Div.2)

A.喵哈哈村的古怪石碑(签到题) 描述 喵哈哈村有个奇怪的石碑,上面浮现出了一个奇怪的问题: 有一数列{an},给出其前三项a1,a2,a3,以及要求的项的编号n,并且数列{an}只可能是等差数列或者是首项为1的等比数列,要求A输出第n项模100007后的值. 输入 一行,四个整数,a1,a2,a3,n.满足:0< |a1|,|a2|,|a3|≤10^5,0<n<10^3.本题包含若干组测试数据. 输出 一行,一个数,即an模100007的值.(负数取模答案为负) 样例输入1 1 2 3

数据结构技能考试系统

通过一个月的努力,终于把数据结构技能考试系统用C++的语言实现(其中有C语言的穿插),系统的最大优点是可以检测学生答题时是否插入了U盘,打开了word及记事本等辅助工具.此系统分为两部分,一部分是学生端,一部分是教师端. 学生端主要是学生输入学号及姓名(对此进行检测),根据学号的后四位对应的ASCII码模8求值,达到抽题的效果(也可适当改进改为IP读题),在题库中抽取两道题,随机答一道题即可,在完成作答后选择所作的试题,避免了选题后不会做的情况.抽题时显示倒计时,时间为60分钟,如若超时,允许的

JDBC学习小结

一.JDBC基础 连接数据的步骤: 1.注册驱动 :Class.forName(“com.mysql.jdbc.Driver”) 推荐这种方式,不会对具体的驱动类产生依赖:DriverManager.registerDriver(com.mysql.jdbc.Driver) 会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖:System.setProperty(“jdbc.drivers”, “driver1:driver2”) 虽然不会对具体的驱动类产生依赖:但

年末deadline汇总

1.物理预习大厅至少做6个(惠氏桥40分算做100分)--2016.12.31 2.数学建模期末论文--2017.1.6 3.数据结构.JAVA所有代码作业--(未知?) 4.期末考试(仅供参考) 1 [0410139061]实用英语表达 2.0 通识教育课程类/国际视野与文明对话模块 考试 2017-01-05(18周 星期四)08:00-09:40 2 [1110076141]线性代数 4.0 通识教育课程类/数理基础与科学素养模块 考试 2017-01-06(18周 星期五)15:20-1

Tgrocery学习及使用

能够学习到短文本分类模型--Tgrocery,十分感谢@GavinBuildSomething把源码及测试数据分享,在此我也作为一名学习者将自己的学习过程记录下来,希望对其他人有所帮助.   1.学习Tgrocery 这是作者在github上的项目链接包括源码及测试--https://github.com/2shou/TextGrocery 2.Tgrocery使用及细节问题 运行环境:Linux  .mac os  (这个必须注意,不然无法运行) (1)安装Linux 首先需要安装Linux系

页面制作课程大纲以及学习进度

页面制作  开课时间:5月25日 单元(章) 课题(节) 视频名 学习天数 发布时间 1.Photoshop切图 1.工具.面板.视图 1.工具.面板.视图 3 5.25发布 2.测量.取色 1.测量.取色 3.切图 1.切图 4.保存 1.保存 5.修改.维护 1.修改.维护 6.图片优化与合并 1.图片优化与合并 2.开发.调试工具 1.开发.调试工具 1.开发工具 3 2.调试工具 3.HTML 1.HTML简介 1.发展史.概念 2.HTML文档 2.标签 1.语法 2.章节标签 3.文

2016-2017学年校历

2016-2017学年校历 星 期 月 份 星期一 星期二 星期三 星期四 星期五 星期六 星期日 周次 九月 29 30 31 1 2 3 4 1 教学 5 6 7 8 9 10 11 2 12 13 14 15中秋节 16 17 18 3 19 20 21 22 23 24 25 4 十月 26 27 28 29 30 1国庆节 2 5 3 4 5 6 7 8 9 6 10 11 12 13 14 15 16 7 17 18 19 20 21 22 23 8 24 25 26 27 28 2

Oracle Certified

一.基本介绍 Oracle认证证书只是让雇主了解到来应聘的人通过了Oracle数据库方面的技术考试.而实际上,Oracle认证也只是衡量一个应聘者的一个标准之一,其他的标准还有: 1.出色的交际能力.Oracle DBA通常都要和IT行业的技术专家打交道,因此,他或她就必须能够为所有访问Oracle数据库的开发人员或程序员清晰明了的解释Oracle概念.有些时候,Oracle DBA也是一名管理人员,因此,也同样要求他在参与战略发展计划以及数据库设计上要有出色的交际能力. 2.同类的专业学位.大

9.18考试 第一题count题解

这道题说起来挺可惜的,当时纠结是用常数大但有可能减少递归层数的模还是用常数小但递归多的回溯纠结了好半天,最终错误的选择了摸.导致T了20分,改成回溯就A了. 先分析一下性质,我在考试的时候打表发现在数据范围内因子最多有240个,因此有可能是通过枚举因子进行计算,然后如果说对于一个块他的确可以把一棵树分为几块方法只有一种(不要问我为什么,我也不知道怎么证,但的确如此)那么我们的最坏复杂度就是O(240*n),比理论最大复杂度还多了一倍,这也是为什么当时我自己预估60分的原因,然而这就很尴尬了,这的

9.18考试 第二题Dinner题解

当时初步感觉是一个类似动归或者贪心的神题,然而由于本题已经给出顺序,贪心貌似并没有什么道理,所以放弃贪心.然后又由于这是一个环的问题,我想到了"合并石子"那种环转链的思路,然后就是一个O(n^2*m)的近似背包的打法,虽然没有去打,但应该可行吧-- 然后我又发现这道题貌似可以二分答案来进行check,然后我们就需要去枚举每一次的起始点,并进行模拟,然后加了一个剪枝即如果当前点的前缀和大于当前check的值,说明我们已经在给第一个点第一份菜单时给了他第二份菜单,而这又是不可行的,否则我们