世界五星级大厨经典菜品集

本blog只是记录C++学习以来掉过的一些坑,写下来防止自己下一次再犯,顺便分享

持续更新,到死为止

  • 菜品特套1:vector.size() '~' 的使用
  • 菜品特套2:if-else的缩进
  • 菜品特套3:int范围边界的1ll使用
  • 菜品特套4:内存计算
  • 菜品特套5:全局变量和局部变量的重复
  • 菜品特套6:顺序结构&& ||前后顺序
  • 菜品特套7:scanf("%s")与换行符的爱恨情仇
  • 菜品特套8:break
  • 菜品特套9:,;的差距
  • 菜品特套10:STL的map/set
  • 菜品特套11:C++的执行顺序
  • 菜品特套12:顺次处理字符读入
  • 菜品特套13:传地址的动态开点
  • 菜品特套14:异或判断相等的偷懒

菜品特套1:vector.size() ‘~’ 的使用

✔✔

for( int i = G[u].size() - 2;i >= 0;i -- )

❌❌

for( int i = G[u].size() - 2;~ i;i -- )

食用说明书食用说明书

~:是用来判断是否为-1的简便写法

常见用法👇

前向星套用

memset( head, -1, sizeof( head) );
...
for( int i = head[u];~ i;i = nxt[i] )

还有无限输入的判断

此时与EOF产生的作用一样

while( ~ scanf( "%d", &n ) )
//也可写作
while( scanf( "%d", &n ) != EOF )

以上操作一但出现符合=−1=-1=1就会结束程序,跳出循环……
但是倒回去仔细看错误的写法,看似正确实则暗流涌动,一句话就可以直击要害

G[u].size()==0G[u].size()==0G[u].size()==0的时候怎么办?!! 减完后变成−2-22
此时是判断不出来的,就会一直死循环−2-22下去!


PS:此问题来自哲学的微笑——老刘,疯狂嘲笑哈哈哈哈
在这里插入图片描述


菜品特套2:if-else的缩进

✔✔

if( ... ) {for( int i = 1;i <= n;i ++ )if( ... )
}
else {...
}

❌❌

if( ... )for( int i = 1;i <= n;i ++ )if( ... )
else...

食用说明书食用说明书
如果if−elseif-elseifelseforforfor是这么操作,那么运行就会很正常
满足ififif条件就执行iii的循环
否则执行jjj的循环

if( ... )for( int i = 1;i <= n;i ++ )...
elsefor( int j = 1;j <= n;j ++ )...	

在这里插入图片描述
但是当我们在循环里面再次嵌套条件语句的时候,此时就问题大大滴了!!
if−else用法if-else用法ifelse
我们要了解if−elseif-elseifelse的运行原则,elseelseelse在不加{}\{\}{}强制区分的时候,是默认否定离它最近的ififif情况

也就是说,在错误写法中,elseelseelse否定的是forforfor循环里面的ififif条件

if−elseif-elseifelse是算一条语句的,嵌套在循环里面时,就可以不用打括号

for( int i = 1;i <= n;i ++ )if( ... ) ...else ...
//上面写法等价于下面的写法
//如果if,else里面有多条语句的时候
//注意要打括号,不然if-else会被中断,出现CE 
for( int i = 1;i <= n;i ++ ) {if( ... ) ...else ...
} 

if−elseif-elseifelse是一条语句,所以中间是不能被其它非if−elseif-elseifelse语句打断

for( int i = 1;i <= n;i ++ )if( ... ) ...n = n + 1;else ...
//这个时候会if-else编译报错,并且提醒我们缺少大括号

往往题目的情况不止简简单单的两种,这个时候我们一样处理

for( int i = 1;i <= n;i ++ ) if( ... ) ...else if( ... ) ...else if( ... ) ...else ...
//两种写法是等价的
for( int i = 1;i <= n;i ++ )if( ... )else if( ... ) ...else if( ... ) ...else ... 

