PAT甲级刷题记录(1061-1070)

1061-1070

1061 Dating(20)

#include<iostream>
#include<string>
#include<cstdio>
using namespace std;

int main(){
    string a, b, c, d;
    int date, hour, minute;
    string week[7] = {"MON","TUE","WED","THU","FRI","SAT","SUN"};
    cin >> a >> b >> c >> d;
    int i = 0;
    for(i = 0 ; i < a.length() && i < b.length(); i++){
        if(a[i] == b[i] && a[i] >= 'A' && a[i] <= 'G'){
            date = a[i]-'A';
            break;
        }
    }
    i++;
    for( ; i < a.length() && i < b.length(); i++){
        if(a[i] == b[i]){
            if(isdigit(a[i])){
                hour = a[i] - '0';
            }else if(a[i] >= 'A' && a[i] <= 'N'){
                hour = a[i] - 'A' + 10;
            }else{
                continue;
            }
            break;
        }
    }
    for(int j = 0; j < c.length() && j < d.length(); j++){
        if(c[j] == d[j] && isalpha(c[j])){
            minute = j;
            break;
        }
    }
    
    cout << week[date];
    printf(" %02d:%02d", hour, minute);
}

1062 Talent and Virtue(25)

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
struct person{
    int id, virtue, talent;
    person(int _id, int _virtue, int _talent){
        id = _id;
        virtue = _virtue;
        talent = _talent;
    }
};
bool cmp(person p1, person p2){
    if((p1.virtue + p1.talent) != (p2.virtue + p2.talent)){
        return (p1.virtue + p1.talent) > (p2.virtue + p2.talent);
    }else if(p1.virtue != p2.virtue){
        return p1.virtue > p2.virtue;
    }else{
        return p1.id < p2.id;
    }
}
vector<person> v[4];

int main(){
    int n, l, h;
    cin >> n >> l >> h;
    int ans = n;
    for(int i = 1; i <= n; i++){
        int id, vir, tal;
        cin >> id >> vir >> tal;
        if(vir < l || tal < l){
            ans--;
        }else if(vir >= h && tal >= h){
            v[0].push_back(person(id, vir, tal));
        }else if(vir >= h && tal < h){
            v[1].push_back(person(id, vir, tal));
        }else if(vir < h && tal < h && vir >= tal){
            v[2].push_back(person(id, vir, tal));
        }else{
            v[3].push_back(person(id, vir, tal));
        }
    }
    cout << ans << endl;
    for(int i = 0; i < 4; i++){
        sort(v[i].begin(), v[i].end(), cmp);
        for(int j = 0; j < v[i].size(); j++){
            cout << v[i][j].id << " " << v[i][j].virtue << " " << v[i][j].talent << endl;
        }
    }
}

1063 Set Similarity(25)

#include<iostream>
#include<set>
using namespace std;
set<int> s[52];
int main(){
    int n, k;
    cin >> n;
    for(int i = 1; i <= n; i++){
        int len, temp;
        cin >> len;
        for(int j = 1; j <= len; j++){
            cin >> temp;
            s[i].insert(temp);
        }
    }
    cin >> k;
    int k1, k2;
    for(int i = 1; i <= k; i++){
        cin >> k1 >> k2;
        int same_ele = 0;
// set无法通过索引访问
//         for(int i = 0; i < s[k1].size(); i++){
//             if(s[k2].count(s[k1][i])){
//                 same_ele++;
//             }
//         }
        for(auto it = s[k1].begin(); it != s[k1].end(); it++){
            if(s[k2].count(*it)){
                same_ele++;
            }
	    }
        printf("%.1f%\n", (same_ele * 1.0) / ((s[k1].size() + s[k2].size() - same_ele) * 1.0) * 100);
    }
}

1064 Complete Binary Search Tree(30)

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 1001;

