20190824考试

前言:今天参加某谷的比赛,蒟蒻自闭,没远大追求回的我去搞基础,其实出题人发了题解,主要总结得失.

T1:给定一串数,分组求异或和,ans=Σ分组异或和,求ans最大.

S1:之前做过区间求异或和,开始以为是线段树,想了一下,将数二进制拆分,发现将数一个个异或就是答案.不会证明,但感性理解一下,发现分组的目就是尽可能将同位置的‘1‘抵消,一个个异或看似没分组,实际已将可能的同位置‘1‘抵消,严谨证明看题解吧.

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
#define e exit(0)
#define re register
int n,ans,val[1000010];
int main()
{
    freopen("T1.in","r",stdin);
    freopen("T1.out","w",stdout);
    scanf("%d",&n);
    for(re int i=1;i<=n;++i)
        scanf("%d",&val[i]);
    for(re int i=1;i<=n;++i){
        if(i==1)
            ans=val[i];
        else ans^=val[i];
    }
    printf("%d",ans);
    return 0;
}

T2:给定实数:n,a,b,设ans = floor( pow( n , a ) + pow( n , b ) ).设有n‘∈[L,R],使ans‘=floor(pow( n‘ , a ) + pow(n‘ , b) ) = ans.设len = Rmax - Lmin,给定q组询问,求Σlen.

S2:二分答案拿走65pts.

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
int T,seed,op;
long long st;
double n,a,b,ans,L,R,l,r;
#define e exit(0)
namespace Mker
{
//  Powered By Kawashiro_Nitori
//  Made In Gensokyo, Nihon
    #define uint unsigned int
    uint sd;int op;
    inline void init() {scanf("%u %d", &sd, &op);}
    inline uint uint_rand()
    {
        sd ^= sd << 13;
        sd ^= sd >> 7;
        sd ^= sd << 11;
        return sd;
    }
    inline double get_n()
    {
        double x = (double) (uint_rand() % 100000) / 100000;
        return x + 4;
    }
    inline double get_k()
    {
        double x = (double) (uint_rand() % 100000) / 100000;
        return (x + 1) * 5;
    }
    inline void read(double &n,double &a, double &b)
    {
        n = get_n(); a = get_k();
        if (op) b = a;
        else b = get_k();
    }
}
inline int fd()
{
    int s=1,t=0;
    char c=getchar();
    while(c<‘0‘||c>‘9‘){
        if(c==‘-‘)
            s=-1;
        c=getchar();
    }
    while(c>=‘0‘&&c<=‘9‘){
        t=t*10+c-‘0‘;
        c=getchar();
    }
    return s*t;
}
bool check1(double x)
{
    long long as=floor(pow(x,a)+pow(x,b));
    if(as<=st) return true;
    else if(as>st) return false;
}
bool check2(double x)
{
    long long as=floor(pow(x,a)+pow(x,b));
    if(as>=st) return true;
    else if(as<st) return false;
}
int main()
{
    freopen("T2.in","r",stdin);
    freopen("T2.out","w",stdout);
    T=fd();
    Mker::init();
    while(T--){
        Mker::read(n,a,b);
        st=floor(pow(n,a)+pow(n,b));
        l=n-1.0,r=n+1.0;
        while(abs(r-l)>1e-10){
            double mid=(l+r)/2;
            if(check1(mid)) l=mid;
            else r=mid;
        }
        R=l;
        l=n-1.0,r=n+1.0;
        while(abs(r-l)>1e-10){
            double mid=(l+r)/2;
            if(check2(mid)) r=mid;
            else l=mid;
        }
        L=l;
        ans+=(R-L);
    }
    printf("%lf",ans);
    return 0;
}

T4:已知a0 = -3 , a1 = -6 , a2 = -12 ,an = 3an-1 + an-2 - 3an-3 + pow( 3 , n ).求an.

S4:显然递推超时,尝试构造矩阵快速幂,无奈题目毒瘤800ms,(还以为997ms卡过了)

初始矩阵:[ a0 , a1 , a2 , 27 ].

