題目鏈接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5979
Thanks, TuSimple!
Time Limit: 1 Second Memory Limit: 65536 KB
In the very first sentence of the very first problem, we would like to give our sincere thanks to TuSimple, the sponsor of this contest.
Founded in 2015, TuSimple is a global autonomous trucking solution company headquartered in San Diego, operating self-driving trucks out of Tucson, Arizona. TuSimple is now developing a commercial-ready Level 4 (SAE) fully-autonomous driving solution for the logistics industry. TuSimple’s trucks are the first and only capable of self-driving from depot-to-depot and do so every day for its customers. The company is driven by a mission to increase safety, decrease transportation costs, and reduce carbon emissions.
Nowadays, the trucking industry is currently facing a shortage of 50000 drivers (which is expected to increase to 175000 by the end of 2024) and is approaching a 100 percent turnover rate per year with an average driver age of 49 years old. According to a PwC study, autonomous trucking technologies will reduce annual operating costs for a traditional average long-haul truck by 28 percent in 2025. TuSimple is aiming to transform the 740-billion U.S. trucking industry by cutting costs, reducing carbon emissions and eradicating some of the challenges currently faced by operators.
Building the industry’s first 1000-meter perception system, TuSimple soon becomes the pioneer in the industry. As is known to us, 1000 meters can provide 35 seconds of reaction time on average at highway speeds, enabling the system to make the safest and most efficient driving decisions. Even in the adverse weather conditions, the perception system is still designed to identify objects and obstacles, ensuring the safety of both cargoes, trucks, and passers-by. On the other hand, TuSimple’s latest proprietary AI is now capable of long-distance highway driving and complex surface street driving, which allows fully autonomous deliveries from one depot to another.
Despite their advanced technology and an enormous sense of mission in the industry, TuSimple shares the corporate culture of honesty, realistic, exploration and innovation among their employees from bottom to top, which allows them to attract more and more elites from all expertise to join and get involved. “Here’s why a little-known autonomous trucking company is beating Tesla and Waymo in the race for driverless big rigs”, commented by Business Insider.
The future of trucking is now!
As a manager of TuSimple, you are going to hold a dancing party for both the Development Department and the Marketing Department. There will be gentlemen and ladies in total and they are going to dance in pairs. After a careful investigation, we have already known that for each person, they like to dance with either a taller person or a person with smaller height. To simplify the problem, there are no two persons of the same height and people are only allowed to dance with a person of the opposite gender. In order to reserve a proper dancing field, you must calculate the maximum possible number of pairs of people dancing at the same time.
Input
There are multiple test cases. The first line of the input contains an integer , indicating the number of test cases. For each test case:
The first line contains two integers (1<n,m<100000), indicating the number of gentlemen and ladies.
The second line contains integers a1,a2,a3…an (0 ≤\leq≤ ai < 231-1, ai != ajfor all i != j ), indicating the height of each gentleman.
The third line contains integers b1,b2,b3…bm(0 ≤\leq≤ bi < 231-1, bi != bjfor all i != j ), indicating the height of each lady.
The fourth line contains integers p1,p2,p3…pn(0 ≤\leq≤ pi ≤\leq≤ 1), indicating the preference of each gentleman. If , it means gentleman prefers to dance with a lady of smaller height. Otherwise it indicates he prefers to have a taller dancing partner.
The fifth line contains integers q1,q2,q3…qm(0 ≤\leq≤ qi ≤\leq≤ 1), indicating the preference of each lady. If , it means lady prefers to dance with a gentleman of smaller height. Otherwise it indicates she prefers to have a taller dancing partner.
It’s guaranteed that the sum of and of all test cases will not exceed 106 and ai != bj for all 1≤\leq≤ i ≤\leq≤ n, 1≤\leq≤ j ≤\leq≤ m.
Output
For each test case output one line containing one integer, indicating the answer.
Sample Input
1
3 3
1 2 5
3 4 6
1 1 0
0 0 1
Sample Output
2
Hint
In the sample test case, the 1st gentleman can dance with the 2nd lady, and the 2nd gentleman can dance with the 1st lady.
題目大意:
先輸入一個整數t代表輸入的測試組數,對于每組測試用例,先輸入兩個整數n,m,分別代表男士和女士的人數,下面四行,第一行輸入的是n名男士的身高,第二行為m名女士的身高,第三行為男士期望他的舞伴(女)身高的標準,0代表他期望他的舞伴比他矮,1代表他期望他的舞伴比他高,第四行代表女士期望她的舞伴(男)身高的標準,同樣,0代表希望舞伴比她矮,1代表希望舞伴比她高,問最多能有多少對舞者。
解題思路:
通過題意,我們能知道只有當男士要求為0,女士要求為1時,他們才能做舞伴,同理,男士要求為1,女士要求為0也一樣,所以我們可以將男士要求為0的身高存在vector數組a0中,要求為1的存在vector數組a1中,女士同理存在b0,b1中,通過查找a0,b1中與a1,b0中符合題意的對數即可得到結果.
代碼:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <set>
#include <utility>
#include <sstream>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define inf 0x3f3f3f3f
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define lep(i,l,r) for(int i=l;i>=r;i--)
#define ms(arr) memset(arr,0,sizeof(arr))
//priority_queue<int,vector<int> ,greater<int> >q;
const int maxn = (int)1e5 + 5;
const ll mod = 1e9+7;
vector<int> a0,a1,b0,b1;
int a[100100],b[100100];
int main()
{#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);#endif//freopen("out.txt", "w", stdout);ios::sync_with_stdio(0),cin.tie(0);int t;scanf("%d",&t);while(t--) {a0.clear();a1.clear();b0.clear();b1.clear();int n,m;scanf("%d %d",&n,&m);rep(i,1,n) scanf("%d",&a[i]);rep(i,1,m) scanf("%d",&b[i]);int nape;int len1=0,len2=0,len3=0,len4=0;rep(i,1,n) {scanf("%d",&nape);if(nape==0) a0.push_back(a[i]),len1++;if(nape==1) a1.push_back(a[i]),len2++;}rep(i,1,m) {scanf("%d",&nape);if(nape==0) b0.push_back(b[i]),len3++;if(nape==1) b1.push_back(b[i]),len4++;}sort(a0.begin(),a0.end());sort(a1.begin(),a1.end());sort(b0.begin(),b0.end());sort(b1.begin(),b1.end());int ans=0;for(int i=0,j=0;i<len1&&j<len4;) {if(a0[i]>b1[j]) {ans++;i++;j++;}else i++;}for(int i=0,j=0;i<len2&&j<len3;) {if(b0[j]>a1[i]) {ans++;i++;j++;}else j++;}printf("%d\n",ans);}return 0;
}