1038F - Wrap Around - CodeForces Solution


dp strings *2900

Please click on ads to support us..

C++ Code:

// LUOGU_RID: 91728575
#include<cstdio>
#include<cstring>
int n,m,g[45];
char st[45];
long long dp[45][45][2],ans=0;
int main()
{
scanf("%d",&n);
scanf("%s",st+1);
m=std::strlen(st+1);
for (int i=1;i<=m;i++)
{
int flag=1,x=1,y=i;
while (y<=m){if (st[x]!=st[y]) flag=0;++x,++y;}
g[i-1]=flag;
}
dp[1][1][1]=1;
for (int i=2;i<=n;i++)
for (int x=1;x<i;x++)
for (int o=0;o<=1;o++)
{
if ((i-x>=m||g[i-x])&&(n+1-i>=m||g[n+1-i])) dp[i][i][1-o]=dp[i][i][1-o]+dp[i-1][x][o];
dp[i][x][o]=dp[i][x][o]+(1+(x+m<=i))*dp[i-1][x][o];
}
for (int x=1;x<=n;x++) ans=ans+(dp[n][x][1]-dp[n][x][0])*(n+1-x);
printf("%lld\n",ans);
return 0;
}


Comments

Submit
0 Comments
More Questions

162. Find Peak Element
1529A - Eshag Loves Big Arrays
19. Remove Nth Node From End of List
925. Long Pressed Name
1051. Height Checker
695. Max Area of Island
402. Remove K Digits
97. Interleaving String
543. Diameter of Binary Tree
124. Binary Tree Maximum Path Sum
1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts
501A - Contest
160A- Twins
752. Open the Lock
1535A - Fair Playoff
1538F - Interesting Function
1920. Build Array from Permutation
494. Target Sum
797. All Paths From Source to Target
1547B - Alphabetical Strings
1550A - Find The Array
118B - Present from Lena
27A - Next Test
785. Is Graph Bipartite
90. Subsets II
1560A - Dislike of Threes
36. Valid Sudoku
557. Reverse Words in a String III
566. Reshape the Matrix
167. Two Sum II - Input array is sorted