60年前情诗生成器

德国一名计算机考古学家开垦出计算机写作情诗程序,但她毫不那风流罗曼蒂克主次的原创者。 早在60多年前,情诗生成程序已经出版。 电脑作诗 1948年6月,世界上率先台能完全试行存款和储蓄程序的电子计算机原型机在U.K.萨格勒布大学诞生。大家给它命名“婴孩”。 当时研商职员为它编写了几十种新型程序,不过于今超级多已经不见。 大不列颠及英格兰联合王国研商人口克Rees多夫·Strachey也加入了“婴儿”的研制。他为考试那台原型机随机接纳音讯的力量,编写出自动创作情诗程序。 “婴儿”本身蕴藏了大气诗文数据。每便运转作诗程序,大家只需输入几百个意思罗曼蒂克的动词和名词,它就能够自动生成一首短情诗。 Strachey把“婴孩”的“大作”打字与印刷出来贴在布告栏上。纵然那一个情诗不必然能感动女人的芳心,但作诗程序开创了Computer文本生成程序的前例。 后来随着Computer技艺飞快提升,“婴儿”和作诗程序被公众稳步淡忘。 历史重演 德意志计算机考古学家David·瓦尔德前段时间在英帝国清华大学博德利教室钻探Strachey杂文时开掘那大器晚成顺序。 他花3个月时间编写出同样的在线“情诗生成器”程序供网上朋友自由使用。 客商在线运营那黄金时代程序,输入一些词语,每一回点击“重载”键,网页上就能够出现生机勃勃首新的情诗。 大不列颠及英格兰联合王国《巴拿马城新闻早报》10日推荐瓦尔德的话报纸发表:“那牵涉到豆蔻梢头部分有国际影响力的英国Computer文化遗产。编写程序的那3个月十三分折磨人,因为依据现行反革命标准,那生龙活虎前后相继特别原始。” 瓦尔德将于3月下旬在英帝国伦敦就作诗程序公布解说。他营造的“婴孩”复制机不久后将要德意志联邦共和国展出,届时她会用那台机器演示“表白信程序”。 Computer“艺术” Strachey1916年名落孙山于英格雷厄姆普斯特德,老爹爱好音乐和图案,老妈是一名物工学家和电气程序员。那让Strachey从小受到艺术和理工科知识的再一次影响。 他1935年步向加州戴维斯分校高校国王大学学习,结束学业后做过物医学家和校长,并从20世纪40年份初始对Computer技艺发生兴趣。 1951年1月,Strachey第壹回接触有囤积程序的Computer并发轫工编织写程序。1952年,他结束校长职业,成为United Kingdom国家商量发展公司的全职Computer才具研讨员。 同年夏季,Strachey从堂妹这里获取灵感,利用同事、著名Computer地历史学家艾伦·图灵的私下数字生成器,开辟出作诗程序,那是人类第一次利用Computer生成法学小说。 Strachey还编写制定过最初的微型Computer音乐软件。他于1975年在加州伯克利分校大学病逝。

STREAM既然是前程的大势,那奇宝为啥偏偏重申是小儿编制程序(Coding)并不是此外课程呢?能够从这几方面看的

题目:

