2020.10.09个人赛
题目:High School: Become Human
思路:
这道题就是问一下xy ,与 yx的大小关系,看完数据,这个肯定是不能直接算的,所以肯定是要同时取对数,将次数放下来,这样就很好比较了,我做这道题时,脑门一热,自以为是的认为只有 x = y时才会相等,忘记了 24=42 ,菜鸡落泪。
解题代码:
#include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <string> #include <cstring> #include <map> #include <set> using namespace std; const long long N = 1e10 + 7; const int maxn = 2e5 + 5; const long long INF = 8e18; typedef long long ll; #define for0(i,n) for(int i = 0;i < n;i++) #define for1(i,n) for(int i = 1;i <= n;i++) map<string,int>ma; int main() { ll x,y; cin >> x >> y; if(x == y) cout << "=" << endl; else{ if(y * log(x) > x * log(y)) cout << ">" << endl; else if(y * log(x) < x * log(y)) cout << "<" << endl; else cout << "=" << endl; } return 0; }
题目:Three displays
思路:
这道题就是找三个物品,编号 i<j<k ,并且三者的花费符合 ci < cj < ck ,问最小花费,若不存在输出-1,这个通过遍历中间位置来更新最小花费,向前找小于它的,向后找大于它的,维护最小值就行。
解题代码:
#include <cstdio> #include <iostream> #include <algorithm> #include <cmath> #include <string> #include <cstring> #include <map> #include <set> using namespace std; const long long N = 1e10 + 7; const int maxn = 2e5 + 5; const long long INF = 8e18; typedef long long ll; #define for0(i,n) for(int i = 0;i < n;i++) #define for1(i,n) for(int i = 1;i <= n;i++) struct p{ int s; ll c; }pp[3010]; int main() { ios::sync_with_stdio(false); ll minnum = INF; int n,sign = 0; cin >> n; for(int i = 0;i < n;i++) cin >> pp[i].s; for(int i = 0;i < n;i++) cin >> pp[i].c; int sign1,sign2; for(int i = 1;i < n-1;i++){ ll num = pp[i].c; sign1 = 0,sign2 = 0; ll tempmin1 = INF; ll tempmin2 = INF; for(int j = 0;j < i;j++){ if(pp[j].s < pp[i].s){ tempmin1 = min(tempmin1,pp[j].c); sign1 = 1; } } for(int j = i+1;j < n;j++){ if(pp[j].s > pp[i].s){ tempmin2 = min(tempmin2,pp[j].c); sign2 = 1; } } if(sign1 && sign2){ sign = 1; num += tempmin1; num += tempmin2; minnum = min(minnum,num); } } if(sign) cout << minnum << endl; else cout << -1 << endl; return 0; }