综上,总结一下:
我们的缩进只是为了代码可观,逻辑清晰易懂
但是程序运行有自己严格的规则,并不是智能AI
程序并不会按照我们的缩进,智能分类匹配if−elseif-elseifelse

在这里插入图片描述


PS:此问题出自蒟蒻博主,例题“zamjena”,当时调了好几天,自己也发现了加括号和不加括号会有答案的区别,但是当时没有意识到本质的原因是什么
在这里插入图片描述

博主自我反思:
有的时候觉得if-else很简洁,而且我自己不太喜欢打大括号,从而可以缩减代码行数
现在细想来觉得还是应该从严谨逻辑的角度出发,还是打个大括号,避免这种分歧


菜品特套3:int范围边界的1ll使用

✔✔

long long n = 1ll << 31 - 1;
//运行结果:2147483647

❌❌

long long n = 1 << 31 - 1;

食用说明书食用说明书

有符号整型int:232int:2^{32}int232,占用4字节,32bit
然而取值范围[−231,231−1][-2^{31},2^{31}-1][231,2311]
无符号整数unsigned_intunsigned\_intunsigned_int取值范围就可以达到[0,232−1][0,2^{32}-1][0,2321]

C++计算的时候是默认intintint类型,也就是说如果我们不强调1ll1ll1ll111就只申请了intintint类型

我们可能会以为:我左边储存答案的变量开了longlonglong\ longlong long啊,这不存的下嘛
在这里插入图片描述
其实不然,可以理解为是右边每个计算部分存好后再统一进行操作
然后放到左边变量里面,并不是直接在左边变量里面操作

延伸拓展👇

请看接下来的两种操作写法

int A, B;
long long n = A + B;
long long A;
int B;
long long n = A + B;

A,BA,BA,B赋值214748364721474836472147483647
会发现第一种写法溢出了,而第二种写法算出了正确答案
这是因为A+BA+BA+B暂时将结果存在了AAA里面,然后再像赋值一样赋给nnn
可以试试A:int,B:longlongA:int,B:long\ longA:int,B:long long也是一样的
而第一种写法AAAintintint类型的,显然存不下,所以就爆出去了
在这里插入图片描述
解决方法有两种
第一个就是像第二种写法一样直接把变量开成longlonglong\ longlong long
第二种就是计算时乘以1ll1ll1ll,一般习惯在第一个变量前面加,这样右边整个答案只要在longlonglong\ longlong long范围内都可以存储

int A, B;
long long n = 1ll * A + B;

泼水不收

long long n = ( 1 << 30 ) + ( 1 << 30 ) - 1;
long long n = ( 1 << 30 ) + 3 - ( 1 << 30 ) - 4;
...
long long n = ( 1 << 30 ) + x - ( 1 << 30 ) - ( x + 1 );
//可以试试这种写法
//x不要带得太大
//发现这种写法一样可以

这是为什么呢??留给dalao们,蒟蒻不懂
在这里插入图片描述


蒟蒻bb:
初学C++,学了很多算法
但是对这种知识真的是了解很少,不懂计算机的运算法则
所以经常会在各种歪歪扭扭的角(ka)角(ka)落(guo)落(guo)到处爆掉
在这里插入图片描述
PS
Upd–>2020-06-11
老刘好SB哈哈哈哈,写FWT板题(f[k]+f[k+p]+mod)(f[k]+f[k+p]+mod)%mod(f[k]+f[k+p]+mod)
还不知道为什么错了,要是f[k]=f[k+p]=mod−1f[k]=f[k+p]=mod-1f[k]=f[k+p]=mod1
三个加一起就爆intintint了呀,我看了一眼就发现了哈哈哈哈哈
在这里插入图片描述


菜品特套4:内存计算

在这里插入图片描述
FMTFMTFMT州区划分,给爷调崩了,一直RERERE,我都以为是被针对了!!
在这里插入图片描述
✔✔

long long dp[23][1 << 22], g[23][1 << 22], inv[1 << 22];

❌❌

long long dp[23][1 << 21], g[23][1 << 21], inv[1 << 21];