黑客们通过对原来就有的病毒反编写翻译,将过多比不上的病毒重新整合,一视同仁新编译出了新式的组合病毒。这种病毒的生殖和形成技术极强。为了阻碍这种病毒传播,某安全机构策划了三遍实验,来商讨这种病毒。
实验在多个查封的局域网内举行。局域网内有n台Computer,编号为1~n。一些Computer之间通过网线直接相接,变成树形的组织。局域网中有风流倜傥台湾特务殊的微机,称之为主旨计算机。依照部分早先的切磋,商讨员们制订了三个总结m步的实验。实验始于早先,宗旨Computer的数码为1,每台计算机中都有病毒的七个变种,并且每台Computer中的变种都不相仿。实验中的每一步会是底下中的豆蔻年华种操作:

  1. RELEASE x
    在编号为x的管理器中植入病毒的二个新变种。那么些变种在植入从前不设有于局域网中。
  2. RECENTER x
    将着力Computer改为编号为x的Computer。不过那一个操作会产生原先基本计算机中的病毒发生新变种,并感染过来。换言之,假诺操作前的主旨Computer编号为y,也就是在操作后附加了二回RELEASE y的操作。
    基于商量的结论,在植入三个新变种时,病毒会在局域网中寻觅主题Computer的职位,并沿着网络中最短的路线感染过去。
    而首先轮实验揭示了叁个震惊的原形:病毒的两样变种是排斥的。新变种在耳熟能详豆蔻梢头台已经被旧变种感染的微管理器时,会把旧变种完全消亡之后再感染。但钻探员发掘了落到实处进度中的漏洞。假设新变种在感染进度中从未销毁过这类旧变种,须求先费用1单位时间剖判旧变种,工夫销毁。借使在此之前销毁过那类旧变种,就足以以为销毁不开销时间。病毒在两台微型Computer之间的传遍亦可以为不开支时间。
    研讨员对任何感染进程的耗费时间非常感兴趣,因为那是消除病毒的卓绝时机。于是在m步实验之中,斟酌员一时还有或许会做出如下的摸底:
    3,REQUEST x
    叩问后生可畏旦在数码为x的微型Computer的重中之重集合中的Computer中植入三个新变种,平均感染时间为多少长度。编号为y的处理器在号码为x的Computer的要紧集结中,当且仅当从y沿网络中的最短路线感染到中央计算机必得经过x。由于有RECENTELacrosse操作的留存,这么些集结併不一定是始终不改变的。
    至今结束,安全体门以为曾经没有必要实际的试验了,于是他们拜托你编写二个顺序,模拟实验的结果,并回复全体的刺探。


题解:

题目真**长

大家用LCT来消除那道题。
首先大家须求观望到贰天性质.每趟参预的病毒一定是新变种。
也正是说其实每一种点毕竟是这种颜色并不主要,因为每叁回都进入新颜色
进而不管什么颜色都会被间接xx掉。

之所以大家的能够吸取那样的一条结论

  • 三个点到根的不等的颜色数即为那些点到根时经过的虚边的个数
    约等于说大家直接把第一个操作当做access操作
    咱俩开采这么前五个操作都消除了
    而是大家查询一个点的时候并不可能暴力跳fa找经过的虚边数.
    故而大家必要外表维护一下.
    鉴于大家要询问的是一个子树内的权和,那我们应当自然地想到用dfs序
    所以大家在进行LCT的进度中在外界动态维护一个dfs序.

Wait !!这是有换跟操作的呦,dfs序不是稳固的.
咱们得以依照当前的根节点rt与查询节点u的涉嫌来分类讨论.
具体是:

if rt == u: query all
if lca(rt,u) == rt : query tree of u
if lca(u,rt) == u :
    find point p has min depth and (lca(p,rt) = p,lca(p,u) = u)

上述lca是指在初步树中.
我们开采lca 只是用来祖孙判定的,大家得以用dfs序来代表这几个轻松的难点.

还不明了的话,,能够看本人那从晚自习起始一直调到第二天早自习的代码.

只要有人想问作者是怎么产生拍了意气风发夜晚没找寻错交到bzoj上4msRE却只因为本身写多少生成器的时候只生成了询问操作的话作者是会那多少个愿意地告知您之后写多少生成器写到八分之四的时候绝不因为有事就编写翻译好生成器然后关掉生成器的cpp去干一些别的的愉悦的会令你忘了你的生成器还从未写完的政工比方说在大降水天去高校满是水的塑料像胶跑道上去跑操而且跑完后躺在全部是水的假草坪上然后会机房的时候再感个冒.

。。。 。。。

