Codeforces Round #666 (Div. 2)A-E题解(DE已施工完毕)

MMRotate 详细使用教程 MMRotate 详细使用教程 做旋转目标检测,怎么可以不知道如何使用MMRotate呢! github链接: https://github.com/open-mmlab/mmrotate 1 安装 创建虚拟环境并激活 conda create -n mmrotate python=3.7 -y conda activate mmrotate 安装 PyTorch 和 torchvision conda install pytorch torchvision -c pytorch 注意:确保 阅读详情

Codeforces Round #666 (Div. 2)A-E题解
//写于rating值2033/2184
//本场打的div1,本场出了AB题,rating值-42
//尽管存在读错题意白给4发的原因,但是如果没办法稳定出div2的E也就是div1的C的话,是没办法稳定在黄名或者打到更高的rating值的,毕竟也不是每次都是状态极佳可以A-D无失误手速极快。
//E题是看div1榜单排名从上往下第二位中国选手的代码理解的,昨晚的时候思路已经非常接近这个解法了,但是缺了一个关键性的结论和操作实现方法,我现在的水平和思维力还差了一根弦。斗胆也写一下E的题解。另外注意下B题是不需要真写个三分出来的
//掉分不重要,学到新东西是最重要的,以后一定会打到更高的分数走到更远的地方。

比赛链接:https://codeforces.com/contest/1397
A题
水题…

题意为给你n个字符串,你可以任意改变其中字符所在的位置,还可以把某个字符移到任意一个字符串里。问你能否在一定次数的操作后,让这n个字符串相等(字典序的相等也就是字符串相同)。

由于我们可以任意改变每一个字符的位置和所在字符串,并且不限制操作次数,因此字符原本的所在位置是没有意义的。我们只需要关注每个字符出现了几次即可。
又由于我们的目标是让这n个字符串相同,那么相同下标位置上的字符必然相同,每个下标上字符对应的个数为n,由这个条件容易推得,如果我们能使得n个字符串相同,我们的每个字符的出现次数,必定是整除n的。
以上。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

int num[26];

int32_t main()
{
    IOS;
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        memset(num,0,sizeof(num));
        for(int i=0;i<n;i++)
        {
            string s;
            cin>>s;
            for(int j=0;j<s.size();j++)
                num[s[j]-'a']++;
        }
        bool flag=1;
        for(int i=0;i<26;i++)
            if(num[i]%n) flag=0;
        if(flag) cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
}

B题
三分(并不需要真的写一个三分)
数据分析,暴力

给定一个数列,要求你对它进行重新排列顺序后,再做若干次的增加1或者减少1某一个位置上数字的大小的操作,使得整个数列是一个等比数列,且比值为正数。
现在要你求出最小的操作次数。

第一步是贪心的过程,很明显的我们应当先把原来的数列按照从小到大排序好,理由是等比数列是不断增大的,我们按照贪心的思路要让小的和小的匹配,大的和大的匹配,这样的差值和最小。
第二步是要认识到,对于我们需要的操作次数ans来说,我们选择的等比数列比值定为x,那么函数ans=f(x)是一个单峰函数,是一个凹函数,我们可以通过三分来求极小值。

到这步之后,真的去写一个三分也是可行的,注意一下数据范围,特判一下等比数列的值爆longlong上限,也是可以的。

但是实际上并不需要真的写一个三分算法出来,在思考三分算法的实现过程中,我们会意识到,等比数列的增长速度是极其迅速的,当比值x稍微稍微大一点点的时候,就会在极少的项数后便超出longlong的上限。

我们分析,n的范围是大于等于3小于等于1e5,longlong的上限为1e19级别,而数列中的最大值只有1e9。
这里需要有一种对于数值的敏感性,注意到题目给的第二组样例,输入n=3,三个数字都为最大的1e9,此时我们需要的操作数才1e9的级别,代表此时的等比数列比值大小是很小的。撑死了也就是1e3的级别。

