2017 Multi-University Training Contest - Team 6 1008 Kirinriki【思维题 + 尺取】
2017-08-11 16:18
519 查看
传送门
//题意: 在给定的一个串中找出两个不重叠且长度相等的两个子串, 并这连两个串的dis要小于所给的那个数.
dis为题目中的定义.
//思路:由于不确定性, 所以我们可以采取枚举的方法. 因为连个串的长度是相等的, 两个串往中心延展, 一定会形成一个对称轴. 所以我们就可以采取枚举对称轴的方法来做. 枚举每一个前缀,用尺取的方法取两个区间, 而我们可以发现每一个前缀它的对称轴都是靠左的, 那么有一些串我们就枚举不到. 所以我们反着在枚举一次, 即枚举每一个后缀. 这样就可以把每一种答案就枚举出来. 关键在于尺取的双指针的移动.
AC Code
//题意: 在给定的一个串中找出两个不重叠且长度相等的两个子串, 并这连两个串的dis要小于所给的那个数.
dis为题目中的定义.
//思路:由于不确定性, 所以我们可以采取枚举的方法. 因为连个串的长度是相等的, 两个串往中心延展, 一定会形成一个对称轴. 所以我们就可以采取枚举对称轴的方法来做. 枚举每一个前缀,用尺取的方法取两个区间, 而我们可以发现每一个前缀它的对称轴都是靠左的, 那么有一些串我们就枚举不到. 所以我们反着在枚举一次, 即枚举每一个后缀. 这样就可以把每一种答案就枚举出来. 关键在于尺取的双指针的移动.
AC Code
const int maxn=5e3+5; char a[maxn]; int m,res; void cal(int n) { for(int i=2;i<=n;i++){ int p = i/2,l=0,cnt=0,sum=0; for(int j=0;j<p;j++){ sum += abs(a[j] - a[i-1-j]); // 从两边往里缩进 if(sum <= m) cnt++,res = max(res,cnt); else{ sum -= abs(a[l] - a[i-l-1]); sum -= abs(a[j] - a[i-j-1]); //再把当前的再减一次,是因为此时j会移动 //然后又是原先的操作,所以此时保存的子串就是我们第二次算的子串. //这里有点难理解,多打点东西出来就可以了. l++; cnt--; j--; //一直到满足条件在缩进 } } } } void solve() { scanf("%d",&m); scanf("%s",a); res = 0; int len = strlen(a); cal(len); reverse(a,a+len); cal(len); printf("%d\n",res); }
相关文章推荐
- 2017 Multi-University Training Contest - Team 6 1008 Kirinriki
- 2017 Multi-University Training Contest - Team 6 HDU 6103 Kirinriki (尺取法)
- 2017 Multi-University Training Contest - Team 6 Kirinriki
- 2017 Multi-University Training Contest - Team 6 Kirinriki
- HDU-6103 Kirinriki - 2017 Multi-University Training Contest - Team 6(尺取)
- 2017 Multi-University Training Contest - Team 5 1008 【思维 + 01背包思想】
- 2017 Multi-University Training Contest - Team 6:1008&hdu6103、Kirinriki
- 【2017 Multi-University Training Contest - Team 6】Kirinriki
- 2017 Multi-University Training Contest - Team 6: Kirinriki
- 2017 Multi-University Training Contest - Team 3 1005 RXD and dividing 【思维 + 贪心】
- 2017 Multi-University Training Contest - Team 7:1008. Hard challenge(模拟)
- HDU-6140 Killer Names - 2017 Multi-University Training Contest - Team 8(思维)
- HDU 6055 Regular polygon(计算几何+思维)——2017 Multi-University Training Contest - Team 2
- 2017 Multi-University Training Contest - Team 1 1009 I Curse Myself 【思维 + 仙人掌图】
- 2017 Multi-University Training Contest - Team 1 1006 Function(思维 循环节)
- 2017 Multi-University Training Contest - Team 1 B - Balala Power! (思维代码能力,贪心)
- hdu 6045 简单的思维题 2017 Multi-University Training Contest - Team 2
- HDU 6052 2017 Multi-University Training Contest - Team 2 1008 To My Boyfriend:计数问题
- HDU-6058 Kanade's sum - 2017 Multi-University Training Contest - Team 3(思维+模拟链表)
- 2017 Multi-University Training Contest - Team 5 1008 Rikka with Subset