Apartments(文件读写)WA60求救 !!!

题目描述

有 n 个申请人和 m 个空闲的公寓。你的任务是分配公寓,以便尽可能多的申请人能够得到一个公寓。每个申请人都有一个期望的公寓大小,他们会接受任何大小与期望大小接近的公寓。

输入格式

从文件apartments.in 中读入数据。

第一行输入三个整数 n,m 和 k:申请人的数量,公寓的数量和最大允许差异。接下来一行包含 n 个整数 a1, a2, …, an:每个申请人的期望公寓大小。如果申请人的期望大小为 x,他或她将接受任何大小在 x-k 和 x+k 之间的公寓。最后一行包含 m 个整数 b1, b2, …, bm:每个公寓的大小。

输出格式

输出到文件 apartments.out 中。

输出一个整数:能够得到公寓的申请人的数量。

样例

Input 1

4 3 5 60 45 80 60 30 60 75

Output 1

2

数据范围

1 ≤ n, m ≤ 2 * 10^5, 0 ≤ k ≤ 10^9, 1 ≤ ai, bi ≤ 10^9

样例解释

对于第一个测试样例,申请人 1 和申请人 3 可以得到一个公寓,所以输出为 2。

我已通过阳历样例
在以下附上源代码:

#include <bits/stdc++.h>
#pragma GCC optimize(2)
#pragma G++ optimize(2)
using namespace std;
int n,m,k;
int a[200010],b[200010];
int vis[200010];
int main(){
    freopen("apartments.in","r",stdin);
    freopen("apartments.out","w",stdout);
    ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
    cout.tie(nullptr);
    cin >> n >> m >> k;
    for (int i = 1; i <= n; i++){
        cin >> a[i];
    }
    for (int i = 1; i <= m; i++){
        cin >> b[i];
    }
    sort(a + 1, a + n + 1);
    sort(b + 1, b + n + 1);
    int sum = 0;
    for (int j = 1; j <= n; j++){
        for (int i = 1; i <= m; i++){
        	if (vis[i] == 0){
                if (a[j] - k <= b[i]){
                    if (a[j] + k >= b[i]){
                		sum++;
                		vis[i] == 1;
                		break;
                    }
    			} else{
                    vis[i] = 1;
                }
            }
    	}
    }
    cout << sum;
    return 0;
}

哪位大佬 救救我 ?

这是什么
而且这就是普通的贪心
课上有例题
分发蛋糕
好好想想你为什么错