转移矩阵:[ 0 , 0 , -3 , 0 ]

     [ 1 , 0 , 1 , 0 ]

    [ 0 , 1  , 3 , 0 ]

    [ 0 , 0 , 1 , 3 ]

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define e exit(0)
#define re register
const int mod=1e9+7;
int T;
long long n;
namespace Mker
{
//  Powered By Kawashiro_Nitori
//  Made In Gensokyo, Nihon
    #include<climits>
    #define ull unsigned long long
    #define uint unsigned int
    ull sd;int op;
    inline void init() {scanf("%llu %d", &sd, &op);}
    inline ull ull_rand()
    {
        sd ^= sd << 43;
        sd ^= sd >> 29;
        sd ^= sd << 34;
        return sd;
    }
    inline ull rand()
    {
        if (op == 0) return ull_rand() % USHRT_MAX + 1;
        if (op == 1) return ull_rand() % UINT_MAX + 1;
        if (op == 2) return ull_rand();
    }
}
inline int fd()
{
    int x=0;int f(0);char ch(getchar());
    while(!isdigit(ch)) f|=(ch==‘-‘),ch=getchar();
    while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    return x=f?-x:x;
}
struct jz{
    int a[10][10];
    jz(){memset(a,0,sizeof(a));}
    jz operator*(const jz p){
        jz ans;
        for(re int k=1;k<=4;++k)
            for(re int i=1;i<=4;++i)
                for(re int j=1;j<=4;++j)
                    ans.a[i][j]=((ans.a[i][j]%mod+(1ll*a[i][k]*p.a[k][j])%mod)%mod+mod)%mod;
        return ans;
    }
};
jz work()
{
    jz g;
    g.a[1][1]=0,g.a[2][1]=1,g.a[3][1]=0,g.a[4][1]=0;
    g.a[1][2]=0,g.a[2][2]=0,g.a[3][2]=1,g.a[4][2]=0;
    g.a[1][3]=-3,g.a[2][3]=1,g.a[3][3]=3,g.a[4][3]=1;
    g.a[1][4]=0,g.a[2][4]=0,g.a[3][4]=0,g.a[4][4]=3;
    return g;
}
jz qsm(jz k,int y)
{
    jz ans;
    for(re int i=1;i<=4;++i)
        ans.a[i][i]=1;
    while(y){
        if(y&1) ans=ans*k;
        k=k*k;
        y>>=1;
    }
    return ans;
}
int a0=-3,a1=-6,a2=-12,x=27,ans;
int main()
{
    freopen("T3.in","r",stdin);
    freopen("T3.out","w",stdout);
    T=fd();
    Mker::init();
    while(T--){
        n=Mker::rand();
        jz k;
        k=work();
        k=qsm(k,n-2);
        int sum=0;
        for(re int i=1;i<=4;++i){
            if(i==1)
                sum=((sum%mod+1ll*a0*k.a[1][3]%mod)%mod+mod)%mod;
            else if(i==2)
                sum=((sum%mod+1ll*a1*k.a[2][3]%mod)%mod+mod)%mod;
            else if(i==3)
                sum=((sum%mod+1ll*a2*k.a[3][3]%mod)%mod+mod)%mod;
            else if(i==4)
                sum=((sum%mod+1ll*x*k.a[4][3]%mod)%mod+mod)%mod;
        }
        if(ans==0)
            ans=sum;
        else ans^=sum;
    }
    printf("%d",ans);
    return 0;
}

可能对当前水平能做的只有这么多,别放弃拿分!

附上:题解.

原文地址:https://www.cnblogs.com/xqysckt/p/11405880.html

时间: 2024-08-03 16:25:57

20190824考试的相关文章

高等代数期末考试

高等代数的最后一站,有惊无险. 高等代数期末考试试题

在线考试系统(Online Exam System)--ASP.NET

