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);
}