2019牛客暑期多校训练营 第一场
作者:互联网
牛客多校还是挺难的。三个人各种白给。
题目链接:https://ac.nowcoder.com/acm/contest/881#question
A:
题意就是找到两个数组第一次出现极小值位置不一样的情况。拿样例来说:a={3,1,5,2,4}, b={5 2 4 3 1}。a数组在第四个位置出现了极小值,而b数组在第四个位置并没有出现极小值。
故用两个单调递增栈来维护极小值位置最方便。只要两个栈弹出数量不一样就说明出现了极小值位置不一的情况。
1 /* basic header */ 2 #include <bits/stdc++.h> 3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i) 10 #define rep0(i,a,b) for(int i=a;i<b;++i) 11 #define eps 1e-8 12 #define int_inf 0x3f3f3f3f 13 #define ll_inf 0x7f7f7f7f7f7f7f7f 14 #define lson (curpos<<1) 15 #define rson (curpos<<1|1) 16 #define mid (curl+curr>>1) 17 /* namespace */ 18 using namespace std; 19 /* header end */ 20 21 const int maxn = 1e5 + 10; 22 int n, a[maxn], b[maxn]; 23 stack<int>s1, s2; 24 25 int main() { 26 a[0] = b[0] = 0; 27 while (~scanf("%d", &n)) { 28 rep1(i, 1, n) scanf("%d", &a[i]); 29 rep1(i, 1, n) scanf("%d", &b[i]); 30 while (!s1.empty()) s1.pop(); 31 while (!s2.empty()) s2.pop(); 32 s1.push(1); s2.push(1); 33 int p; 34 for (p = 2; p <= n; p++) { 35 int num = 0; 36 while (!s1.empty() && a[p] < a[s1.top()]) num++, s1.pop(); 37 while (!s2.empty() && b[p] < b[s2.top()]) num--, s2.pop(); 38 if (num) break; 39 s1.push(p); s2.push(p); 40 } 41 printf("%d\n", p - 1); 42 } 43 return 0; 44 }View Code
D:
神仙题。
F:
样例给了三组毫无作用的数据,恶意满满。
最快的做法是设一个大的三角形(0,0),(10000,0),(0,10000),枚举三角形内所有的整点并维护最终答案。然后计算答案和三角形面积比例,算出来正好逼近11/2。
实际上11/2这个数很难看出来。计算答案和三角形面积的两倍(设为S。这个用叉乘就可以做到,不仅方便而且比海伦公式精度高,海伦公式会爆long long)的比例,得到21.×××××,再试一下输出10.5S和11S,答案正好就是11S。
1 /* basic header */ 2 #include <bits/stdc++.h> 3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i) 10 #define rep0(i,a,b) for(int i=a;i<b;++i) 11 #define eps 1e-8 12 #define int_inf 0x3f3f3f3f 13 #define ll_inf 0x7f7f7f7f7f7f7f7f 14 #define lson (curpos<<1) 15 #define rson (curpos<<1|1) 16 #define mid (curl+curr>>1) 17 /* namespace */ 18 using namespace std; 19 /* header end */ 20 21 ll p1, q1, p2, q2, p3, q3; 22 23 int main() { 24 while (~scanf("%lld%lld%lld%lld%lld%lld", &p1, &q1, &p2, &q2, &p3, &q3)) { 25 pair<ll, ll> x = mp(p2 - p1, q2 - q1), y = mp(p3 - p1, q3 - q1); 26 ll ans = x.first * y.second - y.first * x.second; 27 printf("%lld\n", (ll)abs(ans) * 11); 28 } 29 return 0; 30 }View Code
G:
神仙题。
J:
比较两个分数的大小。Python题,Java题,__int128题。
1 import sys 2 3 for line in sys.stdin: 4 (x, y, a, b) = line.split() 5 x = int(x) 6 y = int(y) 7 a = int(a) 8 b = int(b) 9 if (x * b == a * y): 10 print("=") 11 elif (x * b < a * y): 12 print("<") 13 else: 14 print(">")View Code
标签:int,ll,多校,long,牛客,2019,lld%,极小值,define 来源: https://www.cnblogs.com/JHSeng/p/11209641.html