字母

题解 P1013 【进制位】

喜欢而已 提交于 2019-12-04 09:02:35
------------恢复内容开始------------ 别说这是我的第一篇题解 AC记录 13ms / 688.00KB ,其实可以说还算快的吧。 题目再次复述 1.字母都不同 2.在限定进制内加减法 3.第一行第一列字母排列相等 有些人这么想,枚举每一个字母,不过-- 正常人应该可以明白 进制为n 吧 仔细分析一下,可以发现每个字母 \(ch\) 在 \(0 \leq ch \leq n-1\) 那不就是迎刃而解接了吗? 每个字母依次赋与 \(0\) 到 \((n-1)\) 依次判断是否符合 note:本人码风可能有点丑 #include<bits/stdc++.h> #define INF 1e9 using namespace std; const int N=12,M=100; char s[N][N][M];// s[i][j][k]为第i行第j列的第k个字母 int num[M]; int n; int main(){ scanf("%d",&n); for(int i=1;i<=26;i++) num[i]=INF; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%s",s[i][j]+1); for(int i=2;i<=n;i++) num[s[1][i][1]-'A'+1]=i-2; /

HDU-2082-找单词(母函数)

我们两清 提交于 2019-12-03 21:08:57
链接: http://acm.hdu.edu.cn/showproblem.php?pid=2082 题意: 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26。那么,对于给定的字母,可以找到多少价值<=50的单词呢?单词的价值就是组成一个单词的所有字母的价值之和,比如,单词ACM的价值是1+3+14=18,单词HDU的价值是8+4+21=33。(组成的单词与排列顺序无关,比如ACM与CMA认为是同一个单词)。 思路: 母函数模板 代码: #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<math.h> #include<vector> using namespace std; typedef long long LL; const int INF = 1e9; const int MAXN = 1e5+10; const int MOD = 1e9+7; int cnt[30]; LL Val[100], Tmp[100]; void Init() { memset(Val, 0, sizeof(Val)); Val[0] = 1; for

文件读取

荒凉一梦 提交于 2019-12-03 20:56:25
要求1:输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位。 要求2:输出单个文件中的前 N 个最常出现的英语单词。 作用:一个用于统计文本文件中的英语单词出现频率的控制台程序; 单词:以英文字母开头,由英文字母和字母数字符号组成的字符串视为一个单词。单词以分隔符分割且不区分大小写。在输出时,所有单词都用小写字符表示。 要求3:输出单个文件中的前 N 个最常出现的英语单词。 英文字母:A-Z,a-z 字母数字符号:A-Z,a-z,0-9 分割符:空格,非字母数字符号 例:good123是一个单词,123good不是一个单词。good,Good和GOOD是同一个单词 package hlbt; import java.io.File; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class hlbt1 { private static int[][] letter=new int[2][52]; public static void main(String[] args) throws IOException { StringBuilder sb = new StringBuilder();

统计文本文件(字母、单词、字符)

倾然丶 夕夏残阳落幕 提交于 2019-12-03 20:55:44
要求1:输出某个英文文本文件中 26 字母出现的频率,由高到低排列,并显示字母出现的百分比,精确到小数点后面两位。 要求2:输出单个文件中的前 N 个最常出现的英语单词。 作用:一个用于统计文本文件中的英语单词出现频率的控制台程序; 单词:以英文字母开头,由英文字母和字母数字符号组成的字符串视为一个单词。单词以分隔符分割且不区分大小写。在输出时,所有单词都用小写字符表示。 要求3:输出单个文件中的前 N 个最常出现的英语单词。 英文字母:A-Z,a-z 字母数字符号:A-Z,a-z,0-9 分割符:空格,非字母数字符号 例:good123是一个单词,123good不是一个单词。good,Good和GOOD是同一个单词 源代码: package FileRead; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import

CodeForces 1238D AB-string

烂漫一生 提交于 2019-12-03 20:22:46
cf题面 解题思路 比赛过程中好像完全没有想法来着,打完比赛,群里分享的做法也并没有看懂……一个月后的今天终于靠官方题解把题补了。 可以用间接法,总的子串数量减去不好的子串数量就是好的子串数量。而不好的子串就4种—— ABB...BB BAA...AA AA...AAB BB...BBA 其他情况都是好的子串。证明的话分类讨论一下就好 不好的字母在子串中间 该字母左右的字母是否相等 不好的字母在子串边上 子串中是否存在另一个和该字母相同的字母 官方题解这么说的—— Let's call a character \(t_i\) in string \(t_1t_2…t_k\) is bad if there is no such palindrome \(t_lt_{l+1}…t_r\) that \(l\leqslant i\leqslant r\) . Any character in substring \(t_2t_3…t_{k−1}\) is good. It can be proven as follows. If \(t_i=t_i+1\) or \(t_i=t_i−1\) then \(t_i\) belong to a palindrome of length 2. If \(t_i\not = t_{i+1}\) and \(t_i≠t_{i−1}\) then