食用说明书食用说明书

1GB=1024MB=1024∗1024KB=1024∗1024∗1024B(byte字节)1GB=1024MB=1024*1024KB=1024*1024*1024B(byte 字节)1GB=1024MB=10241024KB=102410241024B(byte)

C++
intintint类型每个空间是444个字节
longlonglong\ longlong long888个字节
boolboolbool类型是111个字节

数组占用内存的计算
①:a[x][y]a[x][y]a[x][y]的空间大小=x∗y=x*y=xy(数组大小)∗4*44(转化为ByteByteByte/1024/1024/1024(转化为KBKBKB/1024/1024/1024(转化为MBMBMB
②:直接用sizeof(a)sizeof(a)sizeof(a),这样算出来的空间占存的单位是byte

看到这里的时候就已经明白自己是如何死得死翘翘的了
就以RERERE的数组大小来举栗计算
23∗(1<<22)=96468992∗4(B)/1024=376832(KB)/1024=368MB23*(1<<22)=96468992*4(B)/1024=376832(KB)/1024=368MB23(1<<22)=964689924(B)/1024=376832(KB)/1024=368MB
按照intintint的字节数来计算就已经如此之大,更何况开的是longlonglong\ longlong long,内存算出来就要×2×2×2
在这里插入图片描述


涉及内存的一般都是卡你数据结构啊,或者状压dpdpdp
我认为学习C++还是有必要掌握这么基本的内存计算方法,因为编译器的不同对数组的最大忍受也不同,可能编译能过,但是交上去跑出来是RE,这个时候调起来就会很崩溃...


菜品特套5:全局变量和局部变量的重复

✔✔

#include <cstdio>
int n;void calc() {for( int i = 1;i <= n;i ++ )...
}int main() {n = ...return 0;
}

❌❌

#include <cstdio>
int n;void calc() {for( int i = 1;i <= n;i ++ )...
}int main() {int n = ...return 0;
}

食用说明书食用说明书
太智障了,这个坑,一点都不想说fa
做的FMT遗失的答案掉的坑,凸(艹皿艹 )
在这里插入图片描述

局部变量只在局部内有值
全局变量适用于全局

局部内可以正确调用局部变量
局部外的其他版块一旦涉及到该变量,默认调用全局
一言以蔽之:局部内优先调用局部内的变量,次调用全局变量

所以错误写法中calccalccalc版块的nnn其实是等于0的,该forforfor循环根本未被执行
报告完毕!
在这里插入图片描述


菜品特套6:顺序结构&& ||前后顺序

✔✔

bool vis[n + 5];
while( x <= n && vis[x] ) x += y;

❌❌

bool vis[n + 5];
while( vis[x] && x <= n ) x += y;

食用说明书食用说明书
顺序结构大师上线
在我初学C++的时候就曾经犯过这个问题,没想到时隔多年再次煞笔
在这里插入图片描述

&&∣∣\&\&\ ||&& 连接的顺序结构
一连串的条件限制,程序默认从左往右顺次判定

所以在错误写法中,极有可能vis[x]vis[x]vis[x]就已经炸出visvisvis的范围了,看都没看后面的条件限制
最终导致程序死亡
在这里插入图片描述


菜品特套7:scanf(“%s”)与换行符的爱恨情仇

爷爷/奶奶你追的博客,关注的大大更新了
因为真的被玄学到了,所以单独开了一篇blog来写
这里直接上链接吧
五星菜品⑦


菜品特套8:break

原料来自于此blog题解的第二题
这里不谈正解,只考虑用mapmapmap暴力搞的写法 因为我考场就是纯map
✔✔

for( int i = 1, x;i <= m;i ++ ) {scanf( "%d", &x );long long ans = 0;bool no = 0;for( int j = 1;j <= x;j ++ ) {cin >> s;if( mp[s] ) ans += mp[s];else no = 1;}if( no ) printf( "-1\n" );else printf( "%lld\n", ans );
}

❌❌

for( int i = 1, x;i <= m;i ++ ) {scanf( "%d", &x );long long ans = 0;bool no = 0;for( int j = 1;j <= x;j ++ ) {cin >> s;if( mp[s] ) ans += mp[s];else { no = 1; break; }}if( no ) printf( "-1\n" );else printf( "%lld\n", ans );
}

食用说明书食用说明书
想必dalao看一眼就知道咋回事了
没错

breakbreakbreak:结束当前循环
continue:continue:continue:结束当前情况,并不结束当前循环

举个栗子

for( int i = 1;i <= n;i ++ )if( i & 1 ) break;
for( int i = 1;i <= n;i ++ )if( i & 1 ) continue;

breakbreakbreaki=1i=1i=1就直接结束循环了,所以时间复杂度只有111
continuecontinuecontinueiii还是会把nnn以内的数都遍历一遍,时间复杂度仍为O(n)O(n)O(n)

再多说几句,break,continue...break,continue...break,continue...这种语句,跟其他语句混用必须打大括号,不认逗号

如果每一条语句之间都是逗号
计算机会一直读,默认到最后分号出现的位置为一整条语句
所以就不用打大括号

但套上这种专有语句后,就不行了 我也不造为什么
在这里插入图片描述

举个栗子

for( int i = 1;i <= n;i ++ )if( i & 1 ) ans ++, p[++ cnt] = i;

for( int i = 1;i <= n;i ++ )if( i & 1 ) { ans ++, p[++ cnt] = i; continue; }

for( int i = 1;i <= n;i ++ )if( i & 1 ) ans ++, p[++ cnt] = i, continue;

在这里插入图片描述
转回正题

因为我边读入边线性求解,发现是穷人后就直接breakbreakbreak,导致当前组数据压根没读完
再加之这道题是多组数据,被我中间插断的数据就被我的计算机读入成为下一组数据了
在这里插入图片描述


菜品特套9:,;的差距

我以为许久不更新以后就不会写sb锅了

✔✔

#include <cstdio>
void solve( int x ) {printf( "%d\n", x );
}
int main() {int cnt = 1;int pre = ++ cnt; solve( cnt );printf( "%d", pre );return 0;
}
/*
输出:
2
2
*/

❌❌

#include <cstdio>
void solve( int x ) {printf( "%d\n", x );
}
int main() {int cnt = 1;int pre = ++ cnt, solve( cnt );printf( "%d", pre );return 0;
}/*
输出:
2
*/

食用说明书食用说明书
在这里插入图片描述
可能似个人就看出来了,错误写法中intintint变量名的定义和函数调用中间用的逗号连接
之前也不是没犯过因为逗号死掉的问题,这次又中了
逗号连接的在计算机里的默认是一句话
所以计算机将我的函数调用理解为了int solve(cnt),然后。。。。p都没干

菜品特套10:STL的map/set

setsetset:自动去重——解决方法,重载排序
mapmapmap:本质也是一个排序的,不然为什么会有unorderd_map??
所以如果传入的下标是多个元素,必须重载排序,才能编译成功
并且每一个元素都要参与排序
比如(1,2,3)(1,2,3)(1,2,3)(1,2,4)(1,2,4)(1,2,4)
只比较前两位参与排序,那么setsetset自动去重了只留下一个,mapmapmap则判断两者为一样的
在这里插入图片描述

灰常感谢香香mm的倾情赞助,真是让吾辈受益匪浅呢!!%%%%

菜品特套11:C++的执行顺序

前言:是在最近做的线段树优化建图时碰到的

addedge( u, ++ cnt );
addedge( cnt, ++ cnt );
addedge( v, cnt );

这三条语句写者的想法是,uuucntcntcnt点连边,然后cntcntcnt++cnt++cnt++cntcntcntcnt先自加111)连边,vvvcnt+1cnt+1cnt+1连边

e.g. cnt=1cnt=1cnt=1uuu111连边,111222连边,vvv222连边

在这里插入图片描述你就可以发现Dev-c++被卡RE了

因为

c++一条语句其实是从右往左读的

也就是说在第二条加边语句中,是先cnt++cnt++cnt++cntcntcntcntcntcnt连边

这就连出了自环的无限循环了

所以必须这么写

addedge( u, ++ cnt );
addedge( cnt, cnt + 1 );
addedge( v, ++ cnt );

这也能说明,有的时候我们会像下面这么连续赋值

int a, b, c, d;
a = b = c = d = 419;

先执行d=419,然后c=d,接着b=c,最后a=b,成功赋值四个变量

菜品特套12:顺次处理字符读入

最近都有碰到字符串读入的处理

众所周知,只有空格和换行是非常头疼的

而且现在随着版本的更新,gets()已经不允许使用了(但是它的功能真的很舒服啊,可以读入空格和换行,哎),可以试试fgets(),但建议还是别了吧

一般读入字符串的方法如下

  • 一个一个字符地读,ch=getchar()scanf("%c",&ch)
    好处自然是可以通过条件语句判断空格和换行,做出相应举措
  • 一个字符串一个字符串地读,scanf("%s",s)cin>>s
    但都是遇到空格或者换行就直接结束了,便于我们直接处理不要空格和换行的题目

但是博主最近的问题是,需要空格和换行,那么就选择了一个一个字符地读

结果总是忘记最后一个字符串是留下来未操作的,因为后面是空,不能触发处理一个字符串的结束条件

经常最后一个字符串被遗忘,导致出错丢分


菜品特套13:传地址的动态开点

最近做了两道题,是需要可持久化字典树的。

而可持久化标准需要动态开点,所以大家都习惯于直接把数组的地址传过去,这样就直接改了数组。

但是字典树的可持久化就不要传了。

void insert( int lst, int &now, char s ) {now = ++ cnt; t[now] = t[lst];for( int i = 1;i <= n;i ++ ) {int c = s[i] - 'a';t[now].son[c] = ++ cnt;now = t[now].son[c];lst = t[lst].son[c];t[now] = t[lst];}
}
insert( root[i - 1], root[i], s[i] );

受到可持久化字典树的影响实在太大了。

上面的写法完全是错误的,因为 nownownow 从始至终都带的是地址,所以看似我们走了 nownownow 的儿子边,但是其实一直都是 root[i]root[i]root[i] 的编号在自加。

只有 lstlstlst 版本的字典树一直在正确的走。

所以字典树的就不要传地址了,直接改原数组得了。

void insert( int lst, int now, char s ) {root[now] = ++ cnt; now = root[now];lst = root[lst];t[now] = t[lst];for( int i = 1;i <= n;i ++ ) {int c = s[i] - 'a';t[now].son[c] = ++ cnt;now = t[now].son[c];lst = t[lst].son[c];t[now] = t[lst];}
}
insert( i - 1, i, s[i] );

菜品特套14:异或判断相等的偷懒

因为本人的码风和个人喜好问题,比起来 != 我更喜欢 ^ 而且少占一个字符。

众所周知 x^x=0,所以我很喜欢,if(a^b) ... 这种写法。

这倒是没什么问题,因为 if-else 这种判断句又是 bool\text{bool}bool 类的,只认 0/10/10/1

但是写多了就以为本身运算就是个 0/10/10/1 的返回。

比如我的本意是如果 x≠yx\ne yx=y+1+1+1,否则 +0+0+0

写代码就容易写成 ans+=(x^y)

这简直就是大错特错!现在的 x^y 明显是个运算了,而不是 [x^y] 的条件判断。

不如老老实实写 != ,因为这个真的很难调,思维进入一个误区跳出来很困难的欸。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FFT的多种应用

参考文章 FFT可以在nlogn的时间内实现n次多项式F(x)和m次多项式G(x)的卷积 ck∑ijkaibj∑i0kaibk−ic_{k}\sum_{ijk}a_{i}b_{j}\sum_{i0}^{k}a_{i}b_{k-i}ck​∑ijk​ai​bj​∑i0k​ai​bk−i​ 基本形式&#xff1a; 对于类似&#xff1a;∑ijNkaibj\sum_{ijNk}a_{i}b_{j}∑…

ASP.NET Core 使用 Google 验证码(Google reCAPTCHA)

关心最多的问题&#xff0c;不FQ能不能用&#xff0c;答案是能。Google官方提供额外的域名来提供服务&#xff0c;国内可以正常使用。一. 前言验证码在我们实际的生活场景中非常常见&#xff0c;可以防止恶意破解密码、刷票、论坛灌水、刷注册等等。现在的网站基本都有使用验证…

P4173 残缺的字符串

P4173 残缺的字符串 题意&#xff1a; 有A&#xff0c;B两个串&#xff0c;每个串都有通配符&#xff0c;问A为模板串&#xff0c;对于 B 的每一个位置 i&#xff0c;从这个位置开始连续 m 个字符形成的子串是否可能与 A 串完全匹配&#xff1f; 题解&#xff1a; 我们定义…

FFT/NTT卷积神级副本

干货满满的良心博客传送至只有小怪的村庄——请开始你的逆天之路A&#xff1a;P1919B&#xff1a;P4157刷怪升级——转战玄灵大陆C&#xff1a;P6300D&#xff1a;P3763E&#xff1a;P3321F&#xff1a;P5641G&#xff1a;P4986H&#xff1a;P4721——获得知识药剂一瓶——分治…

程会玩 | 在.NET Core里操作Git

点击上方蓝字关注“汪宇杰博客”Git是很多程序员的首选源代码版本控制工具&#xff0c;我最近也从TFVC切换到了Git&#xff0c;受益匪浅。今天我就来带大家看看如何在.NET Core里操作Git。为啥要这么做首先&#xff0c;这件事情的意义&#xff0c;并不是闲的蛋疼。我们确实有很…

Knowledge Test about Match

Knowledge Test about Match 题意&#xff1a; 给你一个B数组&#xff0c;要求你去匹配A数组[0&#xff0c;N-1]&#xff0c;计算公式f(a,b)∑i0n−1∣ai−bi∣f(a,b)\sum_{i0}^{n-1}\sqrt{|a_{i}-b_{i}|}f(a,b)∑i0n−1​∣ai​−bi​∣​,使得结果尽量小。最终结果与标准结…

一个实时收集MySql变更记录的组件CanalSharp.AspNetCore

一、关于CanalSharpCanalSharp 是阿里巴巴开源项目 Canal 的 .NET 客户端。为 .NET 开发者提供一个更友好的使用 Canal 的方式。Canal 是mysql数据库binlog的增量订阅&消费组件。CanalSharp 是 Canal 的 .NET 客户端&#xff0c;它与 Canal 是采用的Socket来进行通信的&…

Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine))

