#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
while (cin >> n){
if (n==0){
break;
}
string s[n];
for (int i=0; i<n; i++){
int num[5];
for (int j=0; j<5; j++){
cin >> num[j];
}
sort (num, num+5);
for (int j=0; j<5; j++){
s[i]+=(to_string(num[j]));
}
}
int sum=0, b=0;
for (int k=n; k>=1; k--){
for (int l=0; l<n; l++){
if (k==count (s, s+n, s[l])){
sum+=k;
b=1;
s[l]='0';
}
}
if (b==1){
break;
}
}
cout << sum << '\n';
}
return 0;
}
for (int k=n; k>=1; k--){
for (int l=0; l<n; l++){
if (k==count (s, s+n, s[l])){
sum+=k;
b=1;
s[l]='0';
}
}
if (b==1){
break;
}
}
這裡感覺效率不高,可以先對s排序再計算
for (int k=n; k>=1; k--){
for (int l=0; l
if (k==count (s, s+n, s[l])){
sum+=k;
b=1;
s[l]='0';
}
}
if (b==1){
break;
}
}
這裡感覺效率不高,可以先對s排序再計算
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
while (cin >> n){
if (n==0){
break;
}
string s[n];
for (int i=0; i<n; i++){
int num[5];
for (int j=0; j<5; j++){
cin >> num[j];
}
sort (num, num+5);
for (int j=0; j<5; j++){
s[i]+=(to_string(num[j]));
}
}
sort (s, s+n);
int sum=0, b=0;
for (int k=n; k>=1; k--){
for (int l=0; l<n; l++){
if (k==count (s, s+n, s[l])){
sum+=k;
b=1;
s[l]='0';
}
}
if (b==1){
break;
}
}
cout << sum << '\n';
}
return 0;
}
第二個測資TLE了
for (int k=n; k>=1; k--){
for (int l=0; l
if (k==count (s, s+n, s[l])){
sum+=k;
b=1;
s[l]='0';
}
}
if (b==1){
break;
}
}
這裡感覺效率不高,可以先對s排序再計算#include
using namespace std;
int main()
{
int n;
while (cin >> n){
if (n==0){
break;
}
string s[n];
for (int i=0; i
int num[5];
for (int j=0; j<5; j++){
cin >> num[j];
}
sort (num, num+5);
for (int j=0; j<5; j++){
s[i]+=(to_string(num[j]));
}
}
sort (s, s+n);
int sum=0, b=0;
for (int k=n; k>=1; k--){
for (int l=0; l
if (k==count (s, s+n, s[l])){
sum+=k;
b=1;
s[l]='0';
}
}
if (b==1){
break;
}
}
cout << sum << '\n';
}
return 0;
}第二個測資TLE了
排序好之後就能用其他方法來計算了。
用一個陣列儲存課程組合數量,迴圈從1開始,檢查s[i]是否等於s[i-1],相等數量加1,不相等數量就從1重新開始,把數量存到陣列的下一個位置
for (int k=n; k>=1; k--){
for (int l=0; l
if (k==count (s, s+n, s[l])){
sum+=k;
b=1;
s[l]='0';
}
}
if (b==1){
break;
}
}
這裡感覺效率不高,可以先對s排序再計算#include
using namespace std;
int main()
{
int n;
while (cin >> n){
if (n==0){
break;
}
string s[n];
for (int i=0; i
int num[5];
for (int j=0; j<5; j++){
cin >> num[j];
}
sort (num, num+5);
for (int j=0; j<5; j++){
s[i]+=(to_string(num[j]));
}
}
sort (s, s+n);
int sum=0, b=0;
for (int k=n; k>=1; k--){
for (int l=0; l
if (k==count (s, s+n, s[l])){
sum+=k;
b=1;
s[l]='0';
}
}
if (b==1){
break;
}
}
cout << sum << '\n';
}
return 0;
}第二個測資TLE了
排序好之後就能用其他方法來計算了。用一個陣列儲存課程組合數量,迴圈從1開始,檢查s[i]是否等於s[i-1],相等數量加1,不相等數量就從1重新開始,把數量存到陣列的下一個位置
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
while (cin >> n){
if (n==0){
break;
}
string s[n];
for (int i=0; i<n; i++){
int num[5];
for (int j=0; j<5; j++){
cin >> num[j];
}
sort (num, num+5);
for (int j=0; j<5; j++){
s[i]+=(to_string(num[j]));
}
}
sort (s, s+n);
int sum=1, output;
vector<int>v;
for (int k=1; k<=n; k++){
if (s[k]==s[k-1]){
sum++;
}
else {
v.push_back(sum);
sum=1;
}
}
output=*max_element(v.begin(), v.end())*count(v.begin(), v.end(), *max_element(v.begin(), v.end()));
cout << output << '\n';
}
return 0;
}
我不知道這和你的想法一不一樣,但AC了
謝謝🙏