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


    Educational Codeforces Round 97 (Rated for Div. 2)

    A.Marketing Scheme

    题意:是否存在a使在[l,r]之间所有的数(用x表示)都满足,((x mod a)geqfrac{a}{2})
    思路:2*l>r那么a=r+1一定满足

    #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;
    using namespace std;
    int n,t; 
    int main()
    {
    	int l,r;
    	cin>>t;
    	while(t--)
    	{
    		cin>>l>>r;
    		if(l*2>r)
    		cout<<"YES"<<endl;
    		else
    		cout<<"NO"<<endl;
    	}
    }
    

    B.Reverse Binary Strings

    题意:给一个二进制字符串,翻转其中一部分视为一次操作,问最少的操作次数使字符串变为0,1交错。
    思路:翻转字符串不改变翻转部分内部的0,1相邻关系,只改变头和尾部分并且是交换关系,所以只要每当找到一个相邻相同的字符当作头,便往后找第一个相邻相同的字符且与头不为同一字符作为尾,翻转头尾之间的部分。

    #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;
    using namespace std;
    int n,t; 
    string s;
    void op(int p,char c)
    {
        bool flag=false;
        for(int i=p;i<n-1;i++)
        {
            if(s[i]==s[i+1]&&flag&&s[i]!=c)
            {
                reverse(s.begin()+p,s.begin()+i+1);
                return;
            }
            if(s[i]!=s[i+1])
            {
                flag=true;
            }
        }
    }
    int main()
    {
    	cin>>t;
    	while(t--)
    	{
    		ll ans=0;
    		cin>>n>>s;
    		for(int i=0;i<n;i++)
    		{
    			if(s[i]==s[i+1])
    			{
    				op(i+1,s[i]);
    				ans++;
    			}
    		}
    		cout<<ans<<endl;
    	}
    }
    

    C.Chef Monocarp

    题意:每到菜最佳出菜时间为T[i],但一个时间只能出一道菜,问如何使所有(T[i]-t)的和最小
    思路:dp,先排序,设dp[i][j]为第i到菜第j分钟出菜使的花费。

    #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;
    using namespace std;
    int n,t,a[205],f[205][10005]; 
    int main()
    {
    	cin>>t;
    	while(t--)
    	{
    		int mmax=INF;
    		cin>>n;
    		for(int i=1;i<=n;i++)
    		cin>>a[i];
    		sort(a+1,a+1+n);
    		for(int j=1;j<=4*n;j++)
    		f[1][j]=abs(a[1]-j);
    		for(int i=2;i<=n;i++)
    		for(int j=1;j<=4*n;j++)
    		f[i][j]=INF;
    		for(int i=2;i<=n;i++)
    		for(int j=1;j<=4*n;j++)
    		for(int k=1;k<j;k++)
    		f[i][j]=min(f[i][j],f[i-1][k]+abs(a[i]-j));
    		for(int i=1;i<=4*n;i++)
    		{
    			mmax=min(f[n][i],mmax);
    		}
    		cout<<mmax<<endl;
    	}
    }
    

    D.Minimal Height Tree

    题意:给一个bfs顺序遍历的节点顺序,且每一个父节点的子节点都是从小到大的顺序遍历,问树的可能的最小深度。
    思路:贪心,把从小到大的一个序列放进同一个父节点,然后每层父节点放满,再放下一层。

    #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;
    using namespace std;
    int t,n,a[200005]; 
    vector<int> q;
    int main()
    {
    	cin>>t;
    	while(t--)
    	{
    		cin>>n;
    		q.clear();
    		ll len=0;
    		for(int i=1;i<=n;i++)
    		{
    			cin>>a[i];
    		}
    		for(int i=2;i<=n;i++)
    		{
    			if(a[i]>a[i-1])
    			len++;
    			else
    			{
    				q.push_back(len);
    				len=1; 
    			}
    		}
    		q.push_back(len);
    		ll ans=0;
    		ll mmax=1;
    		ll num=0;
    		ll nmax=0;
    		ll x=0;
    		while(x<q.size())
            {
                num++;
                if(num>mmax)
                {
                    mmax=nmax;
                    nmax=q[x];
                    num=1;
                    ans++;
                }
                else nmax+=q[x];
                x++;
            } 
            cout<<ans+1<<endl;
    	}
    }
    
  • 相关阅读:
    视频4K技术的解读
    C语言野指针
    获取一个整数所有的质因数(C语言实现)
    乘法口诀表(C语言实现)
    完全平方数(C语言实现)
    Socket网络编程系列教程序
    求1-2/3+3/5-4/7+......49/97和(C语言实现)
    反射
    Cloneable接口和Object的clone()方法
    Comparable和Comparator的区别
  • 原文地址:https://www.cnblogs.com/qingjielaojiu/p/13896530.html
Copyright © 2020-2023  润新知