Codeforces Round #740 (Div. 2, based on VK Cup 2021 - Final (Engine)) 题号题目知识点ASimply Strange Sort暴力BCharmed by the GameCDeep Down BelowD1Up the Strip (simplified version)D2Up the StripEBottom-Tier ReversalsFTop-Notch Insertions A 直接暴力就行&am…

[Abp vNext 源码分析] - 1. 框架启动流程分析

一、简要说明本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程&#xff0c;让大家了解整个 Abp vNext 框架是如何运作的。总的来说 &#xff0c;Abp vNext 比起 ABP 框架更加精简。因为在 vNext 版本当中&#xff0c;原来归属于 Abp 库的许多内置的基本组件 (组织…

cf1561B. Charmed by the Game

cf1561B. Charmed by the Game 题意&#xff1a; 两人轮流发球&#xff0c;有两种得分的情况&#xff0c;一个是自己发球的回合得分&#xff0c;叫做"holds"&#xff0c;另一种是在对方发球的回合得分&#xff0c;叫做"breaks"&#xff0c;现在给出比赛结…

使用 MSIX 打包 DotNetCore 3.0 客户端程序

如何你希望你的 WPF 程序能够以 Windows 的保护机制保护起来&#xff0c;不被轻易反编译的话&#xff0c;那么这篇文章应该能帮到你。介绍MSIX 是微软于去年的 Windows 开发者日峰会 上推出的全新应用打包解决方案。其目的是取代旧式的软件打包方式&#xff0c;可用于 Win32、W…

