2020牛客暑期多校训练营(第六场)题解

B:Binary Vector
详解
f(n)=f(n-1)* (2^n-1) / 2^n = f(n-1)*(1-1/2^n)

#include
using namespace std;
#define ll long long
const int mod=1e9+7;
ll a[20000010],x=5e8+4,y=5e8+4;
int main()
{
    ios::sync_with_stdio(false);
    int t,n;
    a[1]=5e8+4;
    for(int i=2;i<=2e7;i++)
    {
    	x=x*y%mod;
    	a[i]=(a[i-1]-a[i-1]*x)%mod+mod;
	}
	for(int i=2;i<=2e7;i++)
	 a[i]^=a[i-1];   //ans=f1^f2^...^fn
    cin>>t;
    while(t--)
    {
     cin>>n;	
     cout<<a[n]<<endl;
	}
    return 0;
}


C:Combination of Physics and Maths
寻找单列的子列最大值
原因

#include
using namespace std;
#define ll long long
double a[210][210];
int main()
{
    int t,n,m;
    double maxn;
    cin>>t;
    while(t--)
    {
    	cin>>n>>m;
    	for(int i=1;i<=n;i++)
    	 for(int j=1;j<=m;j++)
    	 scanf("%lf",&a[i][j]);
    	maxn=1;
    	for(int i=1;i<=m;i++)
    	{
    		double sum=0;
    		for(int j=1;j<=n;j++)
    		{
    			sum+=a[j][i];
    			maxn=max(maxn,sum/a[j][i]);
			}
		}
		printf("%.8f\n",maxn);
	}
    return 0;
}


E:Easy Construction
构造:n K (x1,x2) (x3,x4) … :x1+x2=n,x3+x4=n; 偶数成立
或: n (x1,x2) (x3,x4)… 奇数成立
有趣的现象:
6:6,1+5,2+4,3+3 :k即3
5:6,1+4, 2+3 :k即0即第二种构造

#include
#include
#include
using namespace std;
int a[5010];
int main()
{
 int n,k,sum=0;
 cin>>n>>k;
 if(k!=(n*(n+1)/2)%n)
 {
 	cout<<-1<<endl;return 0;
 }
 if((k&&n%2)||(k==0&&n%2==0))
 {
 	cout<<-1<<endl;return 0;
 }
 if(k)
 {
 	a[1]=n;a[2]=k;sum=2;
 }
 else
 {
 	a[1]=n;sum=1;
 }
 	for(int i=1;i<=n/2;i++)
 	{
 	 int j=n-i;
	  if(i!=j)
	  {
	   sum+=2;
	   a[sum-1]=i;a[sum]=j;	
	  }	
	}
	for(int i=1;i<=n;i++)
	 cout<<a[i]<<" ";
 return 0;
}

G:Grid Coloring

#include
using namespace std;
int a[210][210],b[210][210];
int main()
{
    int T,n,k,t;
    scanf("%d",&T);
    while(T--)
    {
     cin>>n>>k;
     if(n==1||k==1||(2*n*(n+1))%k)
     {
        puts("-1");continue;
     }
     t=0;
     for(int i=1;i<=n;i++)
     {
        for(int j=1;j<=n;j++)
        {
         t=t%k+1;
         a[i][j]=t;
        }
        for(int j=1;j<=n+1;j++)
        {
         t=t%k+1;
         b[j][i]=t;
        }
     }
     for(int i=1;i<=n;i++)
     {
        t=t%k+1;
        a[n+1][i]=t;
     }
     for(int i=1;i<=n+1;i++)
     {
        for(int j=1;j<=n;j++)
         cout<<a[i][j]<<" ";
        cout<<endl;
     }
     for(int i=1;i<=n+1;i++)
     {
        for(int j=1;j<=n;j++)
         cout<<b[i][j]<<" ";
        cout<<endl;
     }
    }
    return 0;
}

H:Harmony Pairs
详解

#include
using namespace std;
#define ll long long
const ll mod=1e9+7;
ll dp[110][1810][2][2];//x,y,u,v
char c[910];
int len;
ll dfs(int x,int y,int u,int v)
{
    if(x>len) return y>900;
    if(~dp[x][y][u][v]) return dp[x][y][u][v];
    long long tot=0,a,b,i,j;
    if(u) a=c[x]-'0'; 
    else a=9;
    for(i=0;i<=a;i++)
    {
        if(v) b=i;
        else b=9;
        for(j=0;j<=b;j++)
         (tot+=dfs(x+1,y+j-i,(u && i==a),(v && j==b)))%=mod;
    }
    return dp[x][y][u][v]=tot;
}
int main()
{
    memset(dp,-1,sizeof(dp));
    scanf("%s",c+1);
    len=strlen(c+1);
    printf("%lld\n",dfs(1,900,1,1));
    return 0;
}

K:K-Bag
详解

//2 3 2 1 3 3 2 1
#include
using namespace std;
#define ll long long
int a[500010],b[500010],c[500010],d[500010];
int main()
{
    ios::sync_with_stdio(false);
    int t,n,k,x,y,cnt,flag;
    cin>>t;
    while(t--)
    {
    	cin>>n>>k;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>a[i];
    		b[i]=a[i];
		}
		sort(b+1,b+n+1);//b:1 1 2 2 2 3 3 3
		cnt=unique(b+1,b+n+1)-b-1; //cnt=3
		for(int i=1;i<=n;i++)
	      a[i]=lower_bound(b+1,b+cnt+1,a[i])-b;//将a[i]全部转换为顺序的1到k
		                                       //如2 3 2 1 3 3 8 5 变为2 3 2 1 3 3 5 4	
	    x=1; 
		for(int i=1;i<=n;i++)
		{
			while(!c[a[x]]&&x<=n)  //找到出现两次的数 
			{
				c[a[x]]++;x++;
			}
			c[a[i]]--;
			d[i]=x-i; //2 3 3 3 n+1-i;
		}
		y=0;
		for(int i=1;i<=min(k,d[1]+1);i++)// 
		{
			flag=1;
			//找到从某点开始d[j]都等于k, 
			for(int j=i;j<=n;j+=k)
			{
				if(j+d[j]>=n+1) continue;//越界 
				else if(d[j]^k)
				{
					flag=0;break;
				}
			}
			if(flag) 
			{
				y=1;break;
			}
		}
		if(y) puts("YES");
		else puts("NO");
	}
    return 0;
}


你可能感兴趣的:(2020牛客暑期多校训练营(第六场)题解)