用户设计 -|学生 -|老师 -|管理员 学生结构设计 -|个人信息管理 -|修改个人信息 -|修改登录密码 -|选课中心 -|显示所有老师所开课的信息可进行选课 -|显示自己已选课程 -|在线考试 -|对已选老师开设的课程选择进行考试 -|成绩查询 -|查看自己考试成绩   老师结构设计 -|个人信息管理 -|修改个人信息 -|修改登录密码 -|课程管理 -|显示学校开设的课程(老师可选择添加课程) -|显示老师开设的课程 -|考试管理 -|显示老师自己开设的课程 -|对课程添加试题(选择.填

Java编程练习之输出考试成绩的前三名

在慕课网学习的时候遇到了这样一个Java编程练习题,正好对所学习的Java基础知识检验一下: 请根据所学知识,编写一个Java程序,实现输出考试成绩的前三名 要求: 1考试成绩已保存在数组scores中,数组元素依次为89 , -23 , 64 , 91 , 119 , 52 , 73 2要求通过自定义方法来实现成绩排名并输出操作,将成绩数组作为参数传入 3要求判断成绩的有效性( 0-100 ),如果成绩无效,则忽略此成绩 我自己分析了一下这个程序的过程: (1)首先是定义一个包含整型数组参数的

高级工程考试通过总结

2015年12月15日公布的高级工程师评审公示,我终于通过了,结果在意料之中,回过头来对整个过程进行总结,希望对考试的朋友有所帮助: 1.提前准备 (1)英语及计算机资格考试 高级工程师的考试有很多需要提前准备的,比如英语资格考试,计算机资格考试等,这些都应该在准备考试高工前搞定,这是必须条件. 计算机资格:http://www.bjrbj.gov.cn/bjpta/test_447/ksjs/jsj/ 英语资格考试:http://www.bjrbj.gov.cn/bjpta/test_447/

浙江大学软件学院三维动画与交互技术考试概念整理

第一讲 1.    增强现实技术AR: --融合了三维动画.立体视觉和图像处理: --建模.渲染.位置标定.图像融合: 2.    OpenGL是一种用于创建实时3D图像的编程接口. 3.    三维这个术语表示一个正在描述或显示的物体具有三维维度:宽度.高度.深度: --计算机3D图形实质上也是平面的: --在计算机屏幕上显示的二维图像,提供深度(或第三维)的错觉: 2D+透视 = 3D 透视使人产生深度的错觉. 4.    真正的3D是通过人的两只眼睛观察同一个物体,在视网膜上生成具有视差的

V5天下-安德揭密CCIEv5认证考试 就业和前途

在笔者看来,RSCCIEv5,这都不是事儿!您看Yeslab(上海)学员--来自思科的妹子一举拿下CCIEv5.0认证!!又一位double 女IE诞生 那么什么是事儿? 如何学习是事儿!这是我们提到的第一件事 笔者从最初的沁园公寓701室(Yeslab最原始的老巢),到沁园公寓907室(Yeslab的第一步扩张),之后搬到苏州长远天地1005室,又扩展到长远天地601室(Yeslab安全和DC的基地),再之后到,安德作为小弟和几位同僚奔赴上海这个国际大都市,我们的小圈子从华鼎大厦16D开始,而

数据库期末考试复习题 第一章

作者 : Dolphin 原文地址:http://blog.csdn.net/qingdujun/article/details/27820507 一.单项选择题: 1. 位于用户和操作系统之间的一层数据管理软件是  C    . A.DBS  B.DB  C.DBMS  D.MIS 2. 数据库系统中的数据模型通常由    A     三部分组成. A.数据结构.数据操作和完整性约束 B.数据定义.数据操作和安全性约束 C.数据结构.数据管理和数据保护 D.数据定义.数据管理和运行控制 3. 

分享CISSP CBT考试经验

各位前辈大家好:小弟在今年四月初通过了CISSP CBT考试,在这想跟大家分享一下准备心得与考试经验,让更多想通过考试的伙伴能对考试有更多的认识.我在2009年的10-11月份週二与週四晚间到参加汇哲开的CISSP课程,有老师系统性的介绍,让我入门的速度更快,不然有十个CBK,在日常工作是无法完全Cover的,补一个题外话,上完课没多久,我们公司不幸发生失火,此时BCP的训练就派上用场了,刚好可以验证所学与协助公司的MIS快速的回复系统资料,这也是让人意外的实务经验^ ^强烈建议刚开始准备的伙伴

全国计算机等级考试二级C语言程序设计考试大纲(2013年版)

转自:http://www.freencre.com/c2_artde_28.html 基本要求 1. 熟悉Visual C++6. 0集成开发环境. 2. 掌握结构化程序设计的方法,具有良好的程序设计风格. 3. 掌握程序设计中简单的数据结构和算法并能阅读简单的程序. 4. 在Visual C++6. 0集成环境下,能够编写简单的C程序,并具有基本的纠错和调试程序的能力. 考试内容 一.C语言程序的结构 1. 程序的构成,main函数和其他函数. 2. 头文件,数据说明,函数的开始和结束标志以