NC14540. 魔法阵
描述
n-1 n-1
Σ Σ F(shift(s,i),shift(t,j));
i=0 j=0
shift(s,i)表示是以字母s[i]开头的字符串.
例如:
shift(ACC,0)=ACC
shift(ACC,1)=CCA
shift(ACC,2)=CAC
F(字符串A,字符串B)=字符串A和字符串B对应相同位子上相同字母的个数和,现在已知两只逗逼兽的名字,求其战斗力。
输入描述
第一行输入一个整数t,表示一共的测试数据组数。
每组数据输入两行,每行输入一只逗逼兽的名字,保证两只逗逼兽的名字长度相同,保证输入的字符都是大写字母。
t<=100
1<=逗逼兽的名字的长度<=100000
输出描述
每组数据输出一行,包含一个整数,表示两只逗逼兽的战斗力。 (保证输出结果在2^60以内)
示例1
输入:
1 ACC ACG
输出:
9
Java(javac 1.8) 解法, 执行用时: 326ms, 内存消耗: 31492K, 提交时间: 2018-02-20 20:23:55
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); while (n-- > 0) { String str1 = sc.next(); String str2 = sc.next(); int []array = new int[100000]; for(int i=0;i<str1.length();i++) { array[str1.charAt(i)-'A']++; } long num = 0; for(int j=0;j<str2.length();j++) { num = num+array[str2.charAt(j)-'A']; } System.out.println(num*str1.length()); } } }
C++11(clang++ 3.9) 解法, 执行用时: 32ms, 内存消耗: 1452K, 提交时间: 2019-08-21 16:52:24
#include<iostream> using namespace std; int main(){ int t; cin>>t; while(t--){ string a,b; cin>>a>>b; int c[1000]={0},d[1000]={0}; for(int i=0;i<a.length();i++){ c[a[i]-64]++; d[b[i]-64]++; } long long sum=0; for(int i=0;i<300;i++){ sum=sum+c[i]*d[i]; } cout<<sum*a.length()<<endl; } }