同时我们要认识到,n为最小值3,三个数字都为最大的1e9时,此时的比值是最大的。
此处证明的话,当长度相同的时候,我们希望答案等比数列比值更大的话,必定是要数列中值更大,因此我们全部取1e9。
当长度不同,由上一条结论我们已经知道了,为了让最后比值更大,数列中每一项都是1e9。而很明显的,对于n=3的答案x来说,n>3的其他数列,比x更大的比值,得到的ans必然要大于比值为x时。此处自己稿纸上想一下吧。

经过以上结论后,我们知道最后的最优比值最大也只是一个1e3左右的值。我们可以暴力从1开始枚举比值,记录比值为i-1的所需的操作次数,与比值为i时候的所需操作次数比较,如果比值i时更小或相等,代表我们刚好位于凹函数的谷底,比值为i-1时即为最小操作次数。此时break即可。
同时我们要注意一下,如果最后答案的比值对应的等比数列最后一项已经很接近longlong上限,下一项会爆掉longlong,需要加个特判break。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

int n;
vector<ll>num;

int32_t main()
{
    IOS;
    cin>>n;
    num.resize(n);
    for(auto &x:num) cin>>x;
    sort(num.begin(),num.end());
    ll ans=llINF;
    for(ll i=1;i<=1e5;i++)
    {
        ll temp=0,now=1;//temp记录比值为i时候所需的操作次数
        for(ll j=0;j<n;j++)
        {
            temp+=abs(now-num[j]);
            if(now>llINF/i) {temp=-1;break;}//如果等比数列当前项超过了longlong上限则结束循环
            now*=i;
        }
        if(temp==-1) break;//temp-1代表等比数列某一项已经超出longlong上限,结束循环
        if(temp<ans) ans=temp;
        else break;//temp>=ans代表我们已经到达凹函数的“谷底”
    }
    cout<<ans<<endl;
}

C题
构造

题意为给定一个数列a包含n个整数(正负零),你需要在进行恰好三次操作后,使得数列a中的每个数都为零。
每次操作,你可以选择这个数列中一段连续的下标
,连续下标区域长度为x,你可以对这段下标区域的每个数字,减去x的任意倍数(不同下标的数可以减去x不同的倍数)。
现在需要你输出三次操作的操作方案。

有一个简单且普遍使用的构造方法:
我们第一次选择长度n-1的区域,对a[i]加上a[i] ×\times× (n-1)。
第二次选择长度n的整段数列,对a[i](注意这里的a[i]指的是初始的a[i]值,不是第一次操作后的值)减去a[i] ×\times×
n。
此时两次操作的公共部分的n-1个数字,值会变为a[i]+a[i]×\times×(n-1)-a[i]×\times×n=0,已经被清零。
此时还会剩下一个数字不一定为0,我们在第三次操作直接选择这个数字所在的单个长度区域,减去这个数的值即可。

另外注意特判长度n=1的情况。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

ll n;
vector<ll>num;
vector<ll>cas;

int32_t main()
{
    IOS;
    cin>>n;
    num.resize(n);cas.resize(n);
    for(auto &x:num) cin>>x;
    if(n==1)
    {
        cout<<1<<' '<<1<<endl;
        cout<<1<<endl;
        cout<<1<<' '<<1<<endl;
        cout<<-1<<endl;
        cout<<1<<' '<<1<<endl;
        cout<<-num[0]<<endl;
    }
    else
    {
        cout<<2<<' '<<n<<endl;
        for(ll i=1;i<n;i++)
        {
            if(i!=1) cout<<' ';
            cout<<(n-1)*num[i];
        }
        cout<<endl;
        
        cout<<1<<' '<<n<<endl;
        for(ll i=0;i<n;i++)
        {
            if(i) cout<<' ';
            cout<<n*num[i]*-1;
        }
        cout<<endl;
        
        num[0]-=n*num[0];
        cout<<1<<' '<<1<<endl;
        cout<<-num[0]<<endl;
    }
}

D题
博弈

题意为有n堆石头,两个人轮流从中选某一堆,从中拿出一个石头,当前拿的人不能选择上一个人刚选过的那一堆石头。谁无法拿出石头,谁就输。
现在给你这n堆石头的每堆石头数量,让你求出胜利的人是先手还是后手。

博弈嘛,我们都先从最简单的情况来考虑。

