感想

对于这次考试,真的不想说什么了,太玄学了!!!

t1输出比标准输出长,这是什么操作???难道要关文件???但是交到oj上又A掉了。这是什么操作。

t2还好,没有出什么意外。。。但是要吐槽一下出题人,为什么空间给这么小!!!

t3的正解竟然是随机乱搞???

t4竟然给我玄学错掉了一个点,交到oj上还都是对的???

以上吐槽完毕


t1 密码(password)

题目大意

求出 \(\sum_{i=1}^{n} i^2 2^i\) 。

题解

遇到这种有倍数关系的累加和,一般都可以用错位相减法。

\[ Sn=1 \times 2^1 + 4 \times 2^2 + \cdots + n^2 \times 2^n \]

\[ 2 \times Sn=1 \times 2^2 + 4 \times 2^3 +\cdots + n^2 \times 2^{n+1} \]

上下两式错位相减得到以下算式

\[ Sn = n^2 \times 2^{n+1}-(1 \times 2^1 + 3 \times 2^2 + \cdots + ( 2 \times n -1) \times 2^n )\]

我们接下来的任务就是把后面那个玩意化简掉,依旧是用错位相减法

\[ Tn = 1 \times 2^1 + 3 \times 2^2 + \cdots + ( 2 \times n -1) \times 2^n \]

\[ 2 \times Tn = 1 \times 2^2 + 3 \times 2^3 + \cdots + ( 2 \times n -1) \times 2^{n+1} \]

上下两式错位相减得到以下算式

\[ Tn=(2\times n-1) \times 2^{n+1} - ( 2 + 2^3 + 2^4 + \cdots + 2^{n+1} )\]

\[ Tn=(2\times n-1) \times 2^{n+1} - (2 + 2^2 + 2^3 + \cdots + 2^{n+1} ) + 2^2 \]

\[ Tn=(2\times n-1) \times 2^{n+1} - ( 2^{n+2} - 2 ) + 2^2 \]

\[ Tn=(2\times n-1) \times 2^{n+1} - 2 \times 2^{n+1} + 6 \]

\[ Tn=(2\times n-3) \times 2^{n+1} + 6 \]

那么将式子代回去,就可以得到:

\[ Sn=n^2\times 2^{n+1} - (2\times n-3) \times 2^{n+1} - 6 \]

\[ Sn=(n^2-2\times n + 3) \times 2^{n+1} - 6 \]

ac代码

#include<bits/stdc++.h>
#define mod 1000000007
#define LL long long
using namespace std;
LL n;
LL power(LL n,LL m){
    LL res=1;
    while(m!=0){
        if(m&1) res=(res*n)%mod;
        n=(n*n)%mod;
        m>>=1;
    }
    return res;
}
int main(){
    scanf("%lld",&n);
    LL ans=(n*n)%mod;
    ans=(ans-2*n+3+mod)%mod;
    LL tmp=power(2,n+1);
    ans=((ans*tmp)%mod-6+mod)%mod;
    printf("%lld\n",ans);
    return 0;
}

t2 卡内存(memory)

题目大意

三种操作:

  • 单点修改
  • 查询区间和
  • 回归到某此操作后的状态

解法

查询历史状态???这不就是主席树模板吗?(快速掏出了一个主席树模板,正准备往上面改)

但是给的空间只有\(8mb\),用主席树来做至少也要把所有的数组都开小10倍,那么不是MLE就是WA或者是RE。

那么怎么做呢?因为没有查询历史的信息,而只是回归到历史的状态,我们可以想到非常像递归搜索dfs的做法,我们也这样想一下。

我们将这些询问建成一个图,如果要回归,那么就将当前这个连到回归的节点上。

那么最后离线跑一遍dfs就可以了,在离线用线段树或者是树状数组存储一下就好了。

ac代码

