2019/9/15 四校联训

T1-Table

简单模拟题啊

然而我各种打挂,只剩下了50分

mo得订正,毕竟是人都A了

/***50pts****/
#include<bits/stdc++.h>
#define ll long long
#define dbg1(x) cerr<<#x<<"="<<(x)<<" "
#define dbg2(x) cerr<<#x<<"="<<(x)<<"\n"
#define dbg3(x) cerr<<#x<<"\n"
using namespace std;
#define reg register
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
    return x*f;
}
const int MN=10000;
int N,M;
char a[MN],s[105][MN];
int sz[105],len[105];
int blank(int n){while(n--) printf(" ");}
int line(int n){while(n--) printf("-");}
#define Enter puts("")
void put1()
{
    printf("+");
    for(int i=1;i<=M;++i)line(len[i]),printf("+");Enter;
}
void put2(int x,int l,int r)
{
    for(int i=l;i<=r;++i) printf("%c",s[x][i]);
}
int main()
{
    freopen("table.in","r",stdin);
    freopen("table.out","w",stdout);
    N=read(),M=read();
    scanf("%s",a+1);
    reg int i,j;
    for(i=1;i<=N;++i)
    {
        scanf("%s",s[i]+1);
        sz[i]=strlen(s[i]+1);
        int la=0,nm=0;
        for(j=1;j<=sz[i];++j)
            if(j+1>sz[i]||s[i][j+1]==',')
                len[++nm]=max(len[nm],j-la),la=j+1;
    }
    put1();
    for(i=1;i<=N;++i)
    {
        printf("|");
        int la=0,nm=0;
        for(j=1;j<=sz[i];++j)
            if(j+1>sz[i]||s[i][j+1]==',')
            {
                ++nm;int siz=j-la;
                if(a[nm]=='L') put2(i,la+1,j),blank(len[nm]-siz);
                if(a[nm]=='C') blank((len[nm]-siz)/2),put2(i,la+1,j),blank((len[nm]-siz+1)/2);
                if(a[nm]=='R') blank(len[nm]-siz),put2(i,la+1,j);
                printf("|");la=j+1;
            }
        Enter;
        put1();
    }
}



T2-paradox

原题链接

题意:求有\(N\)个人存在两个相同生日是一个\(K\)位二进制数的人的概率,要求所得分数约分后分子分母分别对\(1e6+3\)取模,\(N,K\leq 10^9\)

可以求没有人同一天生日的概率

发现答案是
\[ ans=\frac{(2^{NK})^{\underline N}}{2^{NK}} \]
约分就是\(O(\log N)\)求出分子所含的\(2\)的次幂,把它的逆元算出来最后分别乘就行

快速幂两次算分母,分子如果\(N>1e6+3\),则一定会是\(0\),否则暴力算阶乘

最后答案是\(1-ans\)

#include<bits/stdc++.h>
#define ll long long
#define dbg1(x) cerr<<#x<<"="<<(x)<<" "
#define dbg2(x) cerr<<#x<<"="<<(x)<<"\n"
#define dbg3(x) cerr<<#x<<"\n"
using namespace std;
#define reg register
inline ll read()
{
    ll x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
    return x*f;
}
ll N,K;
int _1,_2;
const int M=1e6+3,inv2=5e5+2;
ll Mul(ll x,ll y){return (1ll*x*y)%M;}
ll Add(ll x,ll y){return (x+y)%M;}
ll fpow(ll x,ll y){ll r=1;for(;y;y>>=1,x=Mul(x,x))if(y&1)r=Mul(r,x);return r;}
int main()
{
    freopen("paradox.in","r",stdin);
    freopen("paradox.out","w",stdout);
    N=read(),K=read();
    ll i,j;
    for(i=1,j=0;i<(K+1)/2;i<<=1,++j);
    if(j>=N) return 0*puts("1 1");
    ll sum=N;
    for(i=1;i<=K/2;i<<=1)sum+=(K-1)/(i<<1);
    sum=fpow(inv2,sum);
    _2=fpow(2,N);_2=fpow(_2,K);_2=Mul(_2,sum);
    if(K<M)
    {
        ll x=fpow(2,N);_1=1;
        for(i=0;i<K;++i) _1=Mul(_1,Add(x,M-i));
        _1=Mul(_1,sum);
    }
    _1=Add(_2,M-_1);
    printf("%lld %lld\n",_1,_2);
    return 0;
}



T3-treemutaion

原题链接

题意:更改树上节点的权值,询问链上权值是否构成一个排列

我RE了啊。。。菜

其实,不需要在意排列的问题,可以先给每个数附加一个值

我的做法是\(Val(x)=x^4\) mod \(P_1+x^3\) mod \(P_2+x^2\) mod \(P_1+x\)

然后树剖后线段树维护链上权值和即可,每次把询问的链的和求出来看是否等于一个排列的权值和

为了保险起见,我还顺带维护了一下链上的最大值和最小值