一.只有一堆石子的情况
此时先手选了这一堆石子后,后手的人没有石子堆可选,因此此时先手必胜。

二.有两堆石子情况
此时先手选定了某个石子堆后,后手只能选另一堆,到下一轮先手又只能重新选最开始选择的那一堆石子堆…
也就是说先手选定后,两个人都是固定各自在一堆石子堆里拿石头。
如果先手选择的那一堆的石子堆的石子数量大于后手的那一堆石子数量,那么后手的石子堆先取完,先手必胜。而先手石子数量小于等于后手的时候,是后手必胜。
因此先手要优先选择石子个数更多的那一堆,如果这一堆的数量与另一堆相同,后手胜,如果大于另一堆,那先手胜利。

三.最后考虑有三堆或者更多堆数的普遍情况
此时参考第二种情况的分析,如果先手第一轮选了某一堆后一直选择这一堆,如果其他堆的石子数量加起来小于先手的那一堆石子,那先手必胜。
再考虑其他堆的石子数量加起来大于等于先手的那一堆石子的情况。
此时按照石子总数量的奇偶性来考虑,如果总数量是偶数的话,假设后手可以通过某种方式,使得两个人最后能把所有的石子都拿完,由于总数量是偶数,此时是后手必胜。那么我们来思考后手应当如何来达到这一目的。
注意此时最大的那一堆的值是小于等于总数的一半的,后手在其他堆数里只要每次只从最大的那一堆里面拿,就可以使得所有的石子堆的石子数量尽可能的平均,一直采用这样的策略到最后必然是可以取完所有的石子的。
由此得到结论,其他堆的石子数量加起来大于等于先手的那一堆石子的时候,若总石子数量为偶数则后手必胜。而总石子数为奇数的时候,拿掉一个就变成了偶数,此时转化为了先手必胜。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

vector<ll>num;

int32_t main()
{
    IOS;
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        num.clear();
        num.resize(n);
        ll sum=0;
        for(int i=0;i<n;i++)
        {
            cin>>num[i];
            sum+=num[i];
        }
        sort(num.begin(),num.end());
        if(n==1) cout<<"T"<<endl;
        else if(n==2)
        {
            if(num[1]>num[0]) cout<<"T"<<endl;
            else cout<<"HL"<<endl;
        }
        else
        {
            if(num[n-1]*2>sum) cout<<"T"<<endl;
            else
            {
                if(sum&1) cout<<"T"<<endl;
                else cout<<"HL"<<endl;
            }
        }
    }
}

E题
贪心,结论,dp

题意
你在玩一个射击闯关的游戏,你拥有三种枪,这三种枪的性能如下:
第一种枪:装载子弹消耗r1的时间,装载完毕后可以减去一只怪物的1点血量。
第二种枪:装载子弹消耗r2的时间,装载完毕后可以减去当前所在层所有怪物1点血量。
第三种枪:装载子弹消耗r3的时间,装载完毕后可以直接杀死某一只怪物。
(r1<=r2<=r3)

现在有n层地牢,每层地牢有num[i]只普通怪物,普通怪物只有一点血量,每层除了普通怪物外还有一只boss,boss拥有两点血量。在该层的所有普通怪物被杀死之前,第一种枪和第三种枪无法攻击boss,但是第二种枪可以直接杀死所有普通怪物并伤害boss1点血量。

你可以在任意时刻移动到相邻层的地牢,另外有一个特殊的规则,如果你对boss造成了伤害但没有杀死boss,就必须立刻移动到相邻层的地牢去。你每次在相邻地牢移动,需要消耗d的时间。

对于任意一种枪,你都不能在在地牢之间移动时进行装载子弹的操作,你只能在到达某一层地牢后才能装载子弹,并且假定你射击子弹攻击怪物的时间消耗为0。

现在你从第1层地牢出发,目标是杀死所有层地牢里的boss,需要你求出最小的时间消耗。