#include<bits/stdc++.h>
#define lowbit(x) x&-x
#define N 100005
using namespace std;
struct edge{
    int to,nt;
}E[N];
struct node{
    int id,x,y,ans;
}q[N];
int cnt,n,m;
int H[N],c[N];
int read(){
    int w=0,x=0;char ch=0;
    while(!isdigit(ch))w|=ch=='-',ch=getchar();
    while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    return w?-x:x;
}
void addedge(int u,int v){
    E[++cnt]=(edge){v,H[u]}; H[u]=cnt;
}
void add(int x,int v){
    while(x<=n) c[x]+=v,x+=lowbit(x);
}
int query(int x){
    int ret=0;
    while(x>0) ret+=c[x],x-=lowbit(x);
    return ret;
}
void dfs(int u){
    if(q[u].id==1) add(q[u].x,q[u].y);
    else if(q[u].id==2) q[u].ans=query(q[u].y)-query(q[u].x-1);
    for(int e=H[u];e;e=E[e].nt){
        int v=E[e].to;
        dfs(v);
    }
    if(q[u].id==1) add(q[u].x,-q[u].y);
}
int main(){
    n=read(),m=read();
    for(int i=1;i<=n;i++) add(i,read());
    for(int i=1;i<=m;i++){
        char opt[20];
        scanf("%s",opt);
        if(opt[1]=='d'){
            int x=read(),y=read();
            q[i]=(node){1,x,y,0};
            addedge(i-1,i);
        }
        else if(opt[1]=='s'){
            int x=read(),y=read();
            q[i]=(node){2,x,y,0};
            addedge(i-1,i);
        }
        else{
            int x=read();
            q[i]=(node){3,x,0,0};
            addedge(x,i);
        }
    }
    dfs(0);
    for(int i=1;i<=m;i++) if(q[i].id==2) printf("%d\n",q[i].ans);
    return 0;
}

t3 图像分析(graph)

题目大意

求出一条直线,这条直线经过平面内的\(\frac{1}{3}\)个点。

解法

解法真的玄,如果小于300就暴力{n^3}枚举。

如果大于300,那么就随机找两个点,看看是不是符合我们的题意。

好像这样做正确率是\(\frac{8}{9}^100\),不是非酋都能过。

ac代码

#include<bits/stdc++.h>
#define LL long long
#define N 900005
using namespace std;
struct node{
    LL x,y;
}a[N];
int n;
void solve1(){
    for(int i=1;i<=n;i++){
        for(int j=i+1;j<=n;j++){
            int sum=2;
            for(int k=1;k<=n;k++){
                if(i==k||k==j) continue;
                if(((a[i].y-a[j].y)*(a[k].x-a[i].x))==((a[i].x-a[j].x)*(a[k].y-a[i].y)))sum++;
                if(sum*3>=n){
                    printf("%d %d\n",i,j);
                    return;
                }
            }
        }
    }
}
void solve2(){
    while(1){
        int i=(1ll*(rand()%n+1)*(rand()%n+1))%n+1,j=(1ll*(rand()%n+1)*(rand()%n+1))%n+1;
        if(i<j) swap(i,j);
        while(i==j)j=(1ll*(rand()%n+1)*(rand()%n+1))%n+1;
        int sum=2;
        for(int k=1;k<=n;k++){
            if(i==k||k==j) continue;
            if(((a[i].y-a[j].y)*(a[k].x-a[i].x))==((a[i].x-a[j].x)*(a[k].y-a[i].y)))sum++;
            if(sum*3>=n){
                printf("%d %d\n",i,j);
                exit(0);
            }
        }
    }
}
int main(){
    srand(time(NULL));
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%lld%lld",&a[i].x,&a[i].y);
    if(n<=300) solve1();
    else solve2();
    return 0;
}

t4 JYM 的公司(volume)

题目大意

输出一个数列中两两差的绝对值的和。

解法

比较简单。

我们从小到大排序,计算每个相差对答案有多少的贡献。

因为每一次的增加都会对后面的答案多增加一些贡献,那么我们就一边遍历一边累加贡献。

ac代码

#include<bits/stdc++.h>
#define LL long long
#define N 500000
using namespace std;
int n;
LL a[N],t[N],sum[N],ans=0,S[N];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
    sort(a+1,a+1+n);
    LL res=0;
    for(int i=2;i<=n;i++){
        res+=(i-1)*(a[i]-a[i-1]);
        ans+=res;
    }
    printf("%lld\n",ans*2);
    return 0;
}

