4 条题解
-
0
暴力
#include<bits/stdc++.h> using namespace std; #define ll long long #define endl '\n' void solve(); int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t=1; // cin>>t; while(t--){ solve(); } return 0; } void solve(){ int n; cin>>n; vector<vector<int>> co(n+1,vector<int>(256)); vector<int>a(n+1); string s; for(int i=1;i<=n;i++){ cin>>s; a[i]=s.size(); for(auto c:s) co[i][c]++; } ll ans=0; for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ bool f=1; for(int k='a';k<='z';k++){ if(co[i][k]&&co[j][k]) f=0; } if(f) ans=max(ans,1ll*a[i]*a[j]); } } cout<<ans<<endl; }
-
0
暴力枚举
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] arr = new int[n][27]; for (int i = 0; i < arr.length; i++) { String str = sc.next(); arr[i][26] = str.length(); for (int j = 0; j < str.length(); j++) { arr[i][str.charAt(j) - 'a']++; } } int ans = 0; Arrays.sort(arr, (o1, o2) -> (o2.length - o1.length)); for (int i = 0; i < arr.length; i++) { int j = i + 1; for (; j < arr.length; j++) { if(!cal(arr[i], arr[j])){ ans = Math.max(ans, arr[i][26] * arr[j][26]); } } } System.out.println(ans); } public static boolean cal(int[] a, int[] b){ for (int i = 0; i < 26; i++) { if(a[i] > 0 && b[i] > 0) return true; } return false; } }
-
0
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] a = new int[n]; int[] b = new int[n]; // 遍历数组a for (int i = 0; i < n; i++) { String word = sc.next(); b[i] = word.length(); // 遍历字符串 for (int j = 0; j < word.length(); j++) { int c = word.charAt(j) - 'a'; a[i] |= 1 << c; } } int num = 0; for (int i = 0; i < a.length; i++) { for (int j = i; j < a.length; j++) { if ((a[i] & a[j]) == 0) { num = Math.max(num, b[i] * b[j]); } } } System.out.println(num); } }
-
0
用二进制的位来表示字母
#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; int main() { // 注意:在C++中,主函数必须返回一个int类型 int n; cin >> n; vector<int> a(n), b(n); for (int i = 0; i < n; i++) { string word; cin >> word; b[i] = word.length(); for (char c : word) { a[i] |= 1 << (c - 'a'); } } int num = 0; for (int i = 0; i < a.size(); i++) { for (int j = i; j < a.size(); j++) { if ((a[i] & a[j]) == 0) { num = max(num, b[i] * b[j]); } } } cout << num << endl; return 0; }
- 1
信息
- ID
- 590
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 116
- 已通过
- 34
- 上传者