![[Swust OJ 385]](/uploads/image/0794.jpg)
题目链接:/
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 条评论) |