解题思路
杀死每层boss的方案可以按照第一次是否直接杀死分为两种,
一种是直接杀死该层boss,装载子弹的时间消耗为r1×\times×num[i]+r3。
另一种是第一次对boss造成一点伤害后离开该层,在之后再次回到该层杀死boss,装载子弹的时间消耗为min(r2+r1,r1×\times×num[i]+r1$\times$2)。

其中第一种杀死boss的方法我们只要经过目标层一次即可,但是第二种方法我们必须经过目标层至少一次。

容易想到,我们可以从第一层一路走到第n层,再折返回来走回第1层,这样的话除了第n层外的每一层我们都经过了两次,每一层都可以选择两种杀死boss方法中更优的那一种。但是很明显的,这种方案不一定是最优的。

因为我们在某些层数可以选择从3层到4层,再从4到3,在3到4,在4到5…这样折返的方案,因此上一段并不一定是最优的。
但是我们这里要从上一段的方案中推出一个贪心结论,如果我们的路径中有一段从第n层回头到第x层,那么从x层到第n层这一段,我们必然只有从x层一路走到第n层再回头到第x层这一种最优方案。理由如下图
在这里插入图片描述
图中的箭头代表一次相邻层数之间的移动,箭头的头部代表移动到该层一次。注意到红色圈出来的部分,第x层到n-1层都已经有两个箭头指向自己,代表经过了这一层两次,已经可以选择最优的杀死boss方案。而如果我们在一个区域中增加移动操作,如紫色圈出的在x+1层和x+2层之间移动,这个移动操作是无效操作,因为x+1层和x+2层杀死boss已经是最优的方案了,无法再被优化。
当然你会注意到此时第n层只经过了一次,我们只能选择直接杀死boss的方案,如果在n-1层和n-2层增加一个来回的话,是有可能优化的,但是这一点我们先不考虑,这一点会在后面的dp过程中被考虑到。

接着从样例可以看出,最优的方案中,我们最后所在的位置不一定是最后一层也就是第n层。也就是我们最后所在的终点可能是任何一层。
那么我们可以按照最后所在的层数分为n种方案进行考虑,如果我们最后所在位置是第x层,由上面的推导可以得知,第x层右侧的部分最优方案就是x层一路走到n层n层一路走回到n层。那么此时左侧的最优方案又应该如何得到?
由于我们最后是要在第x层,那么在x左侧的层数如果有走回头路的情况,x=5的时候,如果从3走到4,又从4走回头路走到3的话,必须要重新从3走到4,否则无法到达5层。如下图:在这里插入图片描述
红色圈出的是我们x层左侧的基本方案,是我们必须走的部分,如果在这个部分要添加回头方向的话,就必须要再补上对应的相反方向才能走到x层,也就是我们要优化这部分杀死boss的时间消耗的话,我们在不同地牢间的移动,在基础方案上,每次增加移动都必须是i到i+1和i+1到i两种移动作为一对,同时添加进去。

接着我们考虑,在x层左侧的部分,上述的添加相邻层数之间的移动,应该如果选择。这里很明显要采用dp来求解,但是如何使用dp来正确求解是一个难思考的点。
在稿纸上画图找规律如下:
在这里插入图片描述
注意到上面图片中,添加一组移动进去的方案,会使得i-1层和i层变为经过2次,是可能产生时间优化的。
添加相邻两组进去的方案,注意到第i层经过了3次,但是旁边的i-1层和i+1层都是经过2次,这种方案仍然是可能产生优化的。
但是对于添加相邻三组进去的方案,我们注意红色圈出的第i-1层和第i层都经过了3次,这两层之间的添加部分是可以被删去的。
从上述可以结论出,我们对于x左侧的部分来说,添加这种多余相邻层之间的移动,最多只能连续添加两组。
由此我们可以完成左侧的dp操作。

cost_clear[i]为直接杀死第i层boss的装载子弹时间消耗
cost_rest[i]为第一次不杀死boss第二次杀死的装载子弹时间消耗
cost_min[i]为第i层杀死boss的最优装载子弹时间消耗
dp_pre[i]为从第一层到达第i层且杀死所有boss的最少时间消耗