cf1561C. Deep Down Below

cf1561C. Deep Down Below 题意&#xff1a; 有个英雄&#xff0c;英雄有自己的力量值&#xff0c;有n个洞穴&#xff0c;每个洞穴有ki个怪物&#xff0c;每个怪物有自己的血量&#xff0c;当你力量值大于怪物血量&#xff0c;你就杀死他&#xff0c;否则你就失败&#xff0c…

使用 C# 和 Blazor 进行全栈开发

Blazor 是将 C# 引入浏览器的 Microsoft 试验框架&#xff0c;正好可以填补欠缺的 C# 一环。如今&#xff0c;C# 程序员可以编写桌面、服务器端 Web、云、电话、平板电脑、手表、电视和 IoT 应用程序。Blazor 填补了欠缺的一环&#xff0c;C# 开发人员现在可以直接在用户浏览器…

AWS vs K8s 是新的 Windows vs Linux

作者&#xff1a;Ian Miell是开源程序员、演讲师、作家和博客写手以前……如果你与我一样&#xff0c;年过四十&#xff0c;又在IT行业工作&#xff0c;恐怕还记得每个人使用Windows&#xff0c;一小群但越来越多的人在业余时间埋头编译Linux的年代。Windows用户见此情形会困惑…

cf1561D Up the Strip(D1D2)

