首页 > 试题广场 >

Kuchiguse (20)

[编程题]Kuchiguse (20)
  • 热度指数:6671 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
The Japanese language is notorious for its sentence ending particles. Personal preference of such particles can be considered as a reflection of the speaker's personality. Such a preference is called "Kuchiguse" and is often exaggerated artistically in Anime and Manga. For example, the artificial sentence ending particle "nyan~" is often used as a stereotype for characters with a cat-like personality:
Itai nyan~ (It hurts, nyan~)
Ninjin wa iyada nyan~ (I hate carrots, nyan~)

Now given a few lines spoken by the same character, can you find her Kuchiguse?

输入描述:
Each input file contains one test case.  For each case, the first line is an integer N (2<=N<=100). Following are N file lines of 0~256 (inclusive) characters in length, each representing a character's spoken line. The spoken lines are case sensitive.


输出描述:
For each test case, print in one line the kuchiguse of the character, i.e., the longest common suffix of all N lines. If there is no such suffix, write "nai".
示例1

输入

3
Itai nyan~
Ninjin wa iyadanyan~
uhhh nyan~

输出

nyan~
#include <iostream>
#include <cstring>
using namespace std;
char a[110][260];                            

int main(){
    int n,len,minlen=256,num=0;
    cin>>n;getchar();                                 //输入完个数n后会有个\n换行符,为了不让下面的for循环输入,用getchar()来接收\n
    for(int i=0;i<n;i++){
        gets(a[i]);                                   //字符串可能带空格,用cin与scanf的%s格式都会以空格作为输入结束而跳过后面的字符,而用gets()则以\n作为输入结束标志
        len=strlen(a[i]);
        if(len<minlen) minlen=len;                    //找出所有字符串中最短的一个
        for(int j=0;j<len/2;j++){                        
            char temp=a[i][j];                        //反转字符数组,变为找公共前缀
            a[i][j]=a[i][len-1-j];
            a[i][len-1-j]=temp;
        }
    }
    for(int i=0;i<minlen;i++){                        //判断所有字符串的第i个字符是否相等
        bool same=true;
        for(int j=1;j<n;j++){
            if(a[0][i]!=a[j][i]){                     //判断其余字符串的第i位是否等于第一个字符串的第i位
                same=false;
                break;
            }
        }
        if(same) num++;                              //所有字符串的第i位相等,则计数器加1
        else break;
    }

    if(num==0) cout<<"nai";
    else{
        for(int i=num-1;i>=0;i--)
            cout<<a[0][i];
    }

    return 0;
}


发表于 2018-01-17 20:39:02 回复(2)
把输入翻过来,找一下最长前缀,然后输出的时候翻回去就行了喵~
这里怕又被卡常数,就加了个二分,不加应该也能过喵~?
cin >> n不会把之后的换行读掉,是个坑,专门读一下就是了喵~
注意string的substr和==还有反向迭代器会方便不少喵~

#include <iostream>
#include <string>
#include <vector>
#define dbg(x) cout << #x ": " << (x) << endl
using namespace std;

int main(){
    int n;
    cin >> n;
    vector<string> ss;
    string s;
    getline(cin, s);
    for(int i = 0; i < n; i++){
        getline(cin, s);
        // dbg(s);
        ss.emplace_back(rbegin(s), rend(s));
    }
    int l = 0, r = 257, mid = (l + r) / 2, ans = -1;
    while(l <= r){
        mid = (l + r) / 2;
        bool ok = true;
        for(int i = 1; i < n; i++){
            if(ss[0].substr(0, mid) != ss[i].substr(0, mid)){
                ok = false;
                break;
            }
        }
        if(ok){
            ans = max(ans, mid);
            l = mid + 1;
        }
        else{
            r = mid - 1;
        }
    }
    if(ans != 0){
        string kuchiguse = ss[0].substr(0, ans);
        kuchiguse = string(rbegin(kuchiguse), rend(kuchiguse));
        cout << kuchiguse << endl;
    }
    else{
        cout << "nai" << endl;
    }
}


