“卓见杯”郑州轻工业大学第十五届程序设计大赛暨河南省高校邀请赛

“卓见杯”郑州轻工业大学第十五届程序设计大赛暨河南省高校邀请赛

3033: 最大的数

由于需要对1e9取模,所以理论上应该只能走9步,我们应该从最大的数开始搜索,递归9层return。

#include
using namespace std;
 
typedef pair<int,int> PII;
 
const int N = 200010;
vector<PII> g[N];
int a[N],b[N];
int n;
 
int res=0;
 
void dfs(int u,int sum,int d)
{
    res=max(res,sum);
    if(d>=9) return ;
    for(auto &j:g[u])
        dfs(j.first,sum*10+j.second,d+1);   
}
 
 
int main()
{
    int n;scanf("%d",&n);
    for(int i=1;i<=n;i++) scanf("%d",&a[i]);
    for(int i=1;i<=n;i++) scanf("%d",&b[i]);
    for(int i=1;i<=n;i++) g[i].push_back({a[i],b[i]});
     
    int mx=0;
    for(int i=1;i<=n;i++) if(b[i]>mx) mx=b[i];
     
    for(int i=1;i<=n;i++)
        if(b[i]==mx)
            dfs(i,0,0);
     
    cout<<res;
     
    return 0;
}

3036: 莫比乌斯最大值isUsefulAlgorithm

我们对于a数组里面所有数字进行分解,时间复杂度( n n n\sqrt{n} nn ),再对b数组中的所有数字进行分解,判断每个因数是否是否可以与a的因数组成答案

#include 
using namespace std;
 
typedef long long LL;
const int N=100010;
 
int a[N],b[N],d[N];
 
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
     
    int n;cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=n;i++) cin>>b[i];
    for(int i=1;i<=n;i++)
    {
        int x=b[i];
        for(int j=1;j<=x/j;j++)
            if(x%j==0)
            {
                d[j]=max(d[j],x);
                d[x/j]=max(d[x/j],x);
            }
    }
    LL ans=-1;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=a[i]/j;j++)
            if(a[i]%j==0 && d[j])
            {
                ans=max(ans,(LL)a[i]*d[j]*j);
                ans=max(ans,(LL)a[i]*d[a[i]/j]*a[i]/j);
            }
             
    cout<<ans;
 
    return 0;
}

3038: what’s 莫比乌斯最大值

我们需要小心这样的数据

4
what's modui
what's moduij
moduij
modui
2

当出现多个答案之后我们应该优先处理最长的字符串。

#include 
using namespace std;
 
int main()
{
    map<string,bool> st;
    set<pair<string,int>> b;
     
    int res=0;
    int n;cin>>n;
    for(int i=1; i<=n; i++)
    {
        string s;cin>>s;
        if(s=="what's") 
        {
            cin>>s;
            b.insert({s,s.size()});
        }
        else
        {
            string pos="-1";
            for(auto &p:b)
            {
                string k=p.first;
                int j=p.second;
                string str=s.substr(0,j);
                if(!st[k] && str==k) 
                    pos=k;
            }
            if(pos!="-1") 
            {
                res++;
                st[pos]=true;
            }
        }
    }
    cout<<res;
    
    return 0;
}

3041: Alice and Bob

#include
using namespace std;

typedef long long LL;

int main()
{
	string a,b,c,d;cin>>a>>b>>c>>d;
	
	bool ok1=0,ok2=0;
	if(a.size()>=6 || b.size()>=6) ok1=1;
	if(c.size()>=6 || d.size()>=6) ok2=1;
	
	if(ok1 && ok2) cout<<"Draw";
	else if(ok1) cout<<"Bob";
	else if(ok2) cout<<"Alice";
	else
	{
		LL aa=stoll(a);
		LL bb=stoll(b);
		LL cc=stoll(c);
		LL dd=stoll(d);
		LL sum1=aa*aa+bb*bb;
		LL sum2=cc*cc+dd*dd;
		if(sum1>1000000 && sum2>1000000) cout<<"Draw";
		else if(sum1>1000000) cout<<"Bob";
		else if(sum2>1000000) cout<<"Alice";
		else if(sum1>sum2) cout<<"Bob";
		else if(sum1<sum2) cout<<"Alice";
		else if(sum1==sum2) cout<<"Draw";
	}
	
	return 0;
}

你可能感兴趣的:(#,专题,深度优先,算法)