dp_pre[i]的转移方程即为:
首先在基础方案为直接从第i-1层走过来:
dp_pre[i]=dp_pre[i-1]+cost_clear[i]
意思为前面i-1层采用最优,第i层直接杀死boss。
然后考虑i-1层和第i层之间添加一组移动:
dp_pre[i]=min(dp_pre[i],dp_pre[i-2]+2×\times×d+cost_min[i-1]+cost_min[i])
再考虑在i-2和i-1层,i-1层和第i层之间各添加一组移动:
dp_pre[i]=min(dp_pre[i],dp_pre[i-3]+4×\times×d+cost_min[i-2]+cost_min[i-1]+cost_min[i])

dp_pre[n]的情况,实际上就已经把上面讨论x层右侧时候,第n层的优化问题包括进去了,因为对第n层优化,就可以看做x=n的情况。

计算出dp数组之后,我们从第n层从后往前扫,前i-1层使用dp_pre的值,i层到n层使用最上面分析的来回一次的方案,该值可以在循环中O(1)计算。

对最后所在层数的所有情况的消耗取最小即为答案。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const ll maxn=1e6+7;

ll n,r1,r2,r3,d;
ll num[maxn];
ll cost_clear[maxn],cost_rest[maxn],cost_min[maxn];
//clear代表一次直接杀死boss所需的时间消耗,rest为分两次杀死boss的消耗,min为clear和rest中的较小值
ll dp_pre[maxn];

int32_t main()
{
    IOS;
    cin>>n>>r1>>r2>>r3>>d;
    for(ll i=1;i<=n;i++)
    {
        cin>>num[i];
        cost_clear[i]=num[i]*r1+r3;
        cost_rest[i]=min(r2+r1,r1*num[i]+r1*2);
        cost_min[i]=min(cost_clear[i],cost_rest[i]);
    }
    ll ans=d*(n-1);//不论哪种方案我们都必然要先从第1层走到第n层,有n-1次转移,先加到答案上
    for(ll i=1;i<=n;i++)
    {
        dp_pre[i]=cost_clear[i]+dp_pre[i-1];
        if(i>1) dp_pre[i]=min(dp_pre[i],dp_pre[i-2]+2*d+cost_min[i-1]+cost_min[i]);
        if(i>2) dp_pre[i]=min(dp_pre[i],dp_pre[i-3]+4*d+cost_min[i-2]+cost_min[i-1]+cost_min[i]);
    }
    ll add=dp_pre[n],sum_suf=cost_clear[n];//suf为第x层右侧部分的消耗
    for(ll i=n-1;i;i--)
    {
        sum_suf+=d+cost_min[i];
        add=min(add,sum_suf+dp_pre[i-1]);
    }
    cout<<ans+add<<endl;
}

CH7034B显示模块原理图设计,已量产 显示桥接板的价值,不在于简单把 RGB 排线换成另一种接口,而在于能否把并行视频、时钟、显示控制、模拟输出和辅助配置同时组织成稳定系统。当前这张 CH7034B 原理图就是这种思路:U3 CH7034B 作为核心桥接芯片,输入侧是 LCD_R0~R7、LCD_G0~G7、LCD_B0~B7、LCD_DE、LCD_HSYNC、LCD_VSYNC、LCD_CLK 与 LCD_BL,输出侧则通过 DAC0~DAC2 和 DDC_SC/DDC_SD 形成模拟显示接口边界。 阅读详情

相关推荐

ABAP代码检查(Code Review)

1、SLIN 扩展程序检查 也可通过(SE38工具栏->检查-扩展程序检查) 进入 2、ATC 检查 通过<SE38菜单栏-检查-ABAP测试主控室> 或事物代码SCI, 支持自定义检查变式 SCI可以配置检查变式满足特殊需求,配置对象集用于批量检查 3、通过ABAP测试主控室实现统一管理,定期检查作业和监控功能(事务代码ATC) 参考 SLIN...

u012232542的博客 6063

全世界最强的算法平台codeforces究竟有什么魅力?