发表于 2019-08-23 12:56:18 回复(1)
怎么不用去掉字符串头尾多余的空格啊。。。好吧,就这么暴力解决了
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <set>
using namespace std;
int n;
string s,suffix;
bool f=false;
int main(){
	cin>>n;
	char ch=getchar();
	for(int k=1;k<=n;++k){
		getline(cin,s,'\n');
		if(f) continue;
		if(k==1){
			suffix=s;
			continue;
		}
		if(s.size()>suffix.size()) s=s.substr(s.size()-suffix.size());
		else if(s.size()<suffix.size()) suffix=suffix.substr(suffix.size()-s.size());
		int i=s.size()-1;
		if(s[i]!=suffix[i]){
			f=true;
			continue;
		}
		for(;i>=0;--i)
			if(s[i]!=suffix[i])
				break;
		if(i>=0) suffix=suffix.substr(i+1);
	}
	if(f) cout<<"nai";
	else cout<<suffix;
}

发表于 2022-05-27 22:26:34 回复(0)
1.求得最短字符串,其长度作为终止判断的条件
2.按照倒序进行判断,设立标志flag,一旦出现flag==false直接退出判断
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner input=new Scanner(System.in);
        int num=input.nextInt();
        input.nextLine();
        String[] sentence=new String[num];
        for(int i=0;i<num;i++){
            sentence[i]=input.nextLine();
        }
        int minlen=sentence[0].length();
        int index=0;
        for(int i=0;i<num;i++){
            if(sentence[i].length()<minlen){
                minlen=sentence[i].length();
                index=i;
            }
        }
        boolean flag=true;
        StringBuilder sb=new StringBuilder("");
        for(int i=0;i<minlen;i++){
            char tmp=sentence[index].charAt(minlen-1-i);
            if(flag==false)
                break;
            for(int j=0;j<num;j++){
                if((sentence[j].charAt(sentence[j].length()-1-i))!=tmp&&flag){
                    flag=false;
                    break;
                }
            }
            if(flag)
                sb.append(tmp);
        }
        sb.reverse();
        if(sb.length()!=0)
            System.out.println(sb);
        else
            System.out.println("nai");
    }
}


发表于 2021-02-21 16:05:39 回复(0)
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int N; vector<char> x[109]; vector<char> Ku;