int nums[maxn], ans[maxn], k = 0, n;
//中序遍历二叉树,在遍历的过程中将有序序列填入
//结合BST和CBT的性质
void dfs(int root){
    if(root >= n){
        return;
    }
    dfs(root * 2 + 1);
    ans[root] = nums[k++];
    dfs(root * 2 + 2);
}
int main(){
    cin >> n;
    for(int i = 0; i < n; i++){
        cin >> nums[i];
    }
    sort(nums, nums + n);
    dfs(0);
    for(int i = 0; i < n; i++){
        if(i != 0){
            cout << " ";
        }
        cout << ans[i];
    }
    return 0;
}

1065 A+B and C (64bit)(20)

// n = input()

// for i in range(int(n)):
//     a, b, c = input().split(' ')
//     print("Case #" + str(i + 1) + ": " + str((int(a) + int(b) > int(c))).lower())

#include<cstdio>
#define ll long long
using namespace std;
int main(){
    int n;
    scanf("%d", &n);
    for(int i = 1; i <= n; i++){
        ll a, b, c;
        scanf("%lld %lld %lld", &a, &b, &c);
        ll sum = a + b;
        //需要考虑溢出
        if(a > 0 && b > 0 && sum <= 0){
            printf("Case #%d: true\n", i);
        }
        else if(a < 0 && b < 0 && sum >=0){
            printf("Case #%d: false\n", i);
        }
        else if(sum > c){
            printf("Case #%d: true\n", i);
        }else{
            printf("Case #%d: false\n", i);
        }
    }
    return 0;
}

1066 Root of AVL Tree(25)

#include<iostream>
using namespace std;
struct node{
    int val;
    node *left, *right;
};
node *rotateLeft(node *root){
    node *temp = root -> right;
    root -> right = temp -> left;
    temp -> left = root;
    return temp;
}

node *rotateRight(node *root){
    node *temp = root -> left;
    root -> left = temp -> right;
    temp -> right = root;
    return temp;
}

node *rotateLeftRight(node *root){
    root -> left = rotateLeft(root -> left);
    return rotateRight(root);
}

node *rotateRightLeft(node *root){
    root -> right = rotateRight(root -> right);
    return rotateLeft(root);
}

int *getHeight(node *root){
    if(root == NULL){
        return 0;
    }
    return max(getHeight(root -> left), getHeight(root -> right)) + 1;
}
node *insert(node *root, int val){
    if(root == NULL){
        root = new node;
        root -> val = val;
        root -> right = root -> left = NULL;
    }else if(val < root -> val){
        root -> left = insert(root -> left, val);
        if(getHeight(root -> left) - getHeight(root -> right) == 2){
            if(val < root -> left -> val){
                root = rotateRight(root);
            }else{
                root = rotateLeftRight(root);
            }
        }
    }else{
        root -> right = insert(root -> right, val);
        if(getHeight(root -> left) - getHeight(root -> right) == -2){
            if(val > root -> right -> val){
                root = rotateLeft(root);
            }else{
                root = rotateRightLeft(root);
            }
        }
    }
    return root;
}
int main(){
    int n, val;
    cin >> n;
    node *root = NULL;
    for(int i = 1; i <= n; i++){
        cin >> val;
        root = insert(root, val);
    }
    cout << root -> val;
    return 0;
}

1067 Sort with Swap(0, i)(25)

#include<iostream>
using namespace std;
const int maxn = 100001;
void swap(int &a, int &b){
    int temp = a;
    a = b;
    b = temp;
}
int a[maxn];
int main(){
    int n;
    cin >> n;
    for(int i = 0; i < n; i++){
        int temp;
        cin >> temp;
        a[temp] = i;
    }
    int ans = 0;
    for(int i = 1; i < n; i++){
        if(i != a[i]){
            while(a[0] != 0){
                swap(a[0], a[a[0]]);
                ans++;
            }
            if(i != a[i]){
                swap(a[0], a[i]);
                ans++;
            }
        }
    }
    cout << ans;
    return 0;
}

1068 Find More Coins(30)

