git reimport
This commit is contained in:
176
archive/2018.03/2018.03.18 - unsorted/TaskC.java
Normal file
176
archive/2018.03/2018.03.18 - unsorted/TaskC.java
Normal file
@@ -0,0 +1,176 @@
|
||||
package chelper;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import io.InputReader;
|
||||
import io.OutputWriter;
|
||||
import misc.GCJSolution;
|
||||
|
||||
|
||||
public class TaskC extends GCJSolution {
|
||||
|
||||
private int[] s;
|
||||
private int n;
|
||||
private Set<Integer> lengths;
|
||||
private HashMap<List<Integer>, Integer> masks;
|
||||
private String[] wordsS;
|
||||
private int wordCount;
|
||||
|
||||
public void solve(int testNumber, InputReader in, OutputWriter out) {
|
||||
wrapSolve(testNumber, in, out);
|
||||
}
|
||||
|
||||
long mod = 1000000007L;
|
||||
long base = 31;
|
||||
long[] bases = new long[30];
|
||||
|
||||
{
|
||||
bases[0] = 1;
|
||||
for (int i = 1; i < 30; i++) {
|
||||
bases[i] = bases[i - 1] * base % mod;
|
||||
}
|
||||
}
|
||||
|
||||
ArrayList<Integer> maskl(int[] mask) {
|
||||
ArrayList<Integer> res = new ArrayList<>();
|
||||
for (int i : mask) {
|
||||
res.add(i);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void solve(int testNumber) {
|
||||
wordCount = in.nextInt();
|
||||
|
||||
wordsS = in.nextStringArray(wordCount);
|
||||
|
||||
// Map<Integer, List<Long>> lenToHashes = new HashMap<>();
|
||||
masks = new HashMap<>();
|
||||
|
||||
lengths = new HashSet<>();
|
||||
|
||||
for (String s : wordsS) {
|
||||
int l = s.length();
|
||||
lengths.add(l);
|
||||
// lenToHashes.putIfAbsent(l, new ArrayList<>());
|
||||
|
||||
int[] mask = new int[30];
|
||||
for (int i = 0; i < l; i++) {
|
||||
int c = s.charAt(i) - 97;
|
||||
mask[c]++;
|
||||
}
|
||||
mask[26] = s.charAt(0) - 97;
|
||||
mask[27] = s.charAt(l - 1) - 97;
|
||||
mask[28] = l;
|
||||
|
||||
ArrayList<Integer> maskl = maskl(mask);
|
||||
|
||||
masks.putIfAbsent(maskl, 0);
|
||||
masks.put(maskl, masks.get(maskl) + 1);
|
||||
}
|
||||
|
||||
long s1 = in.nextString().charAt(0);
|
||||
long s2 = in.nextString().charAt(0);
|
||||
|
||||
n = in.nextInt();
|
||||
s = new int[n];
|
||||
|
||||
{
|
||||
|
||||
long a = in.nextInt();
|
||||
long b = in.nextInt();
|
||||
long c = in.nextInt();
|
||||
long d = in.nextInt();
|
||||
|
||||
s[0] = (int) s1;
|
||||
s[1] = (int) s2;
|
||||
|
||||
for (int i = 2; i < n; i++) {
|
||||
s[i] = (int) ((a * s[i - 1] + b * s[i - 2] + c) % d);
|
||||
}
|
||||
for (int i = 0; i < n; i++) {
|
||||
if (i < 2) {
|
||||
s[i] -= 97;
|
||||
}
|
||||
s[i] %= 26;
|
||||
}
|
||||
}
|
||||
|
||||
int sol1 = sol1();
|
||||
|
||||
// int sol2 = sol2();
|
||||
int sol2 = sol1;
|
||||
|
||||
// out.println(sol1);
|
||||
|
||||
if (sol1 != sol2) {
|
||||
out.println("!!!!!!!!!!");
|
||||
out.println(sol1);
|
||||
out.println(sol2);
|
||||
} else {
|
||||
out.println(sol1);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int sol1() {
|
||||
HashMap<List<Integer>, Integer> masks = new HashMap<>(this.masks);
|
||||
|
||||
int t = 0;
|
||||
|
||||
for (int l : lengths) {
|
||||
ArrayList<Integer> a = new ArrayList<>();
|
||||
for (int i = 0; i < 30; i++) {
|
||||
a.add(0);
|
||||
}
|
||||
|
||||
for (int i = 0; i < l; i++) {
|
||||
a.set(s[i], a.get(s[i]) + 1);
|
||||
}
|
||||
a.set(28, l);
|
||||
|
||||
for (int i = 0; i < n; i++) {
|
||||
a.set(26, s[i]);
|
||||
a.set(27, s[i + l - 1]);
|
||||
|
||||
if (masks.containsKey(a)) {
|
||||
t += masks.get(a);
|
||||
masks.remove(a);
|
||||
}
|
||||
|
||||
if (i + l >= n) {
|
||||
break;
|
||||
}
|
||||
|
||||
a.set(s[i], a.get(s[i]) - 1);
|
||||
a.set(s[i + l], a.get(s[i + l]) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
int sol2() {
|
||||
char[] s2 = new char[n];
|
||||
for (int i = 0; i < n; i++) {
|
||||
s2[i] = (char) (s[i] + 97);
|
||||
}
|
||||
|
||||
String s = new String(s2);
|
||||
|
||||
int t = 0;
|
||||
|
||||
for (String i : wordsS) {
|
||||
if (s.contains(i)) {
|
||||
t++;
|
||||
}
|
||||
}
|
||||
|
||||
return t;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user