int main()
{
	cin >> N; string tmp; getline(cin, tmp);//吃一个换行符
	for (int i = 0; i < N; ++i) {
		getline(cin, tmp);
		for (int j = 0; j < tmp.length(); ++j)x[i].push_back(tmp[j]);
	}

	int min_len = x[0].size();
	for (int i = 1; i < N; ++i)
		if (min_len > x[i].si***_len = x[i].size();
	
	char cur; bool stop = false;
	for (int i = 0; i < min_len; ++i) {
		cur = x[0].back(); x[0].pop_back();
		for (int j = 1; j < N; ++j)
			if (stop = (x[j].back() != cur)) break;
			else x[j].pop_back();
		if (stop)break;
		else Ku.push_back(cur);
	}

	if (Ku.empty())cout << "nai";
	else {
		int Ku_len = Ku.size();
		for (int i = 0; i < Ku_len; ++i) {
			cout << Ku.back(); Ku.pop_back();
		}
	}

	return 0;
}


编辑于 2021-02-20 16:31:15 回复(0)
C++,不用reverse
#include<iostream>
#include<string>
using namespace std;

int main() {
	int n; scanf("%d\n", &n);
	string s, ans;
	getline(cin, ans);
	n--;
	while (n--) {
		getline(cin, s);
		int k=0;
		for (int i = ans.size() - 1, j = s.size() - 1; i >= 0 && j >= 0; i--, j--) {
			if (ans[i] != s[j]) {
				k = i+1; break;
			}
		}
		ans = ans.substr(k);
	}
	if (ans.size() > 0) cout << ans;
	else cout << "nai";
	return 0;
}

更多题解见我的CSDN博客:https://blog.csdn.net/weixin_43590232


编辑于 2020-02-27 11:12:19 回复(0)
留念
#include<string>
#include<iostream>
using namespace std;
int main() {
    int n;
    cin >> n;
    getchar();
    string res;
    getline(cin, res);
    string temp;
    for (int i = 1; i < n; i++) {
        getline(cin, temp);
        int same = 0;
        for (same = 0; same<res.size()&&same<temp.size(); same++) {
            if (res[res.size() - 1 - same] != temp[temp.size() - 1 - same]) {
                break;
            }
        }
        if (same == 0) {
            res = "nai";
            break;
        }
        res = res.substr(res.size()-same);
        //cout << res << endl;
    }
    cout << res;
    cin >> temp;
}

发表于 2018-02-19 20:32:06 回复(0)
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
int n;
string endWord;
cin >> n;
vector<string> str(n);
for (int i = 0; i < n; i++)
{
string sup;
do
{
getline(cin, sup);
} while (sup.empty());
str[i] = sup;
//字符串反向
for (int j = 0; j < (str[i].size() + 1) / 2; j++)
{
char temp = str[i][j];
str[i][j] = str[i][str[i].size() - 1 - j];
str[i][str[i].size() - 1 - j] = temp;
}
}
endWord = str[0];
for (int i = 1; i < n; i++)
{
string sup="";
int j = 0;
while (endWord[j] == str[i][j])
{
sup += endWord[j];
j++;
}
endWord = sup;
}
//字符串反向
for (int j = 0; j < (endWord.size() + 1) / 2; j++)
{
char temp = endWord[j];
endWord[j] = endWord[endWord.size() - 1 - j];
endWord[endWord.size() - 1 - j] = temp;
}
if (endWord.empty())
{
cout << "nai" << endl;
}
else
{
cout << endWord<<endl;
	}
return 0;
}
发表于 2017-07-22 22:18:28 回复(0)
//这题比较简单,字符串翻转后比较方便找公共字串,注意几点
1.getline和cin不一伙的,cin后的值,getline仍旧会读,所以先getline过掉第一行;
2.min(MinSize, v[i].size());不行,只好先int size = v[i].size();
3.结束条件=N表示全比过且成功 #include<bits/stdc++.h>
using namespace std;
int main(){
	int N;
	cin >> N;
    
	string tmp;//无用的第一行
	getline(cin,tmp);
	
    vector<string> v(N);
	int MinSize = INT_MAX;
	for (int i = 0; i<N; i++){
		getline(cin,v[i]);
		reverse(v[i].begin(),v[i].end());
		int size = v[i].size();
		MinSi敏感词(MinSize, size);
	}


	string res = "";
	for (int i = 0; i<MinSize; i++){
		int j = 1;
		for (; j<N; j++){
			if (v[j][i] != v[0][i])break;
		}
		if (j != N){
            break;
		}
		else{
			res = v[0][i] + res;
		}
	}
    
    
    if (res == ""){
        cout << "nai";
        return 0;
    }else{
        cout << res;
        return 0;
	}
	return 0;
}

发表于 2017-07-05 15:27:08 回复(0)
#include <iostream>
#include <string> 
#include <vector>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int N;
vector<string> s;
int main(int argc, char** argv) {
	cin >> N;
	for(int i = 0;i <= N;i++){
		string str;
		getline(cin,str);
		s.push_back(str);
	}
	bool flag = true;
	int i;
	for(i = 1;i <= s[1].size();i++){
		char c = s[1][s[1].size() - i];
	for(int j = 2;j < s.size();j++) {
		if(s[j][s[j].size() - i] != c){
			flag = false;
			break;
		}
	}
	if(flag == false){
		break;
	}
	} 
	for(int k = i - 1;k >= 1;k--){
		cout << s[1][s[1].size() - k];
	}
	if(i == 1){
		cout << "nai";
	}
	cout << endl; 
	return 0;
}

发表于 2016-02-24 20:24:45 回复(0)
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <climits>
#include <algorithm>
using namespace std;

int main()
{     int N;     cin>>N;     string t;     getline(cin, t);     vector<string> v(N);     int minSize = INT_MAX;     for(int i=0;i<N;i++)     {         getline(cin,v[i]);         reverse(v[i].begin(),v[i].end());         int size = v[i].size();         minSi***(minSize, size);     }     string result = "";     for(int i=0;i<minSize;i++)     {         int j=1;         for(;j<N;j++)             if(v[j][i] != v[0][i])                 break;         if(j != N)             break;         else             result = v[0][i] + result;     }     if(result == "")         cout<<"nai";     else         cout<<result;     return 0;
}