因为每次只有不超过\(3\)个段的询问不是整个链的,所以复杂度仍然是\(O(n\log n)\)

实现时应当是对每个重链分别开线段树

(是的,我就是这么想的,然后,我对每个链头的子树都开了一棵线段树,并成功RE到只剩下\(50\)分)

#include<bits/stdc++.h>
#define ll long long
#define dbg1(x) cerr<<#x<<"="<<(x)<<" "
#define dbg2(x) cerr<<#x<<"="<<(x)<<"\n"
#define dbg3(x) cerr<<#x<<"\n"
using namespace std;
#define reg register
#define fi first
#define se second
#define mp make_pair
#define pii pair<int,int>
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
    return x*f;
}
const int MN=5e5+5;
int N,Q,A[MN];
ll Sum[MN];
struct ed{int to,nex;}e[MN];int hr[MN],en;
void ins(int x,int y)
{
    e[++en]=(ed){y,hr[x]};hr[x]=en;
    e[++en]=(ed){x,hr[y]};hr[y]=en;
}
int dep[MN],fa[MN],top[MN],l[MN],r[MN],id[MN],siz[MN],mx[MN],dind;
void dfs1(int x,int f)
{
    siz[x]=1;fa[x]=f;dep[x]=dep[f]+1;
    reg int i;
    for(i=hr[x];i;i=e[i].nex)if(e[i].to^f)
        dfs1(e[i].to,x),siz[x]+=siz[e[i].to],
        (siz[e[i].to]>siz[mx[x]])?mx[x]=e[i].to:0;
}
void dfs2(int x,int tp)
{
    id[l[x]=++dind]=x;top[x]=tp;
    if(mx[x]) dfs2(mx[x],tp);
    reg int i;
    for(i=hr[x];i;i=e[i].nex)
        if(e[i].to!=fa[x]&&e[i].to!=mx[x])
            dfs2(e[i].to,e[i].to);
    if(!mx[x]) r[top[x]]=l[x];
}
int lca(int x,int y)
{
    while(top[x]^top[y])
        dep[top[x]]>dep[top[y]]?x=fa[top[x]]:y=fa[top[y]];
    return dep[x]>dep[y]?y:x;
}
const ll P1=1e12-7,P2=1e12+37,P3=1e12+9;
struct node{pii p;ll sm;}T[MN<<1];
int ls[MN<<1],rs[MN<<1],rt[MN],tot;
pii Mge(pii x,pii y)
{
    pii tmp;
    tmp.fi=min(x.fi,y.fi);
    tmp.se=max(x.se,y.se);
    return tmp;
}
ll Val(int x){return (1ll*x*x%P1*x%P1*x%P1)+(2ll*x*x%P2*x%P2)+(3ll*x*x%P3)+x;}
node mge(node x,node y){return (node){Mge(x.p,y.p),x.sm+y.sm};}
int bld(int l,int r)
{
    int x=++tot;
    if(l==r){T[x]=(node){mp(A[id[l]],A[id[l]]),Val(A[id[l]])};}
    else
    {
        int mid=(l+r)>>1;
        ls[x]=bld(l,mid);
        rs[x]=bld(mid+1,r);
        T[x]=mge(T[ls[x]],T[rs[x]]);
    }
    return x;
}
void mdf(int x,int l,int r,int k,int v)
{
    if(l==r){T[x]=(node){mp(v,v),Val(v)};return;}
    int mid=(l+r)>>1;
    if(k<=mid)mdf(ls[x],l,mid,k,v);
    else mdf(rs[x],mid+1,r,k,v);
    T[x]=mge(T[ls[x]],T[rs[x]]);
}
node qry(int x,int l,int r,int a,int b)
{
    if(l==a&&r==b){return T[x];}
    int mid=(l+r)>>1;
    if(b<=mid)return qry(ls[x],l,mid,a,b);
    if(a>mid)return qry(rs[x],mid+1,r,a,b);
    return mge(qry(ls[x],l,mid,a,mid),qry(rs[x],mid+1,r,mid+1,b));
}
void empty()
{
    en=dind=tot=0;
    for(int i=1;i<=N;++i)A[i]=hr[i]=rt[i]=mx[i]=0;
}
int main()
{
    freopen("treemutaion.in","r",stdin);
    freopen("treemutaion.out","w",stdout);
    int cas=read();
    reg int i,j;
    for(i=1;i<=300000;++i)Sum[i]=Sum[i-1]+Val(i);
    while(cas--)
    {
        N=read(),Q=read();
        for(i=1;i<=N;++i) A[i]=read();
        for(i=1;i<N;++i) j=read(),ins(j,read());
        dfs1(1,0);dfs2(1,1);
        for(i=1;i<=N;++i)if(top[i]==i)rt[i]=bld(l[i],r[i]);
        while(Q--)
        {
            int ty,x,y;
            ty=read(),x=read(),y=read();
            if(ty==1)
            {
                int len=dep[x]+dep[y]-dep[lca(x,y)]*2+1;
                int mi=1e7,ma=-1e7;ll sum=0;
                while(top[x]^top[y])
                {
                    if(dep[top[x]]<dep[top[y]]) swap(x,y);
                    node P=qry(rt[top[x]],l[top[x]],r[top[x]],l[top[x]],l[x]);
                    mi=min(P.p.fi,mi);ma=max(P.p.se,ma);sum+=P.sm;x=fa[top[x]];
                }
                if(dep[x]>dep[y]) swap(x,y);
                node P=qry(rt[top[x]],l[top[x]],r[top[x]],l[x],l[y]);
                mi=min(P.p.fi,mi);ma=max(P.p.se,ma);sum+=P.sm;
                puts((mi==1&&ma==len&&sum==Sum[len])?"Yes":"No");
            }
            else mdf(rt[top[x]],l[top[x]],r[top[x]],l[x],y);
        }
        empty();
    }
    return 0;
}




