zoukankan      html  css  js  c++  java
  • Codeforces 1091 Good Bye 2018

    占个坑先,希望不要掉的太惨了吧,不要掉到上一次之前的rating

    upt:flag竟然没到,开心。

    A - New Year and the Christmas Ornament

    好像没什么可说的。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #include<set>
    #include<map>
    #include<vector>
    #include<cmath>
    #include<cctype>
    using namespace std;
    
    typedef long long ll;
    const int Maxn=210000;
    
    int main() {
    	int a,b,c;
    	scanf("%d%d%d",&a,&b,&c);
    	if(a+1<=b&&a+2<=c) {
    		printf("%d",3*a+3);
    	}
    	else if(b<=a+1&&b+1<=c) {
    		printf("%d",3*b);
    	}
    	else if(c<=a+2&&c<=b+1) {
    		printf("%d",3*c-3);
    	}
    	return 0;
    }
    

    B - New Year and the Treasure Geolocation

    有一个显然的结论,x的最小值加的一定是最大的x变化量,y同理。因为数据保证有解那么直接找即可。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #include<set>
    #include<map>
    #include<vector>
    #include<cmath>
    #include<cctype>
    using namespace std;
    
    typedef long long ll;
    const int Maxn=210000;
    
    int n,x[Maxn],y[Maxn],a[Maxn],b[Maxn];
    
    int main() {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    		scanf("%d%d",&x[i],&y[i]);
    	sort(x+1,x+n+1),sort(y+1,y+n+1);
    	for(int i=1;i<=n;i++)
    		scanf("%d%d",&a[i],&b[i]);
    	sort(a+1,a+n+1),sort(b+1,b+n+1);
    	printf("%d %d
    ",x[1]+a[n],y[1]+b[n]);
    	return 0;
    }
    

    C - New Year and the Sphere Transmission

    考虑两个数产生的答案不同当且仅当他们与n的gcd不同,那么就枚举n的约数,然后计算即可,具体参考代码。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #include<set>
    #include<map>
    #include<vector>
    #include<cmath>
    #include<cctype>
    using namespace std;
    
    typedef long long ll;
    const int Maxn=210000;
    
    int n,num;
    ll x[Maxn];
    
    void work(int n,int k) {
    	ll d=n/k;
    	x[++num]=n*(d-1)/2+d;
    }
    
    int main() {
    	scanf("%d",&n);
    	for(int i=1;i*i<=n;i++)
    		if(n%i==0) {
    			work(n,i);
    			work(n,n/i);
    		}
    	sort(x+1,x+num+1);
    	for(int i=1;i<=num;i++) if(x[i]!=x[i-1]) printf("%I64d ",x[i]);
    	return 0;
    }
    

    D - New Year and the Permutation Concatenation

    瞎猜了一波规律就过了,具体也说不清楚。。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    #include<set>
    #include<map>
    #include<vector>
    #include<cmath>
    #include<cctype>
    using namespace std;
    
    typedef long long ll;
    const int Maxn=2100000;
    const int mod=998244353;
    
    int n;
    ll jc[Maxn],ans;
    
    ll powp(ll a,ll b) {
    	ll ans=1;
    	while(b) {
    		if(b&1) ans=ans*a%mod;
    		a=a*a%mod;
    		b>>=1;
    	}
    	return ans;
    }
    
    ll C(int x,int y) {
    	return jc[x]*powp(jc[y],mod-2)%mod*powp(jc[x-y],mod-2)%mod;
    }
    
    int main() {
    	scanf("%d",&n);
    	jc[0]=1;
    	for(int i=1;i<=n;i++)
    		jc[i]=jc[i-1]*i%mod;
    	for(int i=0;i<=n;i++) ans=(ans+C(n,i)*(jc[i]-1)%mod*jc[n-i]%mod)%mod;
    	ans=(ans+1)%mod;
    	printf("%I64d
    ",ans);
    	return 0;
    }
    

    E - New Year and the Acquaintance Estimation

    这个就是根据题目里面的链接,根据里面的一个结论,设第(i)个点的度数为(d_i),将所有的点的度数排起来,即(d_1ge d_2 ge cdots ge d_n),那么这个图合法当且仅当对于所有的(1le k le n),满足(sum_{i=1}^kd_ile kcdot (k-1)+sum_{i=k+1}^nmin(d_i,k)),具体证明请参考题目里面的维基百科连接。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    typedef long long ll;
    const int Maxn=2100000;
    
    int n,d[Maxn],bj[Maxn],ans[Maxn],num;
    ll pre[Maxn];
    
    int main() {
    	scanf("%d",&n);
    	for(int i=0;i<n;i++)
    		scanf("%d",&d[i]);
    	sort(d,d+n);
    	for(int i=1;i<=n;i++) pre[i]=pre[i-1]+d[i-1];
    	int j=0;
    	for(int k=1;k<=n;k++) {
    		ll l=pre[n]-pre[n-k],r=(ll)k*(k-1);
    		while(j<n&&d[j]<k) j++;
    		r+=pre[min(j,n-k)]+1ll*max(0,n-k-j)*k;
    		ll now=d[n-k],diff=l-r;
    		if(diff<=k&&diff<=now) {
    			bj[max(diff,0ll)]++;
    			bj[now+1]--;
    		}
    		l-=d[n-k],r+=min(d[n-k],k);
    		diff=r-l;
    		if(diff>=now+1) {
    			bj[now+1]++;
    			bj[min(diff+1,(ll)n+1)]--;
    		}
    	}
    	j=0;
    	for(int i=0;i<=n;i++) {
    		j+=bj[i];
    		if(j==n&&(pre[n]+i&1)==0) ans[++num]=i;
    	}
    	if(num==0) puts("-1");
    	else for(int i=1;i<=num;i++) printf("%d ",ans[i]);
    	return 0;
    }
    

    F - New Year and the Mallard Expedition

    这个就是贪心,首先每次走的距离都是半米的倍数,而且在岩浆上一定要用体力,如果体力不够的话就必须往回走,那么在水上走一定要比在地上走要优。

    然后剩余的体力一定要在地上用,如果地上剩下了再在水上用,这样二分一下在地上能用多少,然后计算答案。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    
    typedef long long ll;
    const int Maxn=110000;
    
    int n;
    ll l[Maxn],a[Maxn],ans;
    char s[Maxn];
    
    int main() {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++) scanf("%I64d",&l[i]);
    	scanf("%s",s+1);
    	for(int i=1;i<=n;i++) l[i]<<=1;
    	ll w=0,g=0,st=1,flag=5;
    	for(int i=1;i<=n;i++) {
    		if(s[i]=='G') g+=l[i],ans+=5*l[i];
    		if(s[i]=='W') w+=l[i],flag=3,ans+=3*l[i];
    		if(s[i]=='L') {
    			ans+=l[i];
    			ll re=l[i],sxz=min(re,w);
    			re-=sxz,w-=sxz;sxz=min(re,g);
    			re-=sxz,g-=sxz;
    			if(re) ans+=re*flag;
    		}
    		if(!g&&!w) st=i+1;
    	}
    	ll las=(g+w)/2;
    	if(las) {
    		ll lc=0,rc=0,mid,res=0;
    		for(int i=st;i<=n;i++) if(s[i]=='G') rc+=l[i];
    		rc=min(rc,las);
    		while(lc<=rc) {
    			mid=lc+rc>>1;ll re=mid;
    			for(int i=n;i>=st;i--)
    				if(s[i]=='G') {
    					a[i]=min(re,l[i]);
    					re-=a[i];
    				}
    			ll now=0;
    			for(int i=st;i<=n;i++) {
    				if(s[i]=='G') now+=l[i]-2*a[i];
    				if(s[i]=='W') now+=l[i];
    				if(s[i]=='L') now-=l[i];
    				if(now<0) {
    					rc=mid-1;
    					goto orznh;
    				}
    			}
    			lc=mid+1;res=mid;
    			orznh:;
    		}
    		ans-=res*4+(las-res)*2;
    	}
    	ans>>=1;printf("%I64d
    ",ans);
    	return 0;
    }
    
    
  • 相关阅读:
    java读取jar包中的文件
    mysql 常用命令搜集
    如何终端自动导入cer开发证书到钥匙串
    解决第三方库私有api造成的apple审核不通过。
    push证书过期,不需要升级客户端。
    mac下面新建qq(多开/打开多个)登录方法
    行动力才是王道
    wordpress | 网站访问速度优化方案(Avada)
    HTML | video的封面平铺方法
    PHP | 获取数组长度的方法
  • 原文地址:https://www.cnblogs.com/shanxieng/p/10201229.html
Copyright © 2011-2022 走看看