发表于 2018-02-20 01:17:44 回复(1)
#include<bits/stdc++.h>
using namespace std;

const int Max=110;

int main() {
	int n,l[Max],L=256;
	cin>>n;
	getchar();
	string str[Max],answer;
	for(int i=0; i<n; i++) {
		getline(cin,str[i]);
		reverse(str[i].begin(),str[i].end());
		l[i]=str[i].size();
		L=min(L,l[i]);
	}
	for(int i=0; i<L; i++) {
		for(int j=1; j<n; j++) {
			if(str[0][i]!=str[j][i]) {
				break;
			} else {
				if(j==n-1) {
					answer+=str[0][i];
				}
			}
		}
	}
	if(answer!="") {
		reverse(answer.begin(),answer.end());
		cout<<answer<<endl;
	} else {
		cout<<"nai"<<endl;
	}
	return 0;
}

编辑于 2022-11-07 16:26:23 回复(1)
字典树  。。。。。。。。。。。    菜鸡的泪水
import java.io.StringBufferInputStream;
import java.io.*;
import java.util.*;
class Trie2 {
    Trie2[] childs;
    boolean isEnd;
    int len;
    int next;
    public Trie2(){
        isEnd = false;
        childs = new Trie2[256];
        len =0;
        next = 0;
    }
    public void insert(String word) {
        char [] sc = word.toCharArray();
        Trie2 root = this;
        for(int i = 0;i<sc.length;i++){
            int index = sc[i];
            if(root.childs[index]== null){
                Trie2 node = new Trie2();
                root.childs[index] = node;
                root.len++;
                root.next = index;
            }
            root = root.childs[index];
            if(i == sc.length-1){
                root.isEnd = true;
            }
        }
    }
    public boolean search(String word) {
        char[]sc = word.toCharArray();
        Trie2 root = this;
        for(int i = 0;i<sc.length;i++){
            int index = sc[i];
            if(root.childs[index] == null){
                return false;
            }
            root = root.childs[index];
        }
        if(root.isEnd == true){
            return true;
        }else{
            return false;
        }

    }
    public boolean startsWith(String prefix) {
        char[]sc = prefix.toCharArray();
        Trie2 root = this;
        for(int i = 0;i<sc.length;i++){
            int index = sc[i];
            if(root.childs[index] == null){
                return false;
            }
            root = root.childs[index];
        }
        return true;

    }

    public String find(){
        Trie2 root = this;
        StringBuilder sb =new StringBuilder();
        // System.out.print("dfs");
        
        while(root.len == 1){
            sb.append((char)root.next);
            if(root.isEnd == true){
                break;
            }
            if(root.childs[root.next] == null){
                break;
            }else{
            root = root.childs[root.next];
            }
        }
        return sb.toString();
    }
}

