出入境表:
护照号 签证号 出入时间 出入标识
001 1001 20230101 入
001 20230210 出
001 20230220 入
001 20230221 出
001 20230226 入
001 1001 20230227 入
001 1001 20230301 入
001 20230310 出
001 20230311 出
001 1002 20230401 入
001 20230405 出
001 1004 20230101 入
001 20230102 出
001 1004 20230301 入
001 20230301 出
001 1005 20230401 入
001 20230504 出
签证表
护照号 签证号 签证停留期限
001 1001 30
001 1002 30
001 1003 30
001 1004 30
001 1005 30
为了计算境内实际停留期超过签证停留期80%天数的持证次数,我们需要首先处理出入境记录,将其按照护照号和入离时间排序,并且去除单个入境或出境的无效记录。接下来,我们将处理后的出入境记录与签证表结合,以计算出每个签证的实际停留天数,并与签证停留期限进行比较。
以下是详细的步骤描述:
步骤一:排序和去除无效记录
首先,我们需要将出入境记录按照护照号和入离时间排序。然后,我们遍历排序后的记录,去除单个入境或出境的无效记录。在这个例子中,我们可以观察到如下无效记录:
护照号001,签证号1003的签证在出入境记录中没有出现,因此我们可以忽略它。
护照号001,签证号1001的第二条出境记录(20230227)没有匹配的出境记录,因此它也是无效的。
护照号001,签证号1001的第三条出境记录(20230311)没有匹配的入境记录,因此它也是无效的。
处理后的出入境记录如下:
护照号 签证号 出入时间 出入标识
001 1001 20230101 入
001 20230210 出
001 1001 20230301 入
001 20230310 出
001 1002 20230401 入
001 20230405 出
001 1004 20230101 入
001 20230102 出
001 1004 20230301 入
001 20230301 出
001 1005 20230401 入
001 20230504 出
步骤二:计算实际停留天数
接下来,我们遍历处理后的出入境记录,并为每个签证计算实际停留天数。对于每个入境记录,我们找到对应的出境记录,并计算两个时间之间的天数差,即为此次入境的实际停留天数。
例如,对于签证号1001的第一次入境(20230101)和出境(20230210),实际停留天数为:20230210 - 20230101 + 1 = 41天。
对于签证号1001的第二次入境(20230301)和出境(20230310),实际停留天数为:20230310 - 20230301 + 1 = 10天。
我们按照这样的方法计算所有签证的实际停留天数。
步骤三:比较实际停留天数与签证停留期限
现在,我们有了每个签证的实际停留天数,接下来我们需要将这些天数与签证表中的签证停留期限进行比较。在这个例子中,签证表告诉我们:
护照号 签证号 签证停留期限
001 1001 30
001 1002 30
001 1003 30
001 1004 30
001 1005 30
对于签证号1001,第一次入境的实际停留天数是41天,超过了签证停留期限30天的80%(即24天)。第二次入境的实际停留天数是10天,没有超过80%的阈值。
因此,我们统计所有超过80%阈值的签证次数。在这个例子中,只有签证号1001的第一次入境满足条件,所以持证次数为1。
注意事项
如果出境记录中签证号字段为空,但可以通过护照号和其他信息(如入离时间)与入境记录匹配,则仍应视为有效记录。
如果存在多次入境和出境,需要分别计算每次入境的实际停留天数,并检查是否超过签证停留期限的80%。
如果某个签证的实际停留天数在某次入境时超过了80%的阈值,即使之后的入境没有超过,也仍然算作一次满足条件的持证次数。因为题目要求的是“超过签证停留期80%天数的持证次数”,而不是“每次入境都超过80%的持证次数”。