【错题记录】——常见错误(长期更新)


记录一些自己做题过程中由于考虑不全面出现的各种奇怪的问题

2021中国大学生程序设计竞赛(CCPC)- 网络选拔赛(重赛)1006 动态规划+组合数

博客地址2021中国大学生程序设计竞赛(CCPC)- 网络选拔赛(重赛)
取模得时候有减法但是没有加MOD导致错误。。

CodeForce Deltix Round, Summer 2021 C. Compressed Bracket Sequence 思维 序列 模拟

博客地址【题目记录】——CodeForce Deltix Round, Summer 2021

codeForce 思维

Codeforces Round #743 (Div. 2) B. Swaps 思维

codeForces 字符串

题目地址CodeForces B Reverse string
题意:给一个字符串s,从s的一个位置开始向右走任意(可以是0)个字符,每到达一个位置,就将当前位置的字符记录下来,初始位置字符也要记录,然后向左走任意个字符,记录字符,问是否能生成t字符串,能输出yes,否则输出no
思路:先判断t是不是本身就是s的子串,t的逆序是不是s的子串,然后找到t的一个位置左右两端的字符都相同,一直到整个字符的最左端或者最右端,因为在s中是先往右然后往左,必然有一个位置两侧的字符串是对称的,找到对称点,根据对称点的左右两端的长短决定s的子串应该是t从左侧开始到对称点位置,还是从右侧开始到对称位置。
错误:
1.t的逆序是s的子串的情况没有想到
2.编码过程中的问题

#include <bits/stdc++.h>
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;

void solve()
{
    string s, t, tt="";
    cin >> s >> t;
    int p = 0;
    if(s.size()==1)
    {
        if(s==t)
            printf("YES\n");
        else
            printf("NO\n");
        return;
    }
    if(s.find(t,0)!=-1)//t是s的子串
    {
        printf("YES\n");
        return;
    }
    for(int i = t.size()-1;i >=0 ;i--)
    {
        tt+=t[i];
    }
    if(s.find(tt,0)!=-1)//t的逆向是s的子串
    {
        printf("YES\n");
        return;
    }

    for(int i = 1;i < t.size()-1;i++)
    {
        tt = "";//有一次错误是因为每次循环的开始没有清空tt字符串
        int flag = 0;
        if(t[i+1]==t[i-1])
        {
            flag = 1;
            for(int j = 1;i+j<t.size()&&i-j>=0;j++)
            {
                if(t[i+j]!=t[i-j])
                {
                    flag = 0;
                    break;
                }
            }
        }
        if(flag)
        {
            if(i<t.size()/2)
            {
                for(int j = 1;t.size()-j>=i;j++)
                {
                    tt += t[t.size()-j];
                }
                if(s.find(tt,0)!=-1)
                {
                    printf("YES\n");
                    return;
                }
            }
            else
            {
                tt = t.substr(0,i+1);
                if(s.find(tt,0)!=-1)
                {
                    printf("YES\n");
                    return;
                }
            }
        }
    }
    printf("NO\n");
    return;
}
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		solve();
	}
    return 0;
}

使用不同的数据类型

使用不同的数据类型时要注意保证前后数据类型一致,否则可能会发生溢出或者是精度损失。
比如需要使用longlong类型的数据时,还有使用java的大数时。

取余运算

取余运算在做减法的时候,为防止有负数出现需要先加一个mod值,然后在做减法。
取余做除法的时候,要乘一个数的逆元。
取余的数据做乘法时每乘一次都要进行一次取余运算。
错题【题目记录】——ICPC大连2016中F题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值