题目链接:/
Time limit(ms): 5000 Memory limit(kb): 65535
Description
江油是李白故里。马可波罗来到李白故里,突然诗性大发,准备吟诗两句。
5 ABCCCDA LLLMNNO DEZZZBF AAABCCD KKKXPPQ |
4 |
Hint 解题思路: 1、利用位运算按以下规则处理每一个字符串s,对应每一个字符信息放在一个数bit的每一位中,得到每一个字符对应的数bit (1) if(s[i]==s[i-1]) bit_t=1; bit_t代表数bit的第i位; (2) if(i==0||s[i]!=s[i-1]) bit_t=0; 2、由于只有7个字符,二进制状态下bit最多7位,那么bit的范围在[0,126] 之间,(二进制下就是,[0000000,1111110]) 3、开一个126的hash数组,对于每一个bit有(hash[bit]++),代表了当前这种结构的“诗”的句数 4、总对数cnt=hash[0]*(hash[0]-1)/2+***+hash[n]*(hash[n]-1)/2 (和求多边形对角线条数一个道理) 代码如下:
1 #include <iostream> 2 using namespace std; 3 int Hash[1 << 7], t, cnt; 4 char s[8]; 5 int main(){ 6 cin >> t; 7 while (t--){ 8 int i, bit = 0; 9 cin >> s; 10 for (i = 1; i < 7; i++) 11 if (s[i] == s[i - 1]) 12 bit |= 1 << i; 13 Hash[bit]++; 14 } 15 for (int i = 0; i < (1 << 7); i++) 16 cnt += Hash[i] * (Hash[i] - 1) / 2; 17 cout << cnt << endl; 18 return 0; 19 }View Code
转载于:.html
本文发布于:2024-01-28 14:18:47,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/17064227328025.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |