<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[zhy_cx的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/zhy_cx</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; zhy_cx]]></copyright><item><title><![CDATA[CSAPP bomblab]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/126824372</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/126824372</guid><author>zhy_cx</author><pubDate>Wed, 14 Sep 2022 15:05:59 +0800</pubDate><description><![CDATA[CSAPP bomblab]]></description><category></category></item><item><title><![CDATA[CSAPP datalab]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/126674890</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/126674890</guid><author>zhy_cx</author><pubDate>Sat, 03 Sep 2022 13:16:45 +0800</pubDate><description><![CDATA[CSAPP]]></description><category></category></item><item><title><![CDATA[AtCoder Beginner Contest 235]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/122521380</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/122521380</guid><author>zhy_cx</author><pubDate>Sun, 16 Jan 2022 12:03:11 +0800</pubDate><description><![CDATA[AtCoder Beginner Contest 235
A - Rotate
思路分析：

因为他给的数是三位数，我们直接取出每一位，然后拼凑就可以了

代码如下：
#include &lt;bits/stdc++.h&gt;
#define int long long
using namespace std;

signed main()
{
        int x;
        cin &gt;&gt; x;
        int ans = 0;
        int a[3];
   ]]></description><category></category></item><item><title><![CDATA[AtCoder Beginner Contest 234]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/122397900</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/122397900</guid><author>zhy_cx</author><pubDate>Sun, 09 Jan 2022 19:39:01 +0800</pubDate><description><![CDATA[AtCoder Beginner Contest 234
A - Weird Function
思路分析：

直接写就行

代码如下：
#include &lt;bits/stdc++.h&gt;
using namespace std;
#define ll long long
ll f(ll x)
{
        return x * x + 2 * x + 3;
}
int main()
{
        ios::sync_with_stdio(0);
        cin.tie(0);
]]></description><category></category></item><item><title><![CDATA[AtCoder Beginner Contest 228]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/121454565</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/121454565</guid><author>zhy_cx</author><pubDate>Sun, 21 Nov 2021 15:32:45 +0800</pubDate><description><![CDATA[AtCoder Beginner Contest 228
A - On and Off
思路分析：

如果s &lt; t说明是顺序的，所以只要x小于t并且大于等于s即可。
如果s &gt; t说明是逆序的，所以只要x &gt;= s或者x &lt; t即可。

代码如下：
#include &lt;bits/stdc++.h&gt;
using namespace std;
int main()
{
        int s, t, x;
        cin &gt;&gt; s &gt;&gt; ]]></description><category></category></item><item><title><![CDATA[Codeforces Round #753 (Div. 3)]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/121129763</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/121129763</guid><author>zhy_cx</author><pubDate>Wed, 03 Nov 2021 20:24:10 +0800</pubDate><description><![CDATA[Codeforces Round #753 (Div. 3)
A. Linear Keyboard
思路分析：

无语了，题目总是读不顺，看到output那个minimal我还以为是把手放到一个单词上，看需要多少time来完成敲出字符串。
写完一看，答案不对劲，然后发现这题其实就是把字母表重新排一下，然后求两个字母间的距离之差的绝对值。

代码
#include &lt;bits/stdc++.h&gt;
using namespace std;
map&lt;char, int&gt; mp;
int m]]></description><category></category></item><item><title><![CDATA[Codeforces Round #751 (Div. 2)]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/121089641</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/121089641</guid><author>zhy_cx</author><pubDate>Mon, 01 Nov 2021 21:48:19 +0800</pubDate><description><![CDATA[Codeforces Round #751 (Div. 2)
A. Two Subsequences
思路分析：

x实际上就是字符串里最小的字符。
剩下的便是y。

代码
#include &lt;bits/stdc++.h&gt;
using namespace std;

int main()
{
        ios::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
        int t;
        cin &g]]></description><category></category></item><item><title><![CDATA[Codeforces Round #752 (Div. 2)]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/121083786</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/121083786</guid><author>zhy_cx</author><pubDate>Mon, 01 Nov 2021 17:03:04 +0800</pubDate><description><![CDATA[Codeforces Round #752 (Div. 2)
A. Era
思路分析：

答案其实就是这个数减去它改变位置后的pos即可。
对于第一位如果不是1，那么它就要在前面插入a[1]−1a[1] - 1a[1]−1个数，来使得它能够&lt;=i&lt;= i&lt;=i，然后要注意的是，在你插入数之后，位于你刚刚插入的位置及其以后的下标都会增加，增加多少呢？其实累加起来就是ansansans，自己推一下就好了。
一开始直接想假了，每次都是拿后面那个数减去前面那个数累加。

代码
#include &]]></description><category></category></item><item><title><![CDATA[Codeforces Round #750 (Div. 2)]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/120962421</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/120962421</guid><author>zhy_cx</author><pubDate>Mon, 25 Oct 2021 22:47:52 +0800</pubDate><description><![CDATA[Codeforces Round #750 (Div. 2)
A. Luntik and Concerts
思路分析：

首先我们可以肯定的是a，b，c都大于等于1，所以我们先让它们自己抵消自己，最后a，c只有三种情况。
a = 1, c = 1 如果只有奇数个b，我们取一个b * 2 + a抵消c，否则就拿两个b放到一个数组，另外一个放1个a，1个c。
a = 0, c = 1 不能抵消。
a = 0, c = 0 如果是偶数个b，那么我们把b分成两份，否则，我们就先取出一个b和一对a，c抵消，剩下的就和]]></description><category></category></item><item><title><![CDATA[Codeforces1575D]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/120934169</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/120934169</guid><author>zhy_cx</author><pubDate>Sun, 24 Oct 2021 14:54:20 +0800</pubDate><description><![CDATA[思路分析

此题采用dfs，注意X选中了之后所有的X值相同，所以需要一个flag来存储X的值。
注意前导0要单独讨论，然后就是当’X’或者’_'在第一位时不能选0，其它位可以选0 - 9 任意一个数。

代码如下
//now-当前位数 flag-X的值 num-当前数的大小
#include &lt;bits/stdc++.h&gt;
using namespace std;
string s;
int ans;
void dfs(int now, int flag, int num)
{
        ]]></description><category></category></item><item><title><![CDATA[AtCoder Beginner Contest 224]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/120933168</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/120933168</guid><author>zhy_cx</author><pubDate>Sun, 24 Oct 2021 13:44:50 +0800</pubDate><description><![CDATA[AtCoder Beginner Contest 224
A - Tires
思路分析：

判断最后一个字符即可。

代码如下：
#include &lt;bits/stdc++.h&gt;
using namespace std;
int main()
{
        ios::sync_with_stdio(0);
        cin.tie(0);
        cout.tie(0);
        string s;
        cin &gt;&gt; s;
        st]]></description><category></category></item><item><title><![CDATA[Codeforces Round #748 (Div. 3)]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/120870697</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/120870697</guid><author>zhy_cx</author><pubDate>Wed, 20 Oct 2021 17:22:07 +0800</pubDate><description><![CDATA[Codeforces Round #748 (Div. 3)
A. Elections
思路分析：

令当前值比最大值大即可，如果最大值是它自己，就输出000

代码
#include &lt;bits/stdc++.h&gt;
using namespace std;
pair&lt;int, int&gt; a[3];
int ans[3];
int main()
{
        ios::sync_with_stdio(0);
        cin.tie(0);
        cout.ti]]></description><category></category></item><item><title><![CDATA[AtCoder Beginner Contest 223]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/120825900</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/120825900</guid><author>zhy_cx</author><pubDate>Mon, 18 Oct 2021 14:33:32 +0800</pubDate><description><![CDATA[AtCoder Beginner Contest 223

A是纯纯的水题，就不说了

B - String Shifting
思路分析

我真的sb，一开始想了好久是不是和全排列有关，然后读了好几遍题目也没有想法。
最后看了眼数据范围S串的长度为1000，O(N2)O(N^2)O(N2)是可以过的。
然后我是这样想的，对于每一个位置都有可能成为答案的第一位，对于原串在它后面的字符在新串中不改变，在它前面的字符接在最后即可，然后对于每一个位置放在第一位构成字符串存起来，最后sort得到答案。
看了眼别人的做]]></description><category></category></item><item><title><![CDATA[Jumping Monkey ccpc网络赛重赛]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/120814239</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/120814239</guid><author>zhy_cx</author><pubDate>Sun, 17 Oct 2021 18:46:44 +0800</pubDate><description><![CDATA[问题分析：


我们先正向看这个问题。


当前树里点权最大的节点对于其他节点来说肯定是都能到的，然后我们统计一下有哪些点，再删掉这个点权最大的点即可，递归就能得到答案。


但是那样写可能比较复杂。


所以采用了反向的做法。


首先，我们把点权从小到大排序好，然后每一次都把当前点u变为与u相连的（已经枚举过的点）的根节点，从而构成一棵新树。最后节点的深度就是其答案。


我们考虑第二个样例。


我们可以用并查集维护父节点，从样例二可以看到我们加节点2的时候是加在之前与他相连的节点1在新树的父节点，节]]></description><category></category></item><item><title><![CDATA[糖果机小作业]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/120760510</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/120760510</guid><author>zhy_cx</author><pubDate>Thu, 14 Oct 2021 11:27:21 +0800</pubDate><description><![CDATA[设计思路

代码
//machine.h
#include &lt;bits/stdc++.h&gt;
#define ll long long
using namespace std;
struct node
{
        ll purchase_price;
        ll selling_price;
        ll inventory;
};

class machine
{
public:
	ll profit;
        map&lt;string, node&gt; C]]></description><category></category></item><item><title><![CDATA[Codeforces Round #747 (Div. 2)]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/120667541</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/120667541</guid><author>zhy_cx</author><pubDate>Sat, 09 Oct 2021 11:21:33 +0800</pubDate><description><![CDATA[Codeforces Round #747 (Div. 2) Editorial
A. Consecutive Sum Riddle
思路分析：

一开始想起了那个公式l+(l+1)+…+(r−1)+r=(l+r)(r−l+1)/2l + (l + 1) + … + (r − 1) + r = (l + r)(r - l + 1) / 2l+(l+1)+…+(r−1)+r=(l+r)(r−l+1)/2。
然后一看令l+r=1l + r = 1l+r=1最合适，那么就有l=r−1l = r - 1l=r−1，]]></description><category></category></item><item><title><![CDATA[Codeforces1573B]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/120654849</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/120654849</guid><author>zhy_cx</author><pubDate>Fri, 08 Oct 2021 16:37:21 +0800</pubDate><description><![CDATA[问题描述

给你两个数组，a数组里面是1−2×n1 - 2\times n1−2×n中的奇数任意顺序排列组成，b数组里面是1−2×n1 - 2\times n1−2×n中的奇数任意顺序排列组成。
问你最少需要多少次操作能让a的字典序小于b。

思路分析

首先我们要明确两个数组中的元素肯定不同，那么能造成两个数组的字典序大小的就只有两个数组第一个数的大小关系。所以我们只考虑第一个位置即可。
那么如何来求最少？我们可以想到的是如果把a，b数组全部都排序，最后得到的b数组中的每一个元素都会大于a数组中该位置及以]]></description><category></category></item><item><title><![CDATA[Codeforces1514B]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/120512749</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/120512749</guid><author>zhy_cx</author><pubDate>Mon, 27 Sep 2021 17:04:18 +0800</pubDate><description><![CDATA[问题描述

给你两个数n,kn,kn,k，问可以构造多少nnn个最大位数为kkk数按位与为000并且这nnn个数加起来最大的合法序列，答案对1e9+71e9 + 71e9+7取模。

思路分析

首先我们考虑这nnn个数按位与以后为000这个条件：我们可以知道，如果按位与为000的话，就代表着这nnn个数在每一位至少有一个数在这一位为000。
其次考虑和最大，那么我们就可以这样想，既然每一位都会至少有一个数在这一位上为000，那么肯定是刚好一一对应最好，不然这些数加起来不会是最大。
因此，我们对于每一位，都]]></description><category></category></item><item><title><![CDATA[AtCoder Beginner Contest 220 D - FG operation]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/120498676</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/120498676</guid><author>zhy_cx</author><pubDate>Sun, 26 Sep 2021 22:40:41 +0800</pubDate><description><![CDATA[问题描述

现在给你一个长度为nnn的数组，对于每一步，都规定有两种操作。
F−F -F− 删掉最左边两个数，并把那两个数相加再对10取模，然后插入到数组左侧。
G−G -G− 删掉最左边两个数，并把那两个数相乘再对10取模，然后插入到数组左侧。
由于数组长度为nnn，那么我们可以知道在删除两个数到最后只有一个时，只需要n−1n - 1n−1步，并且每一步都有两种选择。
问你在这2n−12^{n-1}2n−1种情况中，最终剩下的值为k(k&lt;=9)k(k &lt;= 9)k(k&lt;=9)的情况每种有]]></description><category></category></item><item><title><![CDATA[Codeforces1527B1]]></title><link>https://blog.youkuaiyun.com/zhy_cx/article/details/120463211</link><guid>https://blog.youkuaiyun.com/zhy_cx/article/details/120463211</guid><author>zhy_cx</author><pubDate>Fri, 24 Sep 2021 21:09:27 +0800</pubDate><description><![CDATA[题目描述

游戏题，给一个只有000和111的回文串，对每一个人有两种操作：1、将这个串中任意的000变成111。2、如果当前串是非回文状态，可以将000和111排序。
问最后谁会赢这场比赛。

思路分析

由于一开始就是回文串，那么对于Alice来说，只要她选了任意的一个000变成111，那么Bob来说，总能找到和她选的000对称的000，所以Bob必胜，因为Bob可以在最后一回合选择第二种操作。
然后就是特殊情况，比如只有一个000，那么肯定是Bob赢。奇数个000，那么就证明这个000是在中心位置，A]]></description><category></category></item></channel></rss>