大家好,之前说过由于和LeetCode结了梁子,所以周末的LeetCode专题取消了,给大家写点其他专题的算法问题。目前选择的是国外著名的编程竞赛平台——codeforces。它在竞赛圈名气比较大,对于普通大学生而言可能了解不多。所以今天这篇文章简单和大家介绍一下codeforces这个网站,以及它的使用方法。 链接:codeforces.com codeforces简介 简单介绍一下codeforces这个网站,codeforces位于宇宙编程最强的毛国。据说最早是由俄罗斯的一群大学生维护的,它最大的特点

TechFlow的博客 3万+

Keil 编译输出信息分析:Program size: Code, RO-data , RW-data, ZI-data

一般 MCU 包含的存储空间有:片内 Flash 与片内 RAM,RAM 相当于内存,Flash 相当于硬盘。编译器会将一个程序分类为好几个部分,分别存储在 MCU 不同的存储区。如图所示,在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息。

qq_40305944的博客 4578

Codeforces比赛规则梳理

1、排名div 选手们按Rating以1700为界划分为Div.1和Div.2两类,Div.1的比赛较难,Div.1的ABC三题会和Div.2的CDE三题相同。每次比赛结束后Rating都会依据此前各个选手的Rating和公式重新计算。 附 各个头衔的Rating范围和名字颜色:(初始1500) <1200 Newbie 灰 <1400 Pupil 绿 <1600 Specialist 青 <1900 Expert 蓝 <2100 Candidate Master 紫

小哈里的博客 1万+

【车辆动力学】专栏目录汇总

车辆动力学知识目录汇总

CrazyRabbit的博客 1713

若依框架整合Flowable:从零构建企业级流程中心

本文详细介绍了如何将若依框架与Flowable工作流引擎整合,构建企业级流程中心。通过环境配置、依赖添加、数据库设置等核心步骤,实现流程定义管理、任务处理服务等关键功能,并结合实际案例展示请假审批流程的实现与动态表单集成。文章还提供了性能优化和生产建议,帮助开发者高效构建稳定可靠的工作流系统。

weixin_28365523的博客 228

Codeforces round #666 (Div.2)

Codeforces round #666 Div.2A. Juggling Letters(签到题)B. Power Sequence(枚举)CDE A. Juggling Letters(签到题) 题意:可以随意更换每个字符串中的字母,问能否使所有字符串相同。 题记:求每个字母的个数余n是否都为0即可。 #include<iostream> #include<queue> #include<cmath> #include<cstring> using na

moyangxian 263

AI嵌入式系统测试:从确定性验证到概率性评估的体系构建

软件测试是保障系统质量的关键环节,其核心在于验证功能是否符合预期。传统嵌入式测试聚焦于确定性逻辑,通过代码覆盖、边界值分析等方法确保时序、内存等指标的精确性。随着人工智能技术的普及,深度学习模型以其概率性输出和复杂非线性映射的特性,为嵌入式系统带来了新的能力,也彻底改变了测试的范式。AI模型的‘黑盒’特性使得测试目标从‘绝对正确’转向‘置信度满足’,并催生了准确率、F1分数等新指标。在工程实践中,这种融合要求测试体系必须扩展维度,将数据质量、模型量化损失、资源约束下的精度与性能权衡纳入核心考量。尤其在嵌入式

weixin_26766559的博客 382

Codeforces Round #666 (Div. 1) (A~C)题解

Link! 经典翻车 A 给出一种操作,每次可以给区间[l,r][l,r][l,r]中每个数加上一个r−l+1r-l+1r−l+1的倍数的数(可以不相同),现给出一个数列,要求恰好三次操作变成全零,输出方案。 思路 发现只要全都是nnn的倍数,可以一次操作清零,于是第一次操作将第一个清零,第二次操作选择[2,n][2,n][2,n],加到nnn的倍数(因为gcd(n,n−1)=1gcd(n,n-1) = 1gcd(n,n−1)=1所以很容易实现),最后一次清零即可。 代码 #include<bits/

qq_44062973的博客 302

C51单片机驱动ILI9341彩屏实战:从Proteus仿真到绘制自定义图案(附完整代码)