[hgoi#2019/2/24]玄学考试的更多相关文章

  1. 上海市2019年公务员录用考试第一轮首批面试名单(B类)

    上海市2019年公务员录用考试第一轮首批面试名单(B类) 2019-03-12 设置字体:大 中 小 职位序号 注册编号 职位序号 注册编号 职位序号 注册编号 职位序号 注册编号 1910565 5 ...

  2. 上海市2019年公务员录用考试第一轮首批面试名单(A类)

    上海市2019年公务员录用考试第一轮首批面试名单(A类) 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 4016574 127.4 5112479 145.9 5125732 ...

  3. Alpha冲刺(1/10)——2019.4.24

    所属课程 软件工程1916|W(福州大学) 作业要求 Alpha冲刺(1/10)--2019.4.24 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪 ...

  4. Beta冲刺(3/7)——2019.5.24

    所属课程 软件工程1916|W(福州大学) 作业要求 Beta冲刺(3/7)--2019.5.24 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪万里 ...

  5. [hgoi#2019/3/21]NOIP&NOI赛后总结

    前言 今天做的是是2010年提高组和NOI的题目,做过几道原题,但是还是爆炸了,我真的太弱了. t1-乌龟棋 https://www.luogu.org/problemnew/show/P1541 这 ...

  6. 上海市2019年公务员录用考试笔试合格人员笔试成绩(B类)

    考试类别:B类 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 5101919 154.7 5113380 156.5 5126791 133.5 5146138 126.2 ...

  7. 上海市2019年公务员录用考试笔试合格人员笔试成绩(A类)

    考试类别:A类 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 4016574 127.4 5112479 145.9 5125732 124.3 5141074 159.9 ...

  8. [hgoi#2019/3/10]赛后总结

    关于本次hg模拟赛,题目来源于CF1110. t1-无意义运算符(meaning) 题目描述 最大公约数和位运算之间有共同点吗?是时候来研究一下了. 给定一个正整数a,请找到一个闭区间[1,a-1] ...

  9. 2019年Amazon AWS-Solutions-Architect-Professional考试最新题库(AWS SAP题库)带考试模拟器

    大家好,由于最近自己备考Amazon AWS-Solutions-Architect-Professional考试,购买了以下链接的题库,并通过了考试 https://www.kaoguti.gq/A ...

随机推荐

  1. Ionic2 调用Custom Cordova Plugin方法

    APP升级到Ionic2之后,如何调用自己写的pulgin,一直测试不成功,现记录这一经过. plugin目前可以分为3类,A类是ionic-native自带的,可以直接导入Typescript类,直 ...

  2. 案例学python——案例三:豆瓣电影信息入库

    闲扯皮 昨晚给高中的妹妹微信讲题,函数题,小姑娘都十二点了还迷迷糊糊.今天凌晨三点多,被连续的警报声给惊醒了,以为上海拉了防空警报,难不成地震,空袭?难道是楼下那个车主车子被堵了,长按喇叭?开窗看看, ...

  3. 微服务监控zipkin+asp.net core

    0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 监控目录:微服务监控zipkin.skywalking以及日志ELK监控系列 一.zipkin介绍 zipkin是一种分布式跟踪系 ...

  4. Flutter - 本地化启动列表中App名字

    上一篇讲了 Flutter - 本地化语言 但是这还有一点小欠缺,就是启动器中的App名字还是无法本地化. 比如英文系统中Play Store,在中文手机中就会显示Play 商店 那么为了解决这个问题 ...

  5. Linux下通过受限bash创建指定权限的账号

    在日常业务运维中,有时为了配合解决问题,需要给非运维人员开通系统账号,用于查询日志或代码.通常为了系统安全或避免不必要的误操作等目的,会将账号权限降至最低.下面介绍下在Linux下通过受限bash创建 ...

  6. websocket(三)——基于node sockit.io的即时通讯

    通过前面的学习发现,常见的websocket虽然可以很好地实现服务端和客户端的信息传递,但二者之间传递的数据只是简单的字符串,这对事物的描述,信息的传递是非常不友好的,下面将引入socket.io,来 ...

  7. bootstrap面试题

    1.你能描述一下渐进增强和优雅降级之间的不同吗? 优雅降级:Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工作.由于IE独特的盒模型布局问题,针 ...

  8. <a>标签中href="javascript:;"** 为什么 style不用src**

    &src/href <!--href 用于标示资源和文档关系,src 用于替换标签内容--> <img src="xxx.jpg"/> <sc ...

  9. 复审Partner

    复审代码后,发现了一些问题: 首先说优点:代码十分工整,很清晰,各种类易于理解,逻辑上很通顺. 基本实现了代码功能,输出正确. 发现的缺点:对于文件后缀的识别有点问题,不能识别所需求的所有文件,只有一 ...

  10. JQuery插件:图片上传本地预览插件,改进案例一则。

    /* *名称:图片上传本地预览插件 v1.1 *作者:周祥 *时间:2013年11月26日 *介绍:基于JQUERY扩展,图片上传预览插件 目前兼容浏览器(IE 谷歌 火狐) 不支持safari *插 ...