Codeforces Round #844 (Div. 1 + Div. 2, based on VK Cup 2022 - Elimination Round) A-D

比赛链接

A

题意

设计一条线路要贴着6个墙面走,从 \((a,b)\)\((f,g)\) ,线路长度最短。

题解

知识点:模拟。

分类取最短即可。

时间复杂度 \(O(1)\)

空间复杂度 \(O(1)\)

代码

#include <bits/stdc++.h>
#define ll long long

using namespace std;

bool solve() {
    int w, d, h;
    int a, b, f, g;
    cin >> w >> d >> h;
    cin >> a >> b >> f >> g;
    int ans = h + min(abs(a - f) + min(b + g, 2 * d - b - g), abs(b - g) + min(a + f, 2 * w - a - f));
    cout << ans << '\n';
    return true;
}

int main() {
    std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int t = 1;
    cin >> t;
    while (t--) {
        if (!solve()) cout << -1 << '\n';
    }
    return 0;
}

B

题意

\(n\) 个人要去电影院,第 \(i\) 个人要求至少 \(a_i\) 个其他人去他才去,问最终能有多少种选人去电影院的方案,保证每种方案选完后所有符合要求的都去了。

题解

知识点:贪心。

从小到大排序。如果低要求的人能去就先去,保证要求高的人去之前能去的都去。如果低要求的都去不了,换成高要求的更去不了,不如先预选低要求的,看看后面能不能补上。如此,可以得到所有方案。

因为可以都不去,所以如果第一个人就有 \(\geq 1\) 的要求时,显然是可以都不去的。

对于 \(i\in[1,n)\) ,如果 \(a_i \leq i-1\)\(a_{i+1} > i\) ,说明 \([1,i]\) 都能去,但不能直接选 \(i+1\) ,因为缺人需要继续安排后面的看看能不能补上,所以这里可以方案加一。

其他情况,\([1,i+1]\) 都能去则必须安排在一个方案;\([1,i+1]\) 都不能去,继续选,不能算做一个方案;\([1,i]\) 不能去,但 \([1,i+1]\) 可以去,此时要继续往后选,让这个方案能去的人都去。

最后,上述判断包括不了全都去,因此特判方案加一。

