• Educational Codeforces Round 94 (Rated for Div. 2)


    Educational Codeforces Round 94 (Rated for Div. 2)

    A.String Similarity

    思路:由题意可知输出n个s[n-1]即可。

    #pragma GCC optimize("Ofast")
    #pragma GCC target("avx,avx2,fma")
    #pragma GCC optimize ("unroll-loops")
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<math.h>
    #include<string>
    #include<queue>
    #include<map>
    #include<stack>
    #include<iostream>
    #define INF 0x3f3f3f3f
    #define lowbit(a) ((a)&-(a))
    typedef long long ll;
    typedef unsigned long long ull;
    using namespace std;
    int main()
    {
    	int t,n;
    	string s;
    	char k;
    	scanf("%d",&t);
    	while(t--)
    	{
    		cin>>n;
    		cin>>s;
    		k=s[n-1];
    		for(int i=1;i<=n;i++)
    		printf("%c",k);
    		printf("
    ");		
    	}
    }
    

    B.RPG Protagonist

    题意:有两个袋子大小为p,f,有两种物品分别有c1,c2个,大小分别为s,w,问最多能装多少物品。
    思路:枚举第一个袋子会装i个第一个物品,剩下的体积装尽可能多的第二个物品为n个,第二个袋子优先装大小较小的物品,装尽可能多为n1个,然后装大小较大的物品为n2个(若较小的物品装满了第二个袋子则n2为0),最后累加i+n+n1+n2为最终答案。

    #pragma GCC optimize("Ofast")
    #pragma GCC target("avx,avx2,fma")
    #pragma GCC optimize ("unroll-loops")
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<math.h>
    #include<string>
    #include<queue>
    #include<map>
    #include<stack>
    #include<iostream>
    #define INF 0x3f3f3f3f
    #define lowbit(a) ((a)&-(a))
    typedef long long ll;
    typedef unsigned long long ull;
    using namespace std;
    int main()
    {
    	ll t,p,f,c1,c2,s,w,n,n1,n2,i;
    	ll ans=0,k;
    	scanf("%lld",&t);
    	while(t--)
    	{
    		ans=0;
    		scanf("%lld%lld",&p,&f);
    		scanf("%lld%lld",&c1,&c2);		
    		scanf("%lld%lld",&s,&w);
    		for(i=0;i<=min(p/s,c1);i++)
    		{
    			n=(p-i*s)/w;
    			n=min(n,c2);
    			if(s<=w)
    			{
    				if(f>=(c1-i)*s)
    				{
    					n1=c1-i;
    					n2=(f-(c1-i)*s)/w;
    					n2=min(n2,c2-n);
    				}
    				else
    				{
    					n1=f/s;
    					n2=0;
    				}
    			}
    			else
    			{
    				if(f>=(c2-n)*w)
    				{
    					n1=c2-n;
    					n2=(f-(c2-n)*w)/s;
    					n2=min(n2,c1-i);
    				}	
    				else
    				{
    					n1=f/w;
    					n2=0;
    				}			
    			}
    			k=i+n+n1+n2;
    			ans=max(ans,k);
    		}
    		printf("%lld
    ",ans);
    	}
    }
    

    C.Binary String Reconstruction

    题意:已知x,字符串s,求字符串p,字符串s由p转化而来,当p[i-x]或p[i+x]为'1'时,s[i]为'1',否则为'0';
    思路:若s[i]为'0'则p[i-x]为'0',p[i+x]为'0',然后其余位置置为'1'。然后遍历s检验答案,若s[i]为'1'时,p[i-x]与p[i+x]都不为'1',则矛盾,输出-1;

    #pragma GCC optimize("Ofast")
    #pragma GCC target("avx,avx2,fma")
    #pragma GCC optimize ("unroll-loops")
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<math.h>
    #include<string>
    #include<queue>
    #include<map>
    #include<stack>
    #include<iostream>
    #define INF 0x3f3f3f3f
    #define lowbit(a) ((a)&-(a))
    typedef long long ll;
    typedef unsigned long long ull;
    using namespace std;
    int main()
    {
    	int t,h,flag,x;
    	char s[200005],p[200005];
    	scanf("%d",&t);
    	while(t--)
    	{
    		flag=0;
    		cin>>s;
    		cin>>x;
    		h=strlen(s);
    		for(int i=0;i<h;i++)
    		p[i]='1';
    		p[h]='';
    		for(int i=0;i<h;i++)
    		{
    			if(s[i]=='0')
    			{
    				if(i+x<h)
    				p[i+x]='0';
    				if(i-x>=0)
    				p[i-x]='0';
    			}
    		}
    		for(int i=0;i<h;i++)
    		{
    			if(s[i]=='1')
    			{
    				if(i-x>=0&&p[i-x]=='1');
    				else if(i+x<h&&p[i+x]=='1');
    				else 
    				{
    					cout<<"-1"<<endl;
    					flag=1;
    					break;
    				}
    				
    			} 
    		}
    		if(flag==0)
    		cout<<p<<endl;
    	}
    }
    

    D.Zigzags

    题意:给一个数组ai,1<=i<j<k<l<=n,问ai=ak,aj=al的数量
    思路:枚举j,l,用cnt数组记录a[j]之前每个a[i]出现的个数,将符合条件的结果记录即可。

    #pragma GCC optimize("Ofast")
    #pragma GCC target("avx,avx2,fma")
    #pragma GCC optimize ("unroll-loops")
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<math.h>
    #include<string>
    #include<queue>
    #include<map>
    #include<stack>
    #include<iostream>
    #define INF 0x3f3f3f3f
    #define lowbit(a) ((a)&-(a))
    typedef long long ll;
    typedef unsigned long long ull;
    using namespace std;
    ll n,cnt[10005],a[10005],res,num;
    int main()
    {
    	ll t;
    	cin>>t;
    	while(t--)
    	{
    		cin>>n;
    		res=0;
    		memset(cnt,0,sizeof(cnt));
    		for(int i=1;i<=n;i++)
    		{
    			cin>>a[i];
    		}
    		for(int j=1;j<n;j++)
    		{
    			num=0;
    			for(int l=j+1;l<=n;l++)
    			{
    				if(a[j]==a[l])
    				{
    					res+=num;
    				}
    				num+=cnt[a[l]];
    			}
    			cnt[a[j]]++;
    		}
    		cout<<res<<endl;
    	}
    }
    

    E.Clear the Multiset

    题意:给出一个数组a[i],有2种操作:1.将一个区域内所有数减一 2:将一个数字变成任意一个比他小的数 求所有数字变为0的最小步数。
    思路:最优的2种操作1.将一个区域内的数都减去最小值a[k],需a[k]步 2.将一个数字变为0
    若只用操作2将[l,r]区间所有数字变为0需要r-l+1步,只需要含操作1的办法与r-l+1取最小值即可。
    操作一过后,最小值a[k]变为0,其左右2边的子结构与原结构类似,可对[l,k-1],[k+1,r]分治递归求解。

    #pragma GCC optimize("Ofast")
    #pragma GCC target("avx,avx2,fma")
    #pragma GCC optimize ("unroll-loops")
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<math.h>
    #include<string>
    #include<queue>
    #include<map>
    #include<stack>
    #include<iostream>
    #define INF 0x3f3f3f3f
    #define lowbit(a) ((a)&-(a))
    typedef long long ll;
    typedef unsigned long long ull;
    using namespace std;
      
    const int MAXN = 5005;  
    int a[MAXN];  
    int solve(int l, int r)  
    {  
        int k = l;  
        if(l > r) return 0;  
        for(int i = l; i <= r; i++)  
            if(a[i] < a[k])  
                k = i;  
        int tmp = a[k];  
        for(int i = l; i <= r; i++)  
            a[i] -= tmp;  
        return min(r-l+1, solve(l, k-1) + solve(k+1, r) + tmp);  
    }  
    int main()  
    {  
        int n;  
        scanf("%d",&n);  
        for(int i = 0; i < n; i++)  
            scanf("%d",&a[i]);  
        printf("%d
    ", solve(0, n-1));  
        return 0;  
    } 
    
  • 相关阅读:
    Linux运维就业技术指导(九)期末架构考核
    Linux运维就业技术指导(八):期中架构考核
    Linux就业技术指导(七):游戏类运维重点流程解析
    Linux就业技术指导(五):Linux运维核心管理命令详解
    Linux就业技术指导(六):天津IDC机房项目实践
    Linux就业技术指导(四):企业CDN缓存加速原理解密
    Linux就业技术指导(三):IDC机房解密
    Linux就业技术指导(一):简历撰写及面试筹备要领
    Linux就业技术指导(二):简历项目经验示例
    Python运维开发基础10-函数基础
  • 原文地址:https://www.cnblogs.com/qingjielaojiu/p/13569572.html
Copyright © 2020-2023  润新知