题解九:P7633 [COCI 2010/2011 #5] BRODOVI

· · 题解

传送门:P7633 [COCI 2010/2011 #5] BRODOVI。
双倍经验:SP8349 BRODOVI - BRODOVI。

题意

有一些船只,从第一天开始每隔固定的时间就会来到港口。现在给出 n 个有船只来到的日子,求最少有多少只船。

思路

首先我们在题目中看到:

例如,长度为 3 的间隔表示某艘船在第 1 天、第 4 天、第 7 天、第 10 天等时间访问港口。

观察它,我们就能得出几句话:

从这些废话中,我们就可以得出题目解法:

还有一点,上面之所以要减一,只是因为第一位是 1。如果第一位是 2 就会减二。那如果第一位是 0,是不是就不用减了?所以我们在输入时就顺手把所有数字都减一,就把第一位变成了 0。显然这样不会影响我们的答案。

参考代码

//241ms / 844.00KB / 392B C++14 O2
#include<bits/stdc++.h>
#define ll long long 
using namespace std;
ll n,a[5010];
bool flag;
vector<ll>v;//vis 数组
int main(){
    cin>>n;
    for(ll i=1;i<=n;i++){
        cin>>a[i];
        a[i]--;//减一
    }for(ll i=2;i<=n;i++){
        flag=false;//记录这条船在 vis 中能不能找到
        for(ll j:v)//提示:c++98 可能用不了这种写法
            if(a[i]%j==0){//找到了
                flag=true;
                break;//跳出
            }
        if(!flag)//没找到
            v.push_back(a[i]);//加入数组
    }cout<<v.size();//数组长度,也就是船的个数
    return 0;//好习惯
}//喜欢就点个赞呗~ QAQ