时间复杂度 \(O(n \log n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>
#define ll long long

using namespace std;

int a[200007];
bool solve() {
    int n;
    cin >> n;
    for (int i = 1;i <= n;i++) cin >> a[i];
    sort(a + 1, a + n + 1);
    int ans = 0;
    if (a[1] != 0) ans++;
    for (int i = 1;i < n;i++) {
        if (a[i] <= i - 1 && a[i + 1] > i) ans++;
    }
    ans++;
    cout << ans << '\n';
    return true;
}

int main() {
    std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int t = 1;
    cin >> t;
    while (t--) {
        if (!solve()) cout << -1 << '\n';
    }
    return 0;
}

C

题意

给出一个小写字母的字符串,每次修改可以使一个位置的字母替换成任意字母,求出修改的最少次数,使字符串的字母出现次数相同,并输出修改后的字符串。

题解

知识点:模拟,枚举,贪心。

注意到,直接枚举最后的个数很困难,但枚举最后有几种字母很容易,因此考虑枚举最后剩多少种字母。

接下来分两步走:

  1. 确定最少要变多少位置,同时确定最少答案情况的字母种数。
  2. 通过上一步确定的信息,遍历字符串更改。

第一步:

先将每个字母对应的出现次数记录好,同时保存字母本身的序号,方便排序后还能找到对应的字母。

枚举字母种数 \(i\) ,满足 \(i \mid n\) ,则最终每种字母会有 \(x = \dfrac{n}{i}\) 个。我们可以贪心地选择保留数量最多的前 \(i\) 个,这些字母中数量大于 \(x\) 是必须修改的,而后 \(26-i\) 个字母,全部都需要修改。于是,就可以求出 \(i\) 对应的修改次数 \(delta\) ,枚举取最小值,并记录最终种数 $div $ 和每种数量 \(cnt\),即可。

第二步:

我们此时需要遍历字符串修改,因此需要通过字母序号得到字母的排名(从 \(0\) 开始)和数量,所以需要遍历第一步得到的排名对应数量和序号的数组获得。

若某个位置的字母的数量大于 \(cnt\) 或者排名大于等于 \(div\) 并且字母的数量大于 \(0\) 则需要修改,枚举 \(26\) 个字母找到排名小于 \(div\) 且数量小于 \(cnt\) 的填充进去即可。

时间复杂度 \(O(n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>
#define ll long long

using namespace std;

bool solve() {
    int n;
    cin >> n;
    string s;
    cin >> s;
    vector<pair<int, int>> rk(26);
    for (int i = 0;i < 26;i++) rk[i] = { 0,i };
    for (int i = 0;i < n;i++) rk[s[i] - 'a'].first++;
    sort(rk.begin(), rk.end(), greater<pair<int, int>>());
    int div = 1;
    int ans = 1e9;
    for (int i = 1;i <= 26;i++) {
        if (n % i) continue;
        int x = n / i;
        int delta = 0;
        for (int j = 0;j < i;j++) delta += max(0, rk[j].first - x);
        for (int j = i;j < 26;j++) delta += rk[j].first;
        if (delta < ans) {
            ans = delta;
            div = i;
        }
    }
    int cnt = n / div;
    vector<pair<int, int>> pos(26);
    for (int i = 0;i < 26;i++) pos[rk[i].second] = { rk[i].first,i };
    for (int i = 0;i < n;i++) {
        if (pos[s[i] - 'a'].first > cnt || pos[s[i] - 'a'].second >= div && pos[s[i] - 'a'].first) {
            pos[s[i] - 'a'].first--;
            for (int j = 0;j < 26;j++) {
                if (pos[j].first < cnt && pos[j].second < div) {
                    s[i] = j + 'a';
                    pos[j].first++;
                    break;
                }
            }
        }
    }
    cout << ans << '\n';
    cout << s << '\n';
    return true;
}

int main() {
    std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int t = 1;
    cin >> t;
    while (t--) {
        if (!solve()) cout << -1 << '\n';
    }
    return 0;
}

D

题意

给出一个数组 \(a_i \in [1,10^9]\) ,求出 \(x \in [0, 10^{18}]\)\(a_1+x,\cdots,a_n+x\) 中完全平方数的数量的最大值。

题解

知识点:枚举,因数集合。

显然,必然存在 \(x\) 使得 \(a+x\) 是个完全平方数,答案至少为 \(1\) 。考虑答案为 \(2\) 及以上的情况。

我们可以先枚举所有两个数的组合 \(a_i,a_j(i<j)\) ,如果存在大于等于 \(2\) 的答案,必然会包括这些两个数的组合,因而我们可以通过两个数枚举出所有成立的 \(x\) ,对每个 \(x\) 在完整的数组中再跑一遍记录答案即可。

我们考虑如何得到使 \(a_i+x,a_j+x\) 都成为完全平方数的 \(x\) 。设 \(a_i+x = s^2,a_j+x = t^2\) ,直接枚举 \(x\) 复杂度是 \(10^9\) ,考虑枚举 \(s,t\) 相关的数。我们可以得到 \(a_j-a_i = t^2-s^2 = (t+s)(t-s) \in [1,10^9)\) , 因此我们可以枚举 \(t+s,t-s\) ,即枚举 \(a_j-a_i\) 的因子即可,我们最多只需要枚举 \(\sqrt {10^9}\) 次即可,然后再求出 \(t,s\) ,就可以得到 \(x\) 了。

时间复杂度 \(O(n^2\sqrt{10^9})\)

空间复杂度 \(O(n)\)

#include <bits/stdc++.h>
#define ll long long

using namespace std;

bool issqr(ll n) {
    ll x = sqrt(n);
    return x * x == n;
}

int a[57];
bool solve() {
    int n;
    cin >> n;
    for (int i = 1;i <= n;i++) cin >> a[i];
    int ans = 1;
    for (int i = 1;i <= n;i++) {
        for (int j = i + 1;j <= n;j++) {
            int d = a[j] - a[i];
            ll x = -1;
            for (int k = 1;k * k <= d;k++) {
                if (d % k || ((d / k + k) & 1)) continue;
                int s = (d / k + k) / 2;
                int t = (d / k - k) / 2;
                if (1LL * s * s < a[j] || 1LL * t * t < a[i]) continue;
                x = 1LL * s * s - a[j];
                int cnt = 0;
                for (int k = 1;k <= n;k++) if (issqr(a[k] + x)) cnt++;
                ans = max(ans, cnt);
            }
        }
    }
    cout << ans << '\n';
    return true;
}

int main() {
    std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int t = 1;
    cin >> t;
    while (t--) {
        if (!solve()) cout << -1 << '\n';
    }
    return 0;
}

本文来自博客园,作者:空白菌,转载请注明原文链接:http://www.cnblogs.com/BlankYang/p/17056807.html

本文转载于网络 如有侵权请联系删除

相关文章

  • LeetCode 题目解答—— 第 311 到 371 题

    [Updatedon9/22/2017] 如今回头看来,里面很多做法都不是最佳的,有的从复杂度上根本就不是最优解,有的写的太啰嗦,有的则用了一些过于tricky的方法。我没有为了这个再更新,就让它们去吧。老规矩,跳过需要付费的题目。题目是越来越不好做,我尽量把自己的思路写下来。371SumofTwoIntegers51.9%Easy368LargestDivisibleSubset31.9%Medium367ValidPerfectSquare36.9%Medium365WaterandJugProblem24.7%Medium363MaxSumofRectangleNoLargerThanK30.6%Hard357CountNumberswithUniqueDigits44.2%Medium355DesignTwitter23.5%Medium354RussianDollEnvelopes30.6%Hard352DataStreamasDisjointIntervals38.2%Hard350IntersectionofTwoArraysII42.6%Easy349Intersect

  • 射频前端:七种武器之终局之战(下)

    上期我们理解了毫米波射频模组的内部结构和大致的功能单元。它里面包含了收发芯片(包括混频和移相器等等),发射放大器和接收低噪放还有开关。本期我们尝试回答下面几个问题:为什么需要毫米波?毫米波的商业化进程和机遇在哪里? 怎样理解毫米波是5G射频前端的终局之战?为什么需要毫米波?答案很简单粗暴:我们需要更大的信号带宽。毫米波广袤的土地和频谱资源,在诱惑着饥渴的人类社会。这正如一堆金光闪闪的金山银山,吸引着贪婪的眼光。图片来源:Qorvo相比于4G,5G的频谱利用率只能提高19.4%。通透畅快的高速接入体验,完全依赖于5G更大的带宽。相比于20MHz的4G带宽,400MHz的5G毫米波带宽,能带来40倍以上的高速体验。这等于是告诉你,从前,北京到上海坐飞机需要两个半小时;现在我告诉你,只需要4分钟就能从北京顺义机场到达上海浦东,有可能你嘴里的北京烤鸭还没来得及咽到肚子里面。为什么目前大家反馈,5G没有这么high的体验?这是因为:第一,用户的体验是有迟滞性的。想想目前火爆的短视频和各种直播带货,2015年上4G的时候,有人躺床上半夜刷抖音和吃鸡吗?第二,5G的网络建设是分阶段的。第三,坏消息总

  • vlan网络环境1

    配置LSW1: vlanbatch23interfaceGigabitEthernet0/0/1portlink-typeaccessportdefaultvlan2displaythisinterfaceGigabitEthernet0/0/2portlink-typeaccessportdefaultvlan3displaythisinterfaceGigabitEthernet0/0/3portlink-typetrunkporttrunkallow-passvlanall配置LSW3: vlanbatch23interfaceGigabitEthernet0/0/2portlink-typeaccessportdefaultvlan2displaythisinterfaceGigabitEthernet0/0/3portlink-typeaccessportdefaultvlan3displaythis配置LSW2: vlanbatch23interfaceGigabitEthernet0/0/1portlink-typetrunkporttrunkallow-passvlan

  • 关于媒体的一些思考

    “媒体(media)一词来源于拉丁语“Medius”,意为两者之间。媒体是传播信息的媒介。它是指人借助用来传递信息与获取信息的工具、渠道、载体、中介物或技术手段,也指传送文字、声音等信息的工具和手段。也可以把媒体看作为实现信息从信息源传递到受信者的一切技术手段。媒体有两层含义,一是承载信息的物体,二是指储存、呈现、处理、传递信息的实体。 ”““媒”是“女”字旁,《诗·卫风·氓》中有“匪我愆期,子无良媒”,古语又讲天上无云不下雨,地上无媒不成婚。可见,很早之前,“媒”主要是在男女婚嫁中起传情达意的中介作用。——来自百度百科 ”媒体作为信息载体和传输实体,在信息流动的过程中,简直就是一个放大器。通过媒体更容易成事,比如几个世纪前,富兰克林利用报纸做成了很多事,最终功成名就。几个世纪后的今天,互联网如此发达,媒体不再是纸质等延迟较高的介质,而是全面走向了数字化,既突破了空间的限制,也在时间维度上把延迟降低到可以忽略不计。互联网的传播效率极高,因为这上边的内容复制和转发基本零成本。随着互联网的发展,媒体形式也从图文到音频到视频到直播到VR,甚至未来你无法想象的形式。但趋势无疑是在相同的时间里能

  • Swift进阶-LLDB调试

    工欲善其事,必先利其器。程序猿最好的利器就是开发工具,iOS开发者最基本,最关键的一点就是熟练使用Xcode,而LLDB则是Xcode中至关重要的一环。 作为开发者,我们大部分的工作时间都用于调试,调试协议,调试UI,调试bug,用好LLDB,打遍iOS无敌手。LLDB拥有大量有用的调试命令:(lldb)help Debuggercommands: apropos--Listdebuggercommandsrelatedtoawordorsubject. breakpoint--Commandsforoperatingonbreakpoints(see'helpb'for shorthand.) bugreport--Commandsforcreatingdomain-specificbugreports. command--CommandsformanagingcustomLLDBcommands. disassemble--Disassemblespecifiedinstructionsinthecurrent target.Defaultstothecurre

  • 详解: 7案例,浮动排列

    核心:这些都是从1开始的哈,自己找图片,重命名即可。<!DOCTYPEhtml> <htmllang="en"> <head> <metacharset="UTF-8"> <title>Document</title> <styletype="text/css"> *{padding:0px;margin:0px;} .courseList { width:650px; margin:20pxauto; border:1pxsolidred; } .courseListimg { width:120px; height:120px; } .courseListimg:nth-of-type(odd)//奇数 { float:left; margin-left:10px; } .courseListimg:nth-of-type(even)//偶数 { float:right; margin-right:10px; } </style&g

  • 你愿意花十分钟系统了解数据分析方法吗?

    本文投稿自公众号:数据分析成长手册通常在拿到一份数据进行相关的模型训练之前,我们需要进行数据清洗以便得到干净的数据。进一步需要找到与问题有关的特征信息,并把这些特征转换成特征矩阵的数值,这也就是机器学习实践中的重要步骤之一,特征工程。本系列文章将从数据特征的分布分析、对比分析、统计分析、贡献度分析(帕累托分析)、和特征的相关性分析来识别数据集整体上的一些重要性质。 本文目录01特征分布分析02特征对比分析03特征统计分析04特征贡献度分析05特征相关性分析01分布分析 理论介绍:分布分析是用来解释数据的分布类型和分布特征,显示其分布情况。所以可以对一开始拿到数据可以首先进行初步的分布分析。分布分析主要分成两种:①对定量的数据进行分布分析②对定性的数据进行分布分析。对定量数据的分布分析按照如下步骤进行: 1、求极差 2、决定组距与组数 3、决定分点 4、绘制频率分布图对定性的数据分布分析: 根据变量的分类类型来确定分组,然后使用图形对信息进行显示。Python分析结果:比如现在你爬取到某地区的二手房信息数据,针对这一批数据的房价你要做一次定量分布分析,以及对不同房子的朝向做一个定性的分布

  • 一张图读懂WTFPL开源协议

    Search资料时候,无意间发现一个叫WTFPL的协议,不管你有不有听说过,反正我是第一次听说,如此有趣有料,必须分享出来给大家看看。来看一下官方是如何定义的:DOWHATTHEFUCKYOUWANTTOPUBLICLICENSE Version2,December2004 Copyright(C)2004SamHocevar<sam@hocevar.net> Everyoneispermittedtocopyanddistributeverbatimormodified copiesofthislicensedocument,andchangingitisallowedaslong asthenameischanged. DOWHATTHEFUCKYOUWANTTOPUBLICLICENSE TERMSANDCONDITIONSFORCOPYING,DISTRIBUTIONANDMODIFICATION 0.YoujustDOWHATTHEFUCKYOUWANTTO.复制不够直观,接着看下图[http://www.wtfpl.net/]: 总之就是一句话:YoujustD

  • 外链建设注意事项

    我们在做大连网站推广的时候,经常使用的方法就是发外链,现在很多人认为,外链的作用已经不大了,也就不去做了,其实这样的想法是错误的。现在高质量的外链对于网站来说效果依然很大,外链建设不仅可以传递权重,还有引流的作用。我们在发布外链的时候,都会去一些不同的平台来发布文章,并添加网站的链接,这样才算是正确外链建设。那么,大连外链建设注意事项有哪些呢?外链建设注意事项1、文章质量文章无论对于内链还是外链来说都是非常重要的,不同的文章质量,权重也是不同的,传递的效果也是不同的,所以文章的原创性是非常重要的。2、平台选择很多人在选择平台的时候,都会选择免费的平台,而这些平台的质量都不算高,有些平台只能发布文章,并不能附带链接,这样的平台就不要选择了。3、平台权重无论是什么样的平台,都要选择有权重的,如果平台没有权重,你发布的外链是没有任何作用的,这样的外链就是垃圾外链,如果你在这样的平台大量发布文章,有可能会受到索引擎的惩罚。4、新闻网站发布新闻网站的权重很高,在这发布文章会有非常好的效果,但你要在新闻网站发布文章却很困难,有的可能会花费金钱才让你发,有的即使你花费金钱也不会让你发的,所以这样的网

  • 谷歌的 PlaNet 强化学习网络

    跑步之前先学会走路。现如今,迁移学习在机器学习社区中风靡一时。迁移学习是Google、Salesforce、IBM和Azure云服务商提供的托管AutoML服务的基础。它现在在最新的NLP研究中占据突出的地位——包括谷歌的BERT以及ULMFIT中有重要的作用。正如Sebastian在他的博文(NLP’sImageNetmomenthasarrived)中写道:这些成为举世闻名的工作是通过展示预训练语言模型在各种NLP任务上实现良好的性能。这些方法标志着一个分水岭:它们可能会像预训练的ImageNet模型对计算机视觉的影响一样对NLP产生广泛的影响。我们也开始看到可以使用跨领域迁移学习处理多个任务的神经网络的例子。ParasChopra是一个基于PyTorch的很好的教程,可以根据文本描述进行图像搜索,搜索相似的图像和文字,并在图像下面写上题注。与其他机器学习方法相比,深度强化学习因其数据量小而闻名,其学习过程中存在不稳定性(参照Deepmind关于RL与神经网络的论文),以及性能方面的落后。我们已经看到强化学习的应用主要是游戏或机器人,这些场景可以产生大量模拟数据。与此同时,许多人认

  • Jetpack架构组件学习(4)——APP Startup库的使用

    最近在研究APP的启动优化,也是发现了Jetpack中的AppStartup库,可以进行SDK的初始化操作,于是便是学习了,特此记录 原文:Jetpack架构组件学习(4)——AppStartup库的使用-Stars-One的杂货小窝 两种方式初始化SDK 首先,先是讲解了关于SDK的初始化方式,像我们一般使用到百度地图,或者某些开源库的时候,需要我们进行初始化操作 而他们文档给出的大多数为以下方式: 自定义一个Application,在Application对应的生命周期OnCreate()方法中进行初始化操作 这样一样,一旦项目接入的SDK过多,Application里的初始化逻辑也是多了起来,且代码层面,每次都要去加代码,也是十分繁琐. 针对代码繁琐的问题,有的开源库作者找到了一种比较取巧的方法,那就是通过四大组件中的ContentProvider进行初始化操作 具体怎么做呢? 首先,创建一个ContentProvider类: packagesite.starsone.abdemo importandroid.content.ContentProvider impo

  • 移动端web开发click touch tap区别

        移动端用tap时会有穿透问题 一:click与tap比较click与tap都会触发点击事件,但是在手机web端,click会有200-300ms的延迟,所以一般用tap代替click作为点击事件。singleTap和doubleTap分别代表单次点击和双次点击 二:tap的穿透处理使用zepto框架的tap的点击事件,来规避click事件的延迟响应,会出现穿透,即点击会触发非当前层的点击事件。 三:穿透原因问题:在html5点击了q以后,弹出b的弹框 因为tap事件是通过document绑定了touchstart和touchend事件实现,$('.q')上,当touchend事件冒泡到document上以后执行$(this).hide();此时$('.b'),就处在了页面的最前面现在touchend冒泡到了document上,并且$('.b')在页面的最前面,然后就触发了click事件更多web前端免费学习资料加群领取,群号434623999

  • JProfiler 性能分析工具介绍

    安装官方地址:https://www.ej-technologies.com/download/jprofiler/files注意: 1.JprofilerforLinux安装包(服务端)不需要证书 2.Jprofilerforwindows安装包/mac安装包(客户端) 需要购买证书,试用10天 3.保证版本一致 一、安装和配置 1、在windows/mac上安装jprofile 2、打开jprofile 3、Session--IntegrationWizard(综合向导)--newremoteIntegration(新远程集成) 4、选择onaremotecomputer--操作系统类型 5、JVMVendor选择Oracle、Version选择1.8.0,Mode选择默认,如果JVM为64位,需要勾选64-bitJVM 6、选择等待jprofilergui方式: 6.1waitforaconnecttionfromthejprofilergui等待来自jprofilergui的连接 6.2startupimmediately,connectlaterwiththejpr

  • 【拼团骑中线】看腻了大海,不妨跟随我们玩玩

    最近领队老和我发牢骚,说东线带的队伍太多,大海都看腻了! 工作就是这样,反复一件事,看一样的东西多了确实感觉很累!好!我答应您们发中线团!   当然,做这期活动的目的是回馈我们以往的老客户和新队员,帮助一些队员想挑战中线,但又不敢独立前行的队员,他们担心完成不了在路上造成很多麻烦的事,OK!我们来的,你空手来就行,全程我们来搞定!   海南中线是指海口至三亚或者三亚至海口,途径屯昌、琼中、五指山、保亭的骑行线路,也是横跨五指山的最中心线路。   线路总况:中线的最大特点是蜿蜒的山区路段,不同于东、西两条骑行线路海景的山地自然风光,五指山一带拥有热带雨林风光,以及黎族、苗族聚居地的少数民族风情,别有一番风味。需要注意的是,中线住宿点相对较少,所以骑行前,应该合理安排补给、住宿地点,以免错过或者未能及时赶到住宿点哦。中线的路况极佳,以柏油马路和水泥路为主,路面平整,开阔。不过地形较为起伏,爬坡较多,因此体力消耗较大,骑友们一定要提前做好“大起大落”准备。骑友们还有注意避免骑夜车哦~ 报名费用:1988元/位 一价全包省心省事(5人起出团)  

  • 我的Windows 11使用感想

    我的Windows11使用感想 !!!本文将在 https://blog.projectoms.com/pages/332.html 持续更新!!! 如想获得最佳阅读体验,请访问:https://blog.projectoms.com/pages/332.html 最近作死在实体机上安装了Windows11,不得不说,开机后看到桌面的一瞬间,我感觉我是在用macOS... 众所周知,Windows11在底层内核层面无较大变化,而界面则焕然一新.现在系统中无处不见的圆角矩形,磨砂玻璃材质半透明背景... 接下来,我将带大家看看界面以及功能上的一些变化. 本次使用的是微软的内部预览版本10.0.22000.100(还是10就离谱) 首先来看看启动后的锁屏界面,原来在左下角的时间跑到了正中间,时间的字体也加粗了. 不得不说这改进还是挺好看的。 还有,吐槽一下,不知道是不是预览版的原因,关机,重启,更新的界面都特别丑(至少我是这么想的) 纯黑色,除了中心的文字和加载图标没有任何东西 另外,Windows11的桌面背景也还行,这里我放一张4K的

  • MongoDB Could not find host matching read preference { mode: “primary” } 问题

          导致原因:集群有12w+的collection 需要尽快解决collection过多的问题方可解决

  • 体系化的面向对象课程

    按:面向对象是绝大多数计算机专业学生的重要课程,北航也不例外。事实上,北航开设OO课程已经有十几年的历史,梳理一下历史发展脉络,基本可以分成三个阶段:第一阶段,面向对象概念与UML表示,那时Java的使用还不是很普遍。这个阶段课程的特点是侧重于介绍UML语言,以及如何使用UML分析和描述一个软件的概要性设计。第二阶段:面向对象概念的程序化表达,由于UML是一个比较抽象的描述性语言,大二学生不易理解和掌握,特别是在应用方面。此阶段课程开始引入Java语言,并在UML与Java之间建立了面向对象概念之间的映射,并结合典型的设计模式介绍UML的表示和相应的Java程序表示。第三阶段,通过大作业量和高强度的训练来掌握面向对象思考方法和设计方法。这个阶段的改革始于2014年,基本是从0开始,完全重构了该课程。后续博客会再来细谈。 这张图是关于OO课程的全部故事,此图产生于午后咖啡馆与高老师的精彩BB。我们的一个基本共识是:北航培养出来的本科生必须能够搞定企业的复杂软件问题,而且我们要成建制的达成这个目标。所谓复杂软件问题,就是设定在贴近企业真实需求的背景下,抓住其复杂的核心特征(功能多、技术要

  • 分布式事务(2)---强一致性分布式事务解决方案

     分布式事务(1)-理论基础 分布式事务(3)---强一致性分布式事务Atomikos实战 分布式事务(4)---最终一致性方案之TCC   强一致事务要求在任意时刻各节点数据在任意时刻都是一致的。强一致事务的解决方案主要有DTP模型(全局事务模型)、2PC、3PC。 强一致性数据一致性较高,但是存在性能问题,在分布式事务未完全提交和回滚之前,查询不到新的数据,牺牲了可用性,实现也比较复杂,不适合高并发场景。 基于DTP模型典型的解决方案是分布式通信协议的XA规范。MysqlConnector在5.x开始提供对XA规范的支持。XA事务支持不同的数据库,但是需要其都支持XA规范。 1.DTP模型 DTP中几个重要的概念,全局事务,分支事务 全局事务:由事务管理器管理的事务,能够一次操作多个资源管理器 分支事务:每个资源管理器中的独立事务 AP:应用程序 RM:资源管理器,可以理解为数据库 TM:事务管理器,负责协调和管理DTP模型中的事务,提供应用程序编程接口,同时管理资源管理器   2.2PC 2PC模型是指两阶段提交模型,它将事务流程分为prepare

  • Hibernate一对一单向外键关联

    一、一对一单向外键关联:   一对一单向外键关联主要用到了以下两个注解:   1、OneToOne(cascade=CasecadeTYPE.ALL);     cascade=CasecadeTYPE.ALL:表示的是表之间的级联关系,比如级联删除,级联更新等,ALL表示的是全级联。     2、JoinColumn(name="sid"unique=true);     JoinColumn:表示将被控类的外键写在主控类中   主要是用到主表中。   需要注意的点是:在保存时应该先保存外键对象再保存主表对象;      问题一:在编写实体类Students.java的时候发生一个错误: Typemismatch:cannotconvertfromCascadeTypetoCascadeType[]复制 检查之后发现错误是导致的原因是注解注解引用的包出现了问题: @OneToOne(cascade=CascadeType.ALL)//表示全级联关系 @Column(name="pid"unique=true) 导致错误的包: importorg.hibern

  • HDU 6109 数据分割 【并查集+set】 (2017&quot;百度之星&quot;程序设计大赛 - 初赛(A))

        数据分割 TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):1119    AcceptedSubmission(s):268 ProblemDescription 小w来到百度之星的赛场上,准备开始实现一个程序自动分析系统。这个程序接受一些形如xi=xj 或 xi≠xj 的相等/不等约束条件作为输入,判定是否可以通过给每个w赋适当的值,来满足这些条件。输入包含多组数据。然而粗心的小w不幸地把每组数据之间的分隔符删掉了。他只知道每组数据都是不可满足的,且若把每组数据的最后一个约束条件去掉,则该组数据是可满足的。请帮助他恢复这些分隔符。   Input 第1行:一个数字L,表示后面输入的总行数。之后L行,每行包含三个整数,i,j,e,描述一个相等/不等的约束条件,若e=1,则该约束条件为xi

  • angular中使用echarts并实现数据更新

    第一个echart图像 1.在创建的angular项目终端中输入如下命令安装echart包。 npminstallecharts-S npminstallngx-echarts-S npminstall@types/echarts复制 2.在app.module.ts中导入echart。 import{NgxEchartsModule}from'ngx-echarts'; @NgModule({ imports:[ ..., NgxEchartsModule.forRoot({ echarts:()=>import('echarts') }) ], }) exportclassAppModule{}复制 3.在xxx.html中准备一个div盒子,用于放置echart图像。 <divecharts[options]="BarOption"class="chart"></div>复制 4.[option]接口传递echart配置参数,在xxx.ts中通过配置BarOption可以设置echart图像的样式。 exportclassAppCom

相关推荐

推荐阅读