自学内容网 自学内容网

寒假刷题第七天

PTA甲级

1037 Magic Coupon

排序

n = int(input())
a = list(map(int , input().split()))
m = int(input())
b = list(map(int , input().split()))
za , zb , fa , fb = [i for i in a if i > 0] , [i for i in b if i > 0] ,[i for i in a if i < 0] , [i for i in b if i < 0]
za.sort();zb.sort();fa.sort();fb.sort();
res = 0;za = za[::-1];zb = zb[::-1];
for i in range(min(len(za) , len(zb))):
    res += za[i] * zb[i]
for i in range(min(len(fb) , len(fa))):
    res += fa[i] * fb[i]
print(res)

1038 Recover the Smallest Number

自定义排序

#include<iostream>
#include<algorithm>
#include<vector>

using namespace std;

const int N = 1e4 + 10;
int n;
vector<string>res(N);
bool cmp(string a , string b){return a + b < b + a;}

int main()
{
    cin >> n;
    for(int i = 0;i < n;i ++) 
        cin >> res[i];
    sort(res.begin() , res.begin() + n , cmp);
    string s = "";
    bool f = false;
    for(int i = 0;i < res.size();i ++)
    {
        if(i == 0 || f) 
        {
            int j = 0;
            while(res[i][j] == '0') j ++;
            if(j < res[i].size()) s += res[i].substr(j) , f = false;
            else f = true;
        }
        else s += res[i];
    }
    if(s.size()) cout << s << endl;
    else cout << 0 << endl;
    return 0;
}

1039 Course List for Student

哈希表

#include<iostream>
#include<unordered_map>
#include<set>

using namespace std;

unordered_map<string , set<int>>mp;
int n , k;

int main()
{
    cin >> n >> k;
    for(int i = 0;i < k;i ++)
    {
        int id , m;
        cin >> id >> m;
        for(int j = 0;j < m;j ++)
        {
            string s;
            cin >> s;
            mp[s].insert(id);
        }
    }
    while(n --)
    {
        string s;
        cin >> s;
        cout << s << " " << mp[s].size();
        for(auto i : mp[s])
            cout << " " << i;
        cout << endl;
    }
    return 0;
}

1040 Longest Symmetric String

暴力枚举就行

#include<iostream>
#include<algorithm>

using namespace std;

int main()
{
    string s;
    getline(cin , s);
    int res = 0;
    for(int i = 0;i < s.size();i ++)
    {
        for(int j = 1;j <= s.size() - i;j ++)
        {
            string t = s.substr(i , j);
            string t1 = t;
            reverse(t1.begin() , t1.end());
            if(t == t1 && res < t1.size()) res = t1.size();
        }
    }
    printf("%d" , res);
    return 0;
}


原文地址:https://blog.csdn.net/xp_xht123/article/details/135619892

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!