呵呵

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
inline void read(int &x){
    x=0;char ch;bool flag = false;
    while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
    while(x=10*x ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
const int maxn = 410000;
const double eps = 1e-8;
inline int dcmp(const double &x){
    return (x > -eps) - (x < eps);
}
int a[maxn],n,dep[maxn],rt;
namespace Graph{
    struct Edge{
    int to,next;
    }G[maxn<<1];
    int head[maxn],cnt;
    void add(int u,int v){
    G[  cnt].to = v;
    G[cnt].next = head[u];
    head[u] = cnt;
    }
    int ind[maxn],oud[maxn];
    int dfs_clock,fa[maxn][23];
#define v G[i].to
    void dfs(int u){
    ind[u] =    dfs_clock;a[dfs_clock] = u;
    for(int i = head[u];i;i=G[i].next){
        if(v == fa[u][0]) continue;
        dep[v] = dep[u]   1;
        fa[v][0] = u;dfs(v);
    }
    oud[u] = dfs_clock;
    }
#undef v
}
namespace seg{
    double T[maxn<<2],lazy[maxn<<2];
    void build(int rt,int l,int r){
    if(l == r){
        T[rt] = dep[a[l]];
        return ;
    }
    int mid = (l r) >> 1;
    build(rt<<1,l,mid);
    build(rt<<1|1,mid 1,r);
    T[rt] = T[rt<<1]   T[rt<<1|1];
    }
    inline void pushdown(int rt,int l,int r){
    if(rt == 0 || dcmp(lazy[rt] == 0) ) return;
    int mid = (l r) >> 1;
    lazy[rt<<1]  = lazy[rt];
    lazy[rt<<1|1]  = lazy[rt];
    T[rt<<1]  = lazy[rt]*(mid - l   1);
    T[rt<<1|1]  = lazy[rt]*(r - mid);
    lazy[rt] = 0;
    }
    void modify(int rt,int l,int r,int L,int R,int val){
    if(L <= l && r <= R){
        lazy[rt]  = val;
        T[rt]  = (r-l 1)*val;
        return ;
    }
    int mid = (l r) >> 1;pushdown(rt,l,r);
    if(L <= mid) modify(rt<<1,l,mid,L,R,val);
    if(R >  mid) modify(rt<<1|1,mid 1,r,L,R,val);
    T[rt] = T[rt<<1]   T[rt<<1|1];
    }
    void modify(int x,int val){
    using namespace Graph;
    if(x == rt) modify(1,1,n,1,n,val);
    else if(ind[rt] < ind[x]||oud[x] < ind[rt])modify(1,1,n,ind[x],oud[x],val);
    else{
        int p = rt;
        for(int j=20;~j;--j){
        if(dep[fa[p][j]] <= dep[x]) continue;
        p = fa[p][j];
        }
        if(1 <= ind[p] - 1) modify(1,1,n,1,ind[p]-1,val);
        if(oud[p]   1 <= n) modify(1,1,n,oud[p] 1,n,val);
    }
    }
    double query(int rt,int l,int r,int L,int R){
    if(L <= l && r <= R) return T[rt];
    int mid = (l r) >> 1;pushdown(rt,l,r);
    if(R <= mid) return query(rt<<1,l,mid,L,R);
    if(L >  mid) return query(rt<<1|1,mid 1,r,L,R);
    return query(rt<<1,l,mid,L,R)   query(rt<<1|1,mid 1,r,L,R);
    }
}
namespace lct{
    struct Node{
    Node *ch[2],*fa;
    int id,tag;
    }mem[maxn],*it,*null;
    inline Node* newNode(){
    Node *p = it  ;p->ch[0] = p->ch[1] = p->fa = null;
    p->id = -1;p->tag = 0;return p;
    }
    inline void init(){
    it = mem;null = it  ;null->id = -1;
    null->ch[0] = null->ch[1] = null->fa = null;
    null->tag = 0;
    for(int i=1;i<=n;  i) newNode()->id = i;
    for(int i=2;i<=n;  i){
        (mem i)->fa = (mem Graph::fa[i][0]);
    }
    }
    inline void rever(Node *p){
    p->tag ^= 1;swap(p->ch[0],p->ch[1]);
    }
    inline void pushdown(Node *p){
    if(p == null || p->tag == 0) return ;
    if(p->ch[0] != null) rever(p->ch[0]);
    if(p->ch[1] != null) rever(p->ch[1]);
    p->tag = 0;
    }
    inline void rotate(Node *p,Node *x){
    int k = p == x->ch[1];
    Node *y = p->ch[k^1],*z = x->fa;
    if(z->ch[0] == x) z->ch[0] = p;
    if(z->ch[1] == x) z->ch[1] = p;
    if(y != null) y->fa = x;
    p->fa = z;p->ch[k^1] = x;
    x->fa = p;x->ch[k] = y;
    }
    inline bool isroot(Node *p){
    return (p == null) || (p->fa->ch[0] != p && p->fa->ch[1] != p);
    }
    inline void splay(Node *p){
    pushdown(p);
    while(!isroot(p)){
        Node *x = p->fa,*y = x->fa;
        pushdown(y);pushdown(x);pushdown(p);
        if(isroot(x)) rotate(p,x);
        else if((x->ch[0] == p)^(y->ch[0] == x)) rotate(p,x),rotate(p,y);
        else rotate(x,y),rotate(p,x);
    }
    }
    inline Node* find(Node *p){
    pushdown(p);
    while(p->ch[0] != null){
        p = p->ch[0];
        pushdown(p);
    }
    return p;
    }
    inline void access(Node *x){
    for(Node *y = null;x != null;y=x,x=x->fa){
        splay(x);
        if(x->ch[1] != null){
        Node *p = find(x->ch[1]);
        seg::modify(p->id,1);
        }
        x->ch[1] = y;
        if(y != null){
        Node *p = find(y);
        seg::modify(p->id,-1);
        }
    }
    }
    inline void makeroot(Node *p){
    access(p);splay(p);rever(p);
    rt = p->id;
    }
}
inline double query(int x){
    using namespace Graph;
    if(rt == x) return 1.0*seg::query(1,1,n,1,n)/n;
    if(ind[rt] < ind[x] || oud[x] < ind[rt])
    return 1.0*seg::query(1,1,n,ind[x],oud[x])/(oud[x]-ind[x] 1);
    int p = rt;
    for(int j=20;~j;--j){
    if(dep[fa[p][j]] <= dep[x]) continue;
    p = fa[p][j];
    }
    double upside = .0;
    if(1 <= ind[p] - 1) upside  = seg::query(1,1,n,1,ind[p]-1);
    if(oud[p]   1 <= n) upside  = seg::query(1,1,n,oud[p] 1,n);
    double dnside = (ind[p]-1)   (n-(oud[p] 1) 1);
    return upside/dnside;
}
char cmd[12];
int main(){
    int m;read(n);read(m);
    for(int i=1,u,v;i<n;  i){
    read(u);read(v);
    Graph::add(u,v);
    Graph::add(v,u);
    }
    dep[1] = 1;rt = 1;Graph::fa[1][0] = 1;
    Graph::dfs(1);seg::build(1,1,n);lct::init();
    for(int j=1;j<=20;  j){
    for(int i=1;i<=n;  i){
        Graph::fa[i][j] = Graph::fa[Graph::fa[i][j-1]][j-1];
    }
    }
    int x;
    while(m--){
    scanf("%s",cmd);read(x);
    if(cmd[2] == 'L'){
        lct::access(lct::mem x);
    }else if(cmd[2] == 'C'){
        lct::makeroot(lct::mem x);
    }else{
        double ans = query(x);
        printf("%.10lfn",ans);
    }
    }
    return 0;
}

从大境遇看


  1. 编制程序于今曾经渗透五行八作,前途的十年,相信会全盘覆盖任何行当,从没哪一个行当不会和编制程序搭上关系

    图片 1

    6949359_3_thumb.jpg

    ###### *到市场买菜也足以用手提式有线电电话机付钱

  2. 既然如此任何行业都和编制程序有关联,这尽早的以后就能够缺点和失误大批量美丽,而人才须要栽种,且作育速度须求够快!

  3. 工业4.0依旧以往的发展,机器人会替代部分行业的人口操控,懂编制程序的人会优于于不懂编制程序的人
  4. 为国家持续性发展提供丰硕的实验钻探技能,进步今后国家竞争性

从国家推动教育范畴看


  1. 二〇一二年,美中国奥林匹克足球队巴马总统一发布起全体公民学习编制程序,全国实行“编制程序不日常辰”的松开公共受益活动

    图片 2

    obama-code.org-photo.jpg

  2. 2015年,“大不列颠及苏格兰联合王国编制程序年”,United Kingdom显明5岁以上孩子,都要在校学习编制程序

    图片 3

    How-to-code---year-of-code_thumb.jpg

  3. 人口仅130万的小国爱沙尼亚,推广程序苏门答腊虎(ProgeTiiger)布置,让7~13岁上学的小孩子练习编写程序

    图片 4

    ProgeTiiger_Logo_horisontaal_EST_web.jpg

  4. 澳大太原联邦(Commonwealth of Australia)地区的Singapore、东方之珠等,都在私学实行编制程序课,香岛更拔出总课时的三分一列入程序编写制定

    图片 5

    QQ20160826-0@2x.png

  5. 2016年奇宝立项小孩子编制程序,经过1年开拓,先后编写出针对5-7岁小孩子Computer思维学习玩乐,7-十一岁小孩子编制程序学习软件火种斯Parker和学科,并前后相继落地10 城市二零一四年更付出小孩子创客编制程序课程一败涂地香港(Hong Kong)。

    图片 6

    QQ20160829-0@2x.png


个人观点看


  1. 编制程序是上学开销低于、效果与利益最大的读书课程,它只需求生机勃勃台计算机和软件,学习范围也仅需求一张桌子和椅子
  2. 任何课程需求购买越多的器材和提供越来越大的场馆或许须要建设四个空间来学习
  3. 编制程序是各个兴趣活动中唯黄金年代可以同期训练各种板事升高的技艺

总结


  1. 前景的子女不应有只是意气风发味享受科学和技术带来的方便,反而须求改为创作创建之人,发明愈来愈多科学和技术给全体人使用
  2. 西方国家提早认识到"儿童编制程序教育"是国家前程的角逐力,所以在儿女带有意识形态的年龄时便有利于学习以至纷繁投入大量财富
  3. 音信科学和技术手艺追着太阳追着风,是以往世界发展根基,种种孩子都应该学会怎么掌控计算机,而编制程序是最直白的路径
  4. 学懂编制程序就恍如学会写字,孩子学会编制程序,将会对他们生平受用,因为它教会男女怎么着思考,作育他们的逻辑思索和减轻难题手艺,并且能激发他们的创新手艺
  5. 在本身近年与父母或许老师的调换当中,犹如他们还不了然孩童编程对大家子女未来的深刻影响,从而极有希望失掉孩子学习的机遇

自家写那篇作品,除了享受对小孩编制程序的掌握外,更是因为新一代的儿女从小就在“触摸”的世界中成长,任何反馈都以即时的新闻反映,他们须求学会命令它创设它,而不只是只是利用它。
更期待保有老人能够突破守旧思维,让孩子真的接触科学技术,操控科学技术,调控科技(science and technology)。

点击关键字读书编制程序中儿童编制程序法学习作品

自个儿是老人,对编制程序0通晓
了解STEM
STREAM教育
奇宝STREAM课程

我是唐一(微信号11681445),奇宝科技联合创始人。当过几年老师,编写过9本FLASH和PHOTOSHOP教科书,参与过上百集的长篇动画制作,带团队开发了500多个幼教APP。现在全力打造“编程中国”社群项目,旨在普及中国儿童学习编程,给孩子创造未来的力量。希望认识更多朋友分享我的经验和学习你的心得!

本文由澳门新葡亰官网发布于数理科学,转载请注明出处:60年前情诗生成器