zoukankan      html  css  js  c++  java
  • 牛客多校Day5

    不会B,我是弱智实锤。/kk

    大致按难度排序。

    H

    // 1 1 0 0 ...
    // 0 0 1 1 ...
    // ...
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<set>
    #include<map>
    #include<vector>
    #include<ctime>
    #include<cstdlib>
    using namespace std;
    #define mp make_pair
    #define pb push_back
    typedef pair<int,int> pii;
    typedef long long ll;
    typedef unsigned long long ull;
    inline int read()
    {
    	int x=0,f=1;char c=getchar();
    	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    	while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
    	return x*f;
    }
    int main()
    {
    	int n=read(),m=read();
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=m;j++)
    		{
    			if(i&1){if(j%4==1||j%4==2)putchar('1');else putchar('0');}
    			else {if(j%4==1||j%4==2)putchar('0');else putchar('1');}
    		}
    		putchar('
    '); 
    	}
    }
    

    K

    双指针即可。

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<set>
    #include<map>
    #include<vector>
    #include<ctime>
    #include<cstdlib>
    using namespace std;
    #define mp make_pair
    #define pb push_back
    typedef pair<int,int> pii;
    typedef long long ll;
    typedef unsigned long long ull;
    inline int read()
    {
    	int x=0,f=1;char c=getchar();
    	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    	while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
    	return x*f;
    }
    const int N=1e5+10;
    int st1[N][30],st2[N][30],a[N],Log[N];
    int query1(int l,int r)//max
    {
    	int x=Log[r-l+1];
    	return max(st1[l][x],st1[r-(1<<x)+1][x]);
    }
    int query2(int l,int r)//min
    {
    	int x=Log[r-l+1];
    	return min(st2[l][x],st2[r-(1<<x)+1][x]);
    }
    int n,m;
    ll sol(int k)
    {
    	ll ans=0;
    	for(int l=1,r=0;l<=n;l++)
    	{
    		while(r<n&&query1(l,r+1)-query2(l,r+1)<=k)r++;
    		ans+=n-r;
    	}
    	return ans;
    }
    int main()
    {
    	n=read(),m=read();
    	for(int i=1;i<=n;i++)st1[i][0]=st2[i][0]=a[i]=read();
    	Log[1]=0;for(int i=2;i<=1e5;i++)Log[i]=Log[i>>1]+1;
    	for(int j=1;j<=Log[n];j++)for(int i=1;i+(1<<j)-1<=n;i++)st1[i][j]=max(st1[i][j-1],st1[i+(1<<j-1)][j-1]);
    	for(int j=1;j<=Log[n];j++)for(int i=1;i+(1<<j)-1<=n;i++)st2[i][j]=min(st2[i][j-1],st2[i+(1<<j-1)][j-1]);
    	for(int i=1;i<=m;i++)printf("%lld
    ",sol(read()));
    	return 0;
    }
    

    D

    对每个 (a_i<b_j) 算贡献即可。

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<set>
    #include<map>
    #include<vector>
    #include<ctime>
    #include<cstdlib>
    using namespace std;
    #define mp make_pair
    #define pb push_back
    typedef pair<int,int> pii;
    typedef long long ll;
    typedef unsigned long long ull;
    inline int read()
    {
    	int x=0,f=1;char c=getchar();
    	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
    	while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
    	return x*f;
    }
    const int N=5010,mod=1e9+7;
    int qpow(int a,int n){int ans=1;while(n){if(n&1)ans=(ll)ans*a%mod;a=(ll)a*a%mod;n>>=1;}return ans;}
    int f[N][N],p[N<<1],inv[N<<1];
    int binom(int n,int m){return (ll)p[n]*inv[m]%mod*inv[n-m]%mod;}
    char a[N],b[N],c[N],d[N];
    int g[N][N];
    signed main()
    {
    //	freopen("in.txt","r",stdin);
    	scanf("%s%s",a+1,b+1);
    	int n=strlen(a+1),m=strlen(b+1);
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=m;j++)
    		{
    			f[i][j]=(((ll)f[i-1][j]+(ll)f[i][j-1]-(ll)f[i-1][j-1])%mod+mod)%mod;
    			if(a[i]==b[j])f[i][j]+=f[i-1][j-1]+1,f[i][j]%=mod; 
    		}
    	}
    	p[0]=1;for(int i=1;i<=10000;i++)p[i]=(ll)p[i-1]*i%mod;
    	inv[10000]=qpow(p[10000],mod-2);
    	for(int i=9999;i>=0;i--)inv[i]=(ll)inv[i+1]*(i+1)%mod;
    	for(int i=0;i<=n;i++)for(int j=0;j<=m;j++)g[i][j]=binom(i+j,j);
    	int ans=0;
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=m;j++)
    		{
    			if(a[i]>=b[j])continue;
    			ans+=(ll)(f[i-1][j-1]+1)*g[n-i][m-j]%mod,ans%=mod;
    		}
    	}
    	printf("%d",ans);
    }
    

    B

    并没有太读懂题。。直接把官方题解搬上来吧。

    首先 (C) 最多只用花一次,且可以在最开始花,所以有两种策略:

    直接全部打开,代价:(sum w_i)

    (w_i)​ 升序排序。先花 (C)​ 的代价,剩下的就相当于一个随机 01 序列从前往后开,开到一个后缀全是同色的为止。代价:(C + sum w_i(1-dfrac{1}{2^{n-i}}))

    两者取较小值即可。

    出题人如果再把题面写那么含糊我就退钱!!好像并没有交钱

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int N=1e5+10;
    long double w[N];
    int main()
    {
    	int n;long double c;
    	scanf("%d%Lf",&n,&c);
    	long double ans1=0,ans2=0,pw=1;
    	for(int i=1;i<=n;i++)cin>>w[i],ans1+=w[i];
    	sort(w+1,w+n+1);
    	for(int i=n;i;i--)ans2-=w[i]*pw,pw*=0.5;
    	ans2+=ans1+c;
    	printf("%.10Lf
    ",min(ans1,ans2));
    }
    
  • 相关阅读:
    csv 中 数值被自动转换成科学计数法 的问题 excel打开后数字用科学计数法显示且低位变0的解决方法
    java 随机数 优惠码 生成 随机字串
    JSF primefaces session view expired 会话失效后页面跳转
    primefaces 查询 点击按钮 加载 动画 ajax loader
    时间戳 时区 java mysql
    JBoss 系列十四:JBoss7/WildFly如何加载外部的文件或properties文件
    MQTT 消息 发布 订阅
    mosquitt win32
    Hibernate JPA实体继承的映射(一) 概述
    wildfly jboss 优化配置
  • 原文地址:https://www.cnblogs.com/juruo-zzt/p/15084702.html
Copyright © 2011-2022 走看看