public class Main {
    static BufferedReader in =new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer st =new StreamTokenizer(in);
    static StringTokenizer tokenizer;
    public static int nextInt() throws IOException {
        st.nextToken();
        return (int)st.nval;
    }
    public static String next() {
        while (tokenizer == null || !tokenizer.hasMoreTokens()) {
            try {
                tokenizer = new StringTokenizer(in.readLine());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        return tokenizer.nextToken();
    }

    public static void main(String[] args) throws IOException{
          int n =Integer.parseInt(in.readLine());
        Trie2 root  = new Trie2();
          for(int i = 0 ;i<n;i++){
              String str = in.readLine();
              StringBuilder sb = new StringBuilder(str);
              String temp =sb.reverse().toString();
              root.insert(temp);
          }
      StringBuilder  sb2 = new StringBuilder(root.find()).reverse();
        if(sb2.toString().length() == 0){
            System.out.print("nai");
        }else{
          System.out.println(sb2.toString());
        }
    }
}

发表于 2022-08-04 16:58:15 回复(0)


更多PAT甲级题解--acking-you.github.io

题目


OJ平台

题目大意

题目大意很简单,就是给出很多句话,要你分析,最长的公共后缀。

  • 这个地方难在输入的处理,注意输入如果用的 getline() 接收的一行,则前面一般不能有别的输入方式,否则会起冲突,导致 getline() 并未抢到值。那么怎么解决呢?用 scanf("%d\n") 限定输入的分隔符,这样就不会有冲突了!

代码解析

Input输入处理

void Input() {
    scanf("%d\n", &N);
    for (int i = 0; i < N; i++) {
        getline(cin, s[i]);
        //顺便求出最大的长度方便后续遍历,
       //实际上求出最小长度是最好,这样就不用再后续判断了。
        MaxSize = max(MaxSize, (int)s[i].size());
    }
}

print输出处理

void print() {
    string res = "";//普通的迭代循环判断
    for (int i = 1; i <= MaxSize; i++) {
        if (s[0].size() < i)
            break;
        bool f = true;
        string cmp = s[0].substr(s[0].size() - i, i);
        for (int j = 0; j < N; j++) {
            int len = s[j].size();
            if (len < i)
                goto end;
            if (cmp != s[j].substr(len - i, i)) {
                f = false;
                break;
            }
        }
        if (f)
            res = cmp;
    }
end:
    res = (res == "") ? "nai" : res;
    cout << res;
}

整合代码得出答案

效率还挺好

#include<bits/stdc++.h>
using namespace std;
int N;
int MaxSize;
string s[101];
//@输入处理
void Input() {
    scanf("%d\n", &N);
    for (int i = 0; i < N; i++) {
        getline(cin, s[i]);
        MaxSize = max(MaxSize, (int)s[i].size());
    }
}
//@输出处理
void print() {
    string res = "";
    for (int i = 1; i <= MaxSize; i++) {
        if (s[0].size() < i)
            break;
        bool f = true;
        string cmp = s[0].substr(s[0].size() - i, i);
        for (int j = 0; j < N; j++) {
            int len = s[j].size();
            if (len < i)
                goto end;
            if (cmp != s[j].substr(len - i, i)) {
                f = false;
                break;
            }
        }
        if (f)
            res = cmp;
    }
end:
    res = (res == "") ? "nai" : res;
    cout << res;
}
int main() {
    Input();
    print();
    return 0;
}
发表于 2021-09-23 13:26:19 回复(0)
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<string> list;
vector<char> ans;
int n;
int main(int argc, const char * argv[]) {
    cin>>n;
    string temp;
    int b=0;
    char t;
    getline(cin, temp);
    for (int i=0; i<n; i++) {
        getline(cin, temp);
        list.push_back(temp);
    }
    for (int i=1; i<255; i++) {
        auto it1=list[0].end();
        t=*(it1-i);
        for (int j=0;j<n;j++) {
            auto it1=list[j].end();
            if (t!=*(it1-i)) {
                b=1;
                break;
            }
        }
        if (b==0) {
            ans.insert(ans.begin(), t);
        }else
            break;
    }
    
    if (ans.size()==0) {
        cout<<"nai";
    }else{
        for (auto it=ans.begin(); it<ans.end(); it++) {
            cout<<*it;
        }
    }
    return 0;
}

比较笨比,倒着一个一个比完事。需要注意多一个getline吸收掉n后的回车
编辑于 2021-02-03 00:25:33 回复(0)
store = []
n = int(input())
length = 999999999
for i in range(n):
    x = list(str(input()))
    x.reverse()
    if len(x) < length:
        length = len(x)
    store.append(x)
res = []
for i in range(length):
    cm = store[0][i]
    for j in range(1, len(store)):
        if store[j][i] != cm:
            break
        if j == len(store)-1 and store[j][i] == cm:
            res.append(cm)
    else:
        continue
    break
res.reverse()
if len(res) > 0:
    print("".join(res))
else:
    print("nai")

发表于 2021-01-14 16:42:08 回复(0)
水题,但是略有坑。

// runtime: 5ms
// space: 384K
// https://pintia.cn/problem-sets/994805342720868352/problems/994805390896644096
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int n;
    scanf("%d", &n);
    string s, ans;
    getchar();

    for (int i = 0; i < n; ++i) {
        getline(cin, s);
        reverse(s.begin(), s.end());

        if (i == 0) {
            ans = s;
            continue;
        } else {
            int len = s.length();
            int ans_len = ans.length();
            int min_len = min(ans_len, len);
            if (len < ans_len) swap(s, ans);
            for (int j = 0; j < min_len; ++j) {
                if (ans[j] != s[j]) {
                    ans = ans.substr(0, j);
                    break;
                }
            }
        }
    }
    reverse(ans.begin(), ans.end());
    if (ans.length() == 0)
        ans = "nai";

    cout << ans << endl;
    return 0;
}


编辑于 2020-04-11 19:44:00 回复(0)
开始还以为不能暴力,要用动态规划什么的。。。。。不过reverse第一次用,好像不用也可以
#include<iostream>
(720)#include<vector>
#include<algorithm>
const int MAXN=257;
using namespace std;
int main(){
    int n;
    cin>>n;
    vector<string>str(n);
    getchar();
    for(int i=0;i<n;i++){
        getline(cin,str[i]);
        reverse(str[i].begin(),str[i].end());
    }
     string ans="";
    char pre,next;
    for(int i=0;i<MAXN;i++){
        if(str[0].empty()){break;}
        char pre=str[0][i];//第一个串的第i个字符
        int j=1;
        for(;j<n;j++){
          if(str[j].empty()){break;}
          if(str[j][i]!=pre){break;}
        }
        if(j==n){ans+=pre;}
        else{break;}
    }
    if(ans==""){printf("nai");}
    else{
        reverse(ans.begin(),ans.end());
        cout<<ans;
    }
}


发表于 2020-02-27 12:12:31 回复(0)
#include<iostream>
#include<cstdio>
#include<string.h>

using namespace std;

/*
 求最长公共后缀序列 
*/


int main()
{
    int n;
    while(cin>>n)
    {
        getchar();
        string line[n];
        int minlen = 999999;
//        int maxlen = 0;
        for(int i=0; i< n;i++)
        {
            getline(cin,line[i]);
            //cout<<"____> " << line[i]<<endl; 
            if(line[i].length() < minlen)
            {
                minlen = line[i].length();
            }
//            if(line[i].length() > maxlen)
//            {
//                maxlen = line[i].length();
//            }
        }
        int index = 0;
        int flag = 0;
        for(int j = minlen -1 ; j > -1; j--)
        {
            for(int i=0;i<n - 1  ;i++)
            {
                int len1 = line[i].length();
                int len2 = line[i+1].length();
                if(line[i][len1-1 -index] != line[i+1][len2 -1 - index])
                {
                    flag = 1;
                    break;
                }
                
            }
            if(!flag)
            {
                index++;
            }else
            {
                break;
            }
        }
       // cout << index << endl;;
        if(index == 0) cout << nai;
        else
        {
            for(int i = line[0].length() - index; i < line[0].length();i++)
            {
                cout<<line[0][i];
            }
        }

    }
    
    return 0;
}

发表于 2019-07-12 13:53:19 回复(0)

暴力求最长公共子串,时间复杂度:O(n*len)

#include <cstdio>
#include <iostream>
using namespace std;
int main() {
  int n;
  scanf("%d", &n);
  getchar();  // eat enter
  string strs[n];
  int minlen = 256;
  for (int i = 0; i < n; i++) {
    getline(cin, strs[i]);
    if (strs[i].size() < minlen) minlen = strs[i].size();
  }
  int pos;
  bool same = true;
  // 垂直遍历字符串数组
  int poivt_size = strs[0].size();
  for (pos = 1; pos <= minlen; pos++) {
    same = true;
    for (int i = 1; i < n; i++) {
      if (strs[0][poivt_size - pos] != strs[i][strs[i].size() - pos]) {
        same = false;
        break;
      }
    }
    if (!same) break;
  }
  if (pos == 1) {
    printf("nai");
    return 0;
  }
  for (int i = pos - 1; i >= 1; i--) {
    printf("%c", strs[0][poivt_size - i]);
  }
  return 0;
}
编辑于 2019-04-17 16:02:49 回复(0)

问题信息

难度:
34条回答 14668浏览

热门推荐

通过挑战的用户