// dfs加剪枝
// #include<iostream>
// #include<vector>
// #include<algorithm>
// using namespace std;

// vector<int> nums;
// vector<int> temp_res, res;
// int sum = 0;
// int n, m;
// int flag = 0;

// void dfs(int k){
//     if(sum > m || flag == 1){
//         return;
//     }
    
//     if(sum == m && flag == 0){
//         res = temp_res;
//         flag = 1;
//         return;
//     }
//     for(int i = k; i <=n; i++){
//         temp_res.push_back(nums[i]);
//         sum += nums[i];
//         dfs(i + 1);
//         sum -= nums[i];
//         temp_res.pop_back();
//     }
// }
// int main(){
//     cin >> n >> m;
//     int all = 0;//特判 最后一个测试样例 全部加起来都没有m
//     for(int i = 1; i <= n ; i++){
//         int temp;
//         cin >> temp;
//         nums.push_back(temp);
//         all += temp;
//     }
//     if(all < m){
//         cout << "No Solution" << endl;
//         return 0;
//     }
//     sort(nums.begin(), nums.end());
//     dfs(0);
//     if(flag == 1){
//         for(int i = 0 ;i < res.size(); i++){
//             if(i != 0){
//                 cout << " ";
//             }
//             cout << res[i];
//         }
//     }else{
//         cout << "No Solution";
//     }

// }


//dp from liuchuo
//dp[i]表示 前i个物品构造的最大价值

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int dp[10010], w[10010];
bool choice[10010][110];
int cmp1(int a, int b){return a > b;}
int main() {
    int n, m;
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= n; i++)
        scanf("%d", &w[i]);
    sort(w + 1, w + n + 1, cmp1);
    for(int i = 1; i <= n; i++) {
        for(int j = m; j >= w[i]; j--) {
            if(dp[j] <= dp[j-w[i]] + w[i]) {
                choice[i][j] = true;
                dp[j] = dp[j-w[i]] + w[i];
            }
        }
    }
    if(dp[m] != m) printf("No Solution");
    else {
        vector<int> arr;
        int v = m, index = n;
        while(v > 0) {
            if(choice[index][v] == true) {
                arr.push_back(w[index]);
                v -= w[index];
            }
            index--;
        }
        for(int i = 0; i < arr.size(); i++) {
            if(i != 0) printf(" ");
            printf("%d", arr[i]);
        }
    }
    return 0;
}

1069 The Black Hole of Numbers(20)

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool cmp_1(char a, char b){
    return a > b;
}
bool cmp_2(char a, char b){
    return a < b;
}
int main(){
    string s;
    cin >> s;
    //开始要先补齐
    s.insert(0, 4 - s.length(), '0');
    do{
        string a = s, b = s;
        sort(a.begin(), a.end(), cmp_1);
        sort(b.begin(), b.end(), cmp_2);
        int res = stoi(a) - stoi(b);
        s = to_string(res); 
        s.insert(0, 4 - s.length(), '0');
        cout << a << " - " << b << " = " << s << endl;
    }while(s != "6174" && s != "0000");
    return 0;
    
}

1070 Mooncake(25)

#include<algorithm>
#include<iostream>
using namespace std;
struct mooncake{
    double tons, price, one_price;
}m[1001];
bool cmp(mooncake m1, mooncake m2){
    return m1.one_price > m2.one_price;
}
int main(){
    int n, d;
    cin >> n >> d;
    for(int i = 0; i < n; i++){
        cin >> m[i].tons;
    }
    for(int i = 0; i < n; i++){
        cin >> m[i].price;
        m[i].one_price = m[i].price / m[i].tons;
    }
    sort(m, m + n, cmp);
    double res;
    for(int i = 0; i < n; i++){
        if(d > m[i].tons){
            d -= m[i].tons;
            res += m[i].price;
        }else{
            res += m[i].one_price * d;
            break;
        }
    }
    printf("%.2f", res);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值