本文详细介绍了使用C51单片机驱动ILI9341彩屏的完整实战流程。内容涵盖硬件连接、8080并行接口时序模拟、寄存器初始化、屏幕方向设置以及基本图形绘制原理,并重点讲解了如何在Proteus仿真环境中搭建电路、调试代码,最终实现自定义图案的显示。文章提供了完整的代码示例,为嵌入式开发学习者和复古硬件爱好者提供了一套可行的解决方案。

rnn9storyteller的博客 511

如何使用Docker部署OpenClaw小龙虾(docker compose快速部署)

本文以飞牛NAS为例💻,带大家一步步完成Docker部署OpenClaw小龙虾🦞。不管你是用NAS、云服务器还是本地电脑,只要支持Docker,都可以参考这个步骤来安装部署⚡

XiaoqiangClub的博客 727

Codeforces Round #666 (Div. 1) 题解

A 假设第三次操作范围是 [1,n][1,n][1,n],那么前两次操作的目标就是把每个数变成 nnn 的倍数。 假设前两次目标的操作范围都是 bbb,那么对于每个数 aaa,需要找到一个 xxx,满足 a+bx≡0(modn)a+bx\equiv 0\pmod na+bx≡0(modn),即 x≡−abx\equiv -\dfrac a bx≡−ba​,那么就需要保证 bbb 在模 nnn 意义下有逆元,所以 bbb 需要是个质数。而两次操作要覆盖整个序列,所以 b>n2b>\dfrac n

a_forever_dream的博客 431

Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍

目录Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍一、简单介绍二、Mask 实现的遮罩效果三、Soft Mask 实现遮罩效果四、 Soft Mask 的一些设置五、插件下载Unity 工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。

仙魁XAN 8574

Codeforces Round 481 (Div. 3)

Codeforces Round 481 (Div. 3)

InHng的博客 274

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Codeforces Round #666 (Div. 1) / contest 1396

目录A Multiples of LengthB Stoned GameC Monster InvadersDE A B C D E √ √ √ ( √:做出; ●:尝试未做出; ○:已补题 ) 题目地址:https://codeforces.com/contest/1396 A Multiples of Length 题意:给定一个长度为 n 的数组 a,你可以操作恰好 3 次,每次操作如下: 选择 a 的一个子数组(假设长度为 len),然后对这个子数组的每一个数,可以

dragonylee的博客 378

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Codeforces Round #666 (Div. 2)题解

A .Juggling Letters 解题思路: 基本模拟题,只要字母%n == 0即可。 示例代码: #include<bits/stdc++.h> using namespace std; char c[1005]; int main() { int t; cin >> t; int num[35]; while(t--) { memset(num,0,sizeof(num)); int n;

steven_pzx的博客 309

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Codeforces Round #666 (Div. 2) 题解

A. Juggling Letters 题目描述: 给nnn个字符串,每次操作你能将一个字符串的一个字符移动到任意字符串的任意字符,可以进行无数次操作,请问最后能将所有字符串都变成一样么。 解题思路: 看懂题目就很简单了,因为可以操作无数次,所以只要判断所有字符的个数是否是nnn的倍数就可以了,如果所有字符的个数是否是nnn的倍数那么一定可以达到要求。 代码: #include <bits/stdc++.h> using namespace std; int main(){ int t; c

weixin_39412108的博客 323

Codeforces Round #666 (Div. 1) A. Multiples of Length

每次改变的值是区间长度,我们可以将操作分开,最后一次将元素清零,前两次将数组所有元素变成n的倍数,这很容易做到,我们将n个数分成 1,2~n,区间长度分别是,1,n-1,1的话可以随便加,2~n的数,只要加上本身的n-1倍就好了,很容易证明,x+(n-1)*x=n*x。选择一个段,对于这个段中的每一个数字,我们可以给它加上𝑙𝑒𝑛的倍数,其中𝑙𝑒𝑛是这个段的长度(添加的整数可以不同)。

ACMer未入门热爱者 353

Codeforces Round #666 (Div. 2)ABCD

A.Juggling Letters 题意:n个字符串,执行无限次操作,每次可以将一个字符串的其中一个字符,移动到任意字符串的任意位置。问是否能使所有字符串一样。 由于可以随便操作,使所有字符串一样的条件是a-z每个字母出现的总次数能被n整除。 #include <bits/stdc++.h> using namespace std; #define m(a) memset(a,0,sizeof(a)) int a[30]; int main(){ int t;cin>>

