Codeforces Round 867 (Div. 3)个人代码

文章包含一系列编程问题的解决方案,涉及数组操作和优化,如A.TubeTubeFeed中寻找特定索引,B.KarinaandArray中的最大乘积计算,C.BunLover的数学公式求解,D.Super-Permutation的字符串构造,以及E.MakingAnti-Palindromes和F.GardeningFriends的图论问题。这些问题考察了程序员对数据结构和算法的掌握。
摘要由CSDN通过智能技术生成

A. TubeTube Feed

题目大意

待补充

解题思路

待补充

具体代码

#include <bits/stdc++.h>
using namespace std;

const int N = 55;
int a[N],b[N];

int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n,t;
		cin>>n>>t;
		for(int i=1;i<=n;i++) cin>>a[i];
		for(int i=1;i<=n;i++) cin>>b[i];
		
		int idx = -1,tmp = 0;
		for(int i=1;i<=n;i++)
			if(t-i+1>=a[i]&&b[i]>tmp)
			{
				idx = i;
				tmp = b[i];
			}

		cout<<idx<<endl;
	}
	return 0;
}

B. Karina and Array

题目大意

待补充

解题思路

待补充

具体代码

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;

int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		cin>>n;
		vector<LL> a,b;
		for(int i=1;i<=n;i++)
		{
			LL x;
			cin>>x;
			if(x>=0) a.push_back(x);
			else b.push_back(x);
		}
		sort(a.begin(),a.end());
		sort(b.begin(),b.end());
		
		LL ans = -0x3f3f3f3f3f3f3f3f;
		int len_a = a.size(),len_b = b.size();
		
		if(len_a>1) ans = max(ans,max(a[0]*a[1],a[len_a-1] * a[len_a-2]));
		if(len_a>=1&&len_b>=1)
		{
			ans = max(ans,a[0] * b[0]);
			ans = max(ans,a[0] * b.back());
			ans = max(ans,a.back() * b[0]);
			ans = max(ans,a.back() * b.back());
		}
		if(len_b>1) ans = max(ans,max(b[len_b-1]*b[len_b-2],b[0]*b[1]));
		cout<<ans<<endl;
	}
	return 0;
}

C. Bun Lover

题目大意

待补充

解题思路

待补充

具体代码

#include <bits/stdc++.h>
using namespace std;

int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		long long n;
		cin>>n;
		cout<<n*n+2*n+2<<endl;
	}
	return 0;
}

D. Super-Permutation

题目大意

待补充

解题思路

待补充

具体代码

#include <bits/stdc++.h>
using namespace std;
 
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int n;
        cin>>n;
        if(n&1&&n!=1) puts("-1");
        else if(n==1) puts("1");
        else
        {
            for(int i=n;i>=1;i-=2) cout<<i<<" "<<n-i+1<<" ";
            puts("");
        }
    }
    return 0;
}

E. Making Anti-Palindromes

题目大意

待补充

解题思路

待补充

具体代码

待补充

F. Gardening Friends

题目大意

待补充

解题思路

待补充

具体代码

#include <bits/stdc++.h>
using namespace std;
 
typedef long long LL;
const int N = 2e5 + 10;
int n,k,c;
vector<int> e[N];
int d[N],md1[N],md2[N];
int x,y,ver;
 
void dfs(int u,int fa,int *d)
{
    for(auto i:e[u])
    {
        if(i==fa) continue;
        d[i] = d[u] + 1;
        if(d[i]>d[ver]) ver = i;
        dfs(i,u,d);
    }
}
 
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        cin>>n>>k>>c;
        for(int i=1;i<n;i++)
        {
            int a,b;
            cin>>a>>b;
            e[a].push_back(b);
            e[b].push_back(a);
        }
        
        d[1] = 0,ver = 0;
        dfs(1,0,d);
        x = ver,md1[ver] = 0;
        dfs(ver,0,md1);
        y = ver,md2[ver] = 0;
        dfs(ver,0,md2);
        
        LL ans = 0;
        for(int i=1;i<=n;i++) ans = max(ans,(LL)max(md1[i],md2[i])*k-(LL)d[i]*c);
        cout<<ans<<endl;
        
        for(int i=1;i<=n;i++) e[i].clear();
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xKazimierzx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值