Blog来自PaperCloud,未经允许,请勿转载,TKS!

转载于:https://www.cnblogs.com/PaperCloud/p/11531078.html

智慧旅游解决方案利用云计算、物联网和移动互联网技术,通过便携终端设备,实现对旅游资源、经济、活动和旅游者信息的智能感知和发布。这种技术的应用旨在提升游客在旅游各个环节的体验,使他们能够轻松获取信息、规划行程、预订票务和安排食宿。智慧旅游平台为旅游管理部门、企业和游客提供服务,包括政策发布、行政管理、景区安全、游客流量统计分析、投诉反馈等。此外,平台还提供广告促销、库存信息、景点介绍、电子门票、社交互动等功能。 智慧旅游的建设规划得到了国家政策的支持,如《国家中长期科技发展规划纲要》和国务院的《关于加快发展旅游业的意见》,这些政策强调了旅游信息服务平台的建设和信息化服务的重要性。随着技术的成熟和政策环境的优化,智慧旅游的时机已经到来。 智慧旅游平台采用SaaS、PaaS和IaaS等云服务模式,提供简化的软件开发、测试和部署环境,实现资源的按需配置和快速部署。这些服务模式支持旅游企业、消费者和管理部门开发高性能、高可扩展的应用服务。平台还整合了旅游信息资源,提供了丰富的旅游产品创意平台和统一的旅游综合信息库。 智慧旅游融合应用面向游客和景区景点主管机构,提供无线城市门户、智能导游、智能门票及优惠券、景区综合安防、车辆及停车场管理等服务。这些应用通过物联网和云计算技术,实现了旅游服务的智能化、个性化和协同化,提高了旅游服务的自由度和信息共享的动态性。 智慧旅游的发展标志着旅游信息化建设的智能化和应用多样化趋势,多种技术和应用交叉渗透至旅游行业的各个方面,预示着全面的智慧旅游时代已经到来。智慧旅游不仅提升了游客的旅游体验,也为旅游管理和服务提供了高效的技术支持。
智慧旅游解决方案利用云计算、物联网和移动互联网技术,通过便携终端设备,实现对旅游资源、经济、活动和旅游者信息的智能感知和发布。这种技术的应用旨在提升游客在旅游各个环节的体验,使他们能够轻松获取信息、规划行程、预订票务和安排食宿。智慧旅游平台为旅游管理部门、企业和游客提供服务,包括政策发布、行政管理、景区安全、游客流量统计分析、投诉反馈等。此外,平台还提供广告促销、库存信息、景点介绍、电子门票、社交互动等功能。 智慧旅游的建设规划得到了国家政策的支持,如《国家中长期科技发展规划纲要》和国务院的《关于加快发展旅游业的意见》,这些政策强调了旅游信息服务平台的建设和信息化服务的重要性。随着技术的成熟和政策环境的优化,智慧旅游的时机已经到来。 智慧旅游平台采用SaaS、PaaS和IaaS等云服务模式,提供简化的软件开发、测试和部署环境,实现资源的按需配置和快速部署。这些服务模式支持旅游企业、消费者和管理部门开发高性能、高可扩展的应用服务。平台还整合了旅游信息资源,提供了丰富的旅游产品创意平台和统一的旅游综合信息库。 智慧旅游融合应用面向游客和景区景点主管机构,提供无线城市门户、智能导游、智能门票及优惠券、景区综合安防、车辆及停车场管理等服务。这些应用通过物联网和云计算技术,实现了旅游服务的智能化、个性化和协同化,提高了旅游服务的自由度和信息共享的动态性。 智慧旅游的发展标志着旅游信息化建设的智能化和应用多样化趋势,多种技术和应用交叉渗透至旅游行业的各个方面,预示着全面的智慧旅游时代已经到来。智慧旅游不仅提升了游客的旅游体验,也为旅游管理和服务提供了高效的技术支持。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值