文章目录
记录一些自己做题过程中由于考虑不全面出现的各种奇怪的问题
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题