zoukankan      html  css  js  c++  java
  • P1154 奶牛分厩

    题目链接

    题面:

    换句话说:

      给定n和长度为n的数组a , 你要求出最小的k使得,没有两个a[i] 、a[j] 会满足:a[i] % k = a[j] % k

    思路:

      

      所以,求出数组a的两两差值x,x的所有因子都不满足条件

      然后遍历找第一个满足条件的k

    代码:

      一开始是枚举差值,找他的所有因子进行标记,但是开了o2还是又一个点T,这是90分的代码:

      

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn =  1e6 + 10;
    #define ll long long
    #define ios std::ios::sync_with_stdio(false)
    const ll INF(0x3f3f3f3f3f3f3f3fll);
    const int inf(0x3f3f3f3f);
    
    int a[maxn];
    int cha[maxn];
    int ans[maxn];
    vector<int>vec[maxn];
    int vis[maxn];
    signed main()
    {
        ios;
        cin.tie(0);
        int n;
        cin >> n;
        for(int i = 1 ; i <= n ; i ++) cin >> a[i];
        for(int i = 1 ; i <= n ; i ++){
            for(int j = i + 1 ; j <= n ; j ++){
                int now = abs(a[j] - a[i]);
                if(vis[now])continue;
                vis[now] ++;
                ans[now] ++;
                for(int k = 2 ; k * k <= now ; k ++){
                    if(now % k == 0){
                        ans[k] ++;
                        if(now / k != k) ans[now / k] ++;
                    }
                }
            }
        }
        for(int i = n ; i <= 1e6 ; i ++){
            if(!ans[i]){
                cout << i <<'
    ';
                break;
            }
        }
        return 0;
    }
    View Code

      后来看了题解别人的写法发现 , 先标记下差值,然后从n开始枚举k , 判断k的倍数是否被标记过 , 如果没有,就是答案,这样就过了QAQ , 这是AC的:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn =  1e6 + 10;
    #define ll long long
    #define ios std::ios::sync_with_stdio(false)
    const ll INF(0x3f3f3f3f3f3f3f3fll);
    const int inf(0x3f3f3f3f);
    
    int a[maxn];
    int cha[maxn];
    int ans[maxn];
    vector<int>vec[maxn];
    int vis[maxn];
    signed main()
    {
        ios;
        cin.tie(0);
        int n , maxx = 0;
        cin >> n;
        for(int i = 1 ; i <= n ; i ++) cin >> a[i] , maxx = max(maxx , a[i]);
        for(int i = 1 ; i <= n ; i ++){
            for(int j = i + 1 ; j <= n ; j ++){
                int now = abs(a[j] - a[i]);
                if(vis[now])continue;
                vis[now] ++;
                ans[now] ++;
            }
        }
        for(int i = n ; i <= maxx ; i ++){
            bool ok = true;
            for(int j = i ; j <= maxx ; j += i){
                if(ans[j]){
                    ok = false;
                    break;
                }
           }
           if(ok){
                cout << i << '
    ';
                break;
           }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    echarts官网上的动态加载数据bug被我解决。咳咳/。
    jquery中的jsonp和js中的jsonp还有配合php实现的jsonp。
    jquery中的done和always解决ajax问题
    vue2.0使用watch监听对象属性
    gulp配合vue压缩代码格式化
    支持flv的播放神器
    前端组件化-Web Components【转】
    自定义异步加载资源插件
    【leetcode刷题笔记】Two Sum
    【leetcode刷题笔记】Longest Common Prefix
  • 原文地址:https://www.cnblogs.com/GoodVv/p/13595484.html
Copyright © 2011-2022 走看看