cf1561D Up the Strip(D1&&D2) 题意&#xff1a; 一个长度为n的赛道&#xff0c;一开始在n的位置&#xff0c;你要前往到1&#xff0c;每次移动你有两种方式&#xff1a; 在1和x-1之间选择一个整数y&#xff0c;并从位置x移动到位置x-y在2和x之间选择一个整数z&…

Asp.Net Core中的静态文件-12

目录本文出自《从零开始学 ASP.NET CORE MVC》目录 推荐文章&#xff1a;配置 ASP.NET Core 请求(Request)处理管道Asp.Net Core 中的静态文件在这个视频中我们将讨论如何使 ASP.NET Core 应用程序&#xff0c;支持静态文件&#xff0c;如 HTML&#xff0c;图像&#xff0c;CSS…

2018 ICPC Asia Jakarta Regional Contest

2018 ICPC Asia Jakarta Regional Contest 题号题目知识点难度AEdit DistanceBRotating GearCSmart ThiefDIcy LandEArtilleries and Defensive WallsFPopping BalloonsGGo Make It CompleteHLexical Sign SequenceILie DetectorJFuture GenerationKBoomerangsLBinary String

在.net core 中PetaPoco结合EntityFrameworkCore使用codefirst方法进行开发

在.net core开发过程中&#xff0c;使用最多的就是注入方法。但是在.net core使用PetaPoco时&#xff0c;PetaPoco还不支持进行注入方式进行处理一些问题。今天对PetaPoco进行了一些扩展&#xff0c;可以很方便的将PetaPoco进行注入操作&#xff0c;使用和EF很相似&#xff0c;…

F-Pairwise Modulo

d数组是来算&#xff08;x整除y&#xff09;*y中y比x小的数 s数组是算&#xff08;x整除y&#xff09;*y中y比x大的数 &#xff08;x整除y&#xff09;*y 看x对于前面大于他的数是枚举&#xff0c;对于前面小于他的数是d树状数组储存。 d中 x整除y表示x中有多少个y 所以 …

2020 ICPC NAC

2020 ICPC NAC 题号题目知识点难度AAnother Coin Weighing PuzzleBMini BattleshipCBomasDAll KillEGrid GuardianFHopscotch 50GICPC CampHLetter WheelsIEditing ExplosionJLunchtime Name RecallKRooted SubtreesLTomb Raider