YeHosea的博客 1181

Codeforces Round #666 (Div. 2)

待补:2/5 A.Juggling Letters 统计26个小写英文字母的个数,之后判断每个字母的个数是否是n的倍数。 #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <map> #include <set> #include <vector> #include <string> typede

zoujc2001的博客 297

Codeforces Round #666 (Div. 2) (A-D)

题目链接 A - Juggling Letters 直接统计每个字母个数,检查是否都是 n 的倍数即可 #include<bits/stdc++.h> using namespace std; int vis[100]; int main() { int T; cin>>T; while(T--){ int n; cin>>n; memset(vis,0,sizeof vis); string s; for(int i=0;i<n;i++){

Consult_ 236

Codeforces Round #666 (Div. 2)E Monster Invaders

题意: 有两种不同类型的怪物和三种不同类型的枪, 一个拥有1点生命的普通怪物。 一个拥有2点生命的老板。 这三种枪是: 手枪,对一个怪物造成1点生命伤害,时间r1 激光枪,对当前等级的所有怪物(包括老板)造成1点伤害,时间r2 AWP,立即杀死任何怪物,时间r3 这些枪最初是不装子弹的,Ziota一次只能装1把枪。 如果Ziota伤害了boss但没有立即杀死它,他将被迫从当前关卡移动到任意相邻关卡i−1或者i+1,Ziota也可以随时选择移动到相邻的楼层。相邻层之间的每一次移动都由传送门管理,传送时间为d。

Andy01_ 2335

Codeforces Round #666(Div. 2)E. Monster Invaders(DP)

E. Monster Invaders 题意: 游戏里有nnn个关卡,你初始在第一关,第iii关有tit_iti​个小怪,每关都有且仅有一个boss。 小怪的hp为1,boss的hp为2。 你有三种攻击方式: 手枪:花费aaa时间对敌单体造成1伤害。 激光枪:花费bbb时间对敌全体造成1伤害。 AWP:花费ccc时间对敌单体造成2伤害。 (1≤a≤b≤c≤1e9)(1\le a\le b\le c\le1e9)(1≤a≤b≤c≤1e9) 当你一次打不死boss时(即没有用AWP),为了降低仇恨,你必须传送到

WHile——World of Hile 343

Codeforces Round #666 (Div. 2)题解ABC

A. Juggling Letters 题目传送门 Juggling Letters 题目大意 给你n个字符串,让你移动任意次后判断能否让每个字符串相等 思路 直接统计每个字符串中出现的字符串的个数和,判断和是否为n的倍数 AC Code #include<cstdio> #include<algorithm> #include<iostream> #include<cstring> using namespace std; #define endl '\n'

Kuricip的博客 1761

Codeforces Round #666 (Div. 2)总结(A、B、C、D)

Codeforces Round #666 (Div. 2)总结(A、B、C、D) 上午LeetCode周赛自闭,晚上cf再次自闭… A:Juggling Letters 题目链接 题意 n个字符串,每次操作可以选择两个字符串(可以相同)选择其中一个字符串中某一字符插入到另一字符串。问:操作任意次,能否使得所有字符串都相同? 题解 只需判断所有字符串的任意字符的数量都是n的倍数即可。(看题慢了,再加上上场没注意很多细节,导致交的比较慢…) AC代码(cpp) #include<cstdio> #

serendipity的博客 1241

Codeforces Round #666

A https://codeforces.com/contest/1397/problem/A 直接判断各个字母的总个数能否被n整除就行了 #include <cstdio> int t,n,f=1,a[30]; void rd(){ char ch; for (scanf("%c",&ch); ch<'a' || ch>'z'; ) scanf("%c",&ch); for (; ch>='a' && ch<='z'; ) a[ch

hehepig的博客 402
上一篇: Educational Codeforces Round 94 (Rated for Div. 2)A-E题解
下一篇: Codeforces Round #667 (Div. 3)A-F题解
StandNotAlone
博客等级 码龄7年 338粉丝 47原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值