• 【数论】【暴力】bzoj4052 [Cerc2013]Magical GCD


    考虑向一个集合里添加一个数,它们的gcd要么不变,要么变成原gcd的一个约数。因此不同的gcd只有log个。

    所以对于每个位置,维护一个表,存储从这个位置向前所有的不同的gcd及其初始位置,然后暴力更新答案,反正这个表不会很长。

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    #define N 100001
    typedef long long ll;
    typedef pair<ll,int> Point;
    Point table[101],t[101];
    int T,n,en,e2;
    ll gcd(ll a,ll b){return (!b)?a:gcd(b,a%b);}
    int main()
    {
    	ll x;
    	scanf("%d",&T);
    	for(;T;--T)
    	  {
    	  	ll ans=0;
    	  	en=0;
    	  	scanf("%d",&n);
    	  	for(int i=1;i<=n;++i)
    	  	  {
    	  	  	scanf("%lld",&x);
    	  	  	for(int j=1;j<=en;++j)
    	  	  	  table[j].first=gcd(table[j].first,x);
    	  	  	table[++en]=make_pair(x,i);
    	  	  	sort(table+1,table+1+en);
    	  	  	e2=0;
    	  	  	for(int j=1;j<=en;++j)
    	  	  	  if(table[j].first!=table[j-1].first)
    	  	  	    t[++e2]=table[j];
    	  	  	en=e2;
    	  	  	memcpy(table+1,t+1,sizeof(Point)*e2);
    	  	  	for(int j=1;j<=en;++j)
    	  	  	  ans=max(ans,table[j].first*(ll)(i-table[j].second+1));
    	  	  }
    	  	printf("%lld
    ",ans);
    	  }
    	return 0;
    }
  • 相关阅读:
    Windows 7 远程协助
    Windows 7 帮助和支持资源—第三方网站
    Windows 7 帮助和支持资源—第三方软件
    数据结构-队列
    数据结构-栈
    pycharm每日技巧-2
    数据结构-链表
    时间处理-1
    二维数组的排序
    《疯狂的简洁》书摘
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/4496321.html
Copyright © 2020-2023  润新知