开学第七周总结

这周的话由于从线上改为线下教学,时间的分配不如原来那么充足。所以也调整了一下自己的学习计划。这周的话是这样安排的:如果有大块的时间(比如每天晚上或者是有空课的时候)就做一做洛谷上的搜索题,如果比较零碎的时间,就看一看思维题。

先说搜索:

1.​​​​​​[COCI2019-2020#1] Lutrija - 洛谷

这个题首先是对素数的理解:如果两个数都是素数,那么有两种情况:一奇一偶或者是两个奇数。

如果是两个奇数的情况:由于题目要求两数之差为素数,而两个奇数之差为偶数,所以只能为2。

如果是一奇一偶的情况:其中偶数必定为2。综上,要找的素数仅可能在所给素数a的[a-2,a+2]中。

对于搜索的设定:对于两个奇数的情况:可以对2,a-2,a+2每种可能作为下一层搜索的一种方案来进行递归。对于一奇一偶的情况:如果两者之差为素数,则可以直接输出。如果两者之差不是素数,只能判断结果+2的情况。

2.[USACO06FEB]Backward Digit Sums G/S - 洛谷

这个题涉及到了杨辉三角的一些结论:

以下为代码实现:

pc[0]=pc[n-1]=1
 if (n>1)
        for (int i=1;i*2<n;i++)
            pc[i]=pc[n-1-i]=(n-i)*pc[i-1]/i;

 这个题我一开始的构想是设计一个类似于数组传地址的递归,但后来看完题解后发现不用。只需要设计三个指数:已经枚举的数量,当前值,当前和。如果满足题意的话,只需要用一个数组记录当前值就可以,而不需要把它当做一个整体去进行递归。如果枚举当前和的大小已经大于所给值,则可以直接剪枝。

再说思维:

1.C. 她的名字 - EOJ Monthly 2018.12 - ECNU Online Judge

这个题也和杨辉三角有关,用了另一个结论:C_n^m=C_{n-1}^{m}+C_{n-1}^{m-1}

以下为代码实现(也即本题的预处理部分):

for(int i=0;i<=2000;i++){
    c[i][0]=1;
}

for(int i=1;i<=2000;i++){
    for(int j=1;j<=i;j++){
        c[i][j]=(c[i-1][j]%mod+c[i-1][j-1]%mod)%mod;
    }
}}

这个题可以直接从00-99暴力枚举出所有可能结果,以下为核心代码还有我写的注释:
for(int i=0;i<=9;i++)
for(int j=0;j<=9;j++){
    ll cnt=0;
    for(int k=len-1;k>=0;k--){
        if(s[k]=='0'+j){
            cnt++;
        }
        if(s[k]=='0'+i){
            for(int l=2;l<=k+2;l++){
                if(i==j)
                    ans[l][i*10+j]=(ans[l][i*10+j]+(c[cnt-1][1]*c[k][l-2]%mod)%mod);//因为选定结尾,所以从后往前遍历。在当前值后面在cnt中选一个(c[cnt-1][1]),当前值(*1),在当前值前随便选一个(c[k][l-2])

else ans[l][i*10+j]=(ans[l][i*10+j]+(c[cnt][1]*c[k][l-2]%mod)%mod);
            }
        }
    }}

2.Problem - 1040B - Codeforces

这个题的思路很有意思:首先让第一个翻面,再让每隔2*k个翻面一次,由于第一个烤串已经翻了k个,所以剩下还没有翻过的一定小于或等于k。这样的话如果没有正好最大程度翻面的话,翻面的总数加一即可,而第一个翻面的点可以这样选择(n%(2*k+1))/2+1,每次加2*k+1;

3.Problem - C - Codeforces

这个题涉及到位运算的一些知识:

&:相同位的两个数字都为1,则为1;若有一个不为1,则为0;

|:相同位只要一个为1即为1;

假设答案为A,这个题可以暴力枚举0-2^9-1,是否对于每个i,都存在j,使得(ai&bj)|A=A;

4.Problem - 1284B - Codeforces

这个题很巧妙的是创建了两个vector,一个记录序列最大值,一个记录序列最小值。只需要给最大值排序,遍历最小值数组。对于每一个最小值,在最大值数组里面找值,如果最小值<最大值(可以用upper_bound来实现),答案即为当前最大值的位置到末尾有多少个数累加起来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些开学季需要注意的事项: 1. 确认开学日期和时间:在开学前几,学校会发布详细的开学日期和时间表,以及其他开学事项的通知。确保你已经掌握了这些信息,并准备好按时到达学校。 2. 购买所需的学习用品:检查你的课程清单,并购买所需的学习用品,例如教科书、笔记本电脑、文具、计算器等。如果你不确定需要什么,可以联系学校的教务办公室或你的导师。 3. 组织时间表:在开学前,制定一份时间表来规划你的时间。考虑到你的课程、作业、考试和其他活动,制定一个有序的计划,以确保你能够充分利用你的时间,并且不会漏掉重要的事项。 4. 认识新同学和教授:尝试认识你的新同学和教授。这将有助于你更好地融入学术和社交环境,并建立重要的联系。可以参加学校组织的新生活动或社交活动,或者在课堂上主动与同学和教授交流。 5. 确保有足够的资金:开学季通常需要购买一些必需品和支付学费。确保你有足够的资金来支付这些费用。如果你需要申请贷款或奖学金,尽早准备申请材料,以免延误。 6. 维护健康:开学季通常是疾病传播的高峰期。采取适当的预防措施,如勤洗手、戴口罩、保持社交距离等,以保护自己和他人的健康。 7. 调整心态:学术压力和适应新环境可能会让人感到焦虑和不安。记住,你不是唯一一个有这种感受的人。尝试放松自己,参加体育运动、社交活动或其他活动,以缓解压力。如果你需要帮助,学校通常提供心理健康服务,你可以咨询专业人士。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值