首页 > 其他分享 >Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round A - D

Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round A - D

时间:2023-01-28 16:35:09浏览次数:82  
标签:return NO Institute Codeforces long int Round define

题目链接

A

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
#define int long long
const int N = 1e3 + 10;
int n, m;
int g[N][N];
int x, y, maxv;
int area;

int get(int x, int y)
{
    return max(max( x * y , (n - x + 1) * y) , max( (n - x + 1) * (m - y + 1) , (m - y + 1) * x));
}

void solve()
{
    cin >> n >> m;
    area = 0 , maxv = -1e18;
    for(int i = 1 ; i <= n ; i ++ )
        for(int j = 1 ; j <= m ; j ++ )
        {
            int x;
            cin >> x;
            if(x > maxv)
            {
                maxv = x;
                area = get(i, j);
            }
            else if(x == maxv && get(i, j) < area)
            {
                maxv = x , area = get(i, j);
            }
        }
    
    cout << area << endl;
}

signed main()
{
    int T;
    cin >> T;
    while(T -- ) solve();
    return 0;
}

B

核心思路

其实像这种博弈论的题目我们应该首先就从n的奇偶性讨论。这里有一个很重要的性质:当n为偶数的时候就是其实这两个人分的石子堆是确定了的。

  • n为奇数:这个很显然只要Mike刚开始把第一堆拿了,那么就肯定是joe输了
  • n为偶数:首先我们可以贪心的考虑,每个人都不想输,所以每个人都尽量少拿石子:也就是每次只拿一个。所以看最少那堆石子花落谁家就好了。
// Problem: B. Circle Game
// Contest: Codeforces - Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round
// URL: https://codeforces.com/contest/1695/problem/B
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define NO {puts("NO") ; return ;}
#define YES {puts("YES") ; return ;}
#define endl "\n"
#define int long long 


void solve()
{
	int n;
	cin>>n;
	vector<int> a(n);
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	
	if(n%2==1)
	{
		cout<<"Mike"<<endl;
		return;
	}
	
	int smallest=0;
	for(int i=0;i<n;i++)
	{
		if(a[i]<a[smallest])
		smallest=i;
	}
	if(smallest%2==0)
	cout<<"Joe\n";
	else
	cout<<"Mike\n";
	
	
}

signed main()
{
int T;
cin>>T;
while(T--)
{
	solve();
}
}

C

核心思路

首先我们应该分析我们到达终点需要走多少步,这个还是比较容易分析出来的。那就是n+m-2步。而我们想要出现0.我们会发现我们走奇数步是完全不可能出现的,所以最终的答案肯定是偶数步。

挖掘出来这个性质就比较好做了:方格里面只有-1和1,所以我们走两步肯定只有-2 0 2这三种取值。

所以我们可以先预处理出来走到终点的最大值和最小值,这个使用dp就好了。然后判断0在不在这个范围了。

还有一点就是如果我们的最大值或者是最小值是奇数的话,由上面的分析可知道这一定走不到0的。

// Problem: C. Zero Path
// Contest: Codeforces - Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round
// URL: https://codeforces.com/contest/1695/problem/C
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define NO {puts("NO") ; return ;}
#define YES {puts("YES") ; return ;}
#define endl "\n"
#define int long long 

const int N=1e3+10;
int g[N][N],maxn[N][N],minn[N][N];

void solve()
{
	int n,m;
	cin>>n>>m;
//不需要memset。要不然会tle。
	 for(int i=0;i<n;i++)
	 for(int j=0;j<m;j++)
	 {
	 	cin>>g[i][j];
	 }
	 maxn[0][0]=g[0][0];
	 minn[0][0]=g[0][0];
	for(int i=1;i<n;i++)
	maxn[i][0]=minn[i][0]=maxn[i-1][0]+g[i][0];
	for(int i=1;i<m;i++)
	maxn[0][i]=minn[0][i]=maxn[0][i-1]+g[0][i];
	 
	 for(int i=1;i<n;i++)
	 {
	 	for(int j=1;j<m;j++)
	 	{
	 		minn[i][j]=min(minn[i-1][j],minn[i][j-1])+g[i][j];
	 		maxn[i][j]=max(maxn[i-1][j],maxn[i][j-1])+g[i][j];
	 	}
	 }
	 if(maxn[n-1][m-1]%2||minn[n-1][m-1]>0||maxn[n-1][m-1]<0||minn[n-1][m-1]%2)
	 {
	 	NO;
	 }
	 else
	 {
	 	YES;
	 }
	
}


signed main()
{
int T;
cin>>T;
while(T--)
{
	solve();
}
}

D

题意

就是我们可以有k次询问,我们知道其他的点和k个点的距离。问我们最少询问多少次,可以确定每一个点的位置。

核心思路

easy:

首先我们需要知道的就是我们既然要确定以u为根的节点,那么就肯定需要把他的子树v全都确定了。并且如果有x个子树的答案是0,那我们就还需要加上x-1.因为我们最多只可以有1个节点没有确定。

hard:

我们需要优化时间复杂度,因为easy版本的我们需要做n次dfs,所以时间复杂度就是\(O(n^2)\).我们可以从每个点的出度来优化。因为只要有子节点的出度小于3,那么他就肯定是一条链,而链我们只需要取他的任意端点就可以确定了。

// Problem: D1. Tree Queries (Easy Version)
// Contest: Codeforces - Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round
// URL: https://codeforces.com/contest/1695/problem/D1?mobile=true
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define IOS std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define NO {puts("NO") ; return ;}
#define YES {puts("YES") ; return ;}
#define endl "\n"
#define int long long 

const int N=1e6+10;

vector<int> tree[N];

int  dfs(int u,int fa)
{
	int sum=0,z=0;
	
	for(auto v:tree[u])
	{
		if(v!=fa)
		{
			int x=dfs(v,u);
			sum+=x;
			if(!x)
			z++;
			
		}
	}
	return sum+max(z-1,1LL*0);
}


void solve()
{
int n;
cin>>n;
int ans=n;
int m=n;
m--;
while(m--)
{
	int u,v;
	cin>>u>>v;
	tree[u].push_back(v);
	tree[v].push_back(u);
	
}
int max_dep=0;

for(int i=1;i<=n;i++)
{
	max_dep=max(max_dep,(int)tree[i].size());
	
}

if(max_dep==0)
{
	cout<<0<<endl;
}
else if(max_dep<3)
{
	cout<<1<<endl;
}
else
{
	for(int i=1;i<=n;i++)
	{
		if(tree[i].size()>=3)
		{
			cout<<dfs(i,i)<<endl;
			break;
		}
	}
}
for(int i=1;i<=n;i++)
tree[i].clear();

	
}

signed main()
{
int T;
cin>>T;
while(T--)
{
	solve();
}
}

标签:return,NO,Institute,Codeforces,long,int,Round,define
From: https://www.cnblogs.com/xyh-hnust666/p/17070559.html

相关文章

  • Codeforces Round #847 F
    F.TimofeyandBlack-WhiteTree题链因为是一棵树的形式我们不妨考虑dpdp[u]表示u节点子树内黑点离u的最近距离我们每添加一个点当然会更新他及他链上面父亲的dp值......
  • Codeforces Round #816 (Div. 2)
    D.2+doors要让字典序最小就要让每个数字在满足条件的同时都尽可能的小并且排在前面的数字变小的优先级要比排在后面的数字的优先级更大。\[\begin{aligned}1\operator......
  • Codeforces Round #847 (Div. 3)
    E.VladandaPairofNumbers题目抽象为给\(n\)\((1\len\le2^{29})\),求\(x\)满足\((n-x)\oplus(n+x)=n\),输出\(n-x\)和\(n+x\)。显然\(n\)为奇数肯定不行......
  • CF 1790E. Vlad and a Pair of Numbers_Codeforces Round #847 (Div. 3)
    给出整数x,求一对整数(a,b),满足:\(a\bigoplusb=x\),\(\frac{a+b}{2}=x\)(\(\frac{a+b}{2}\)不四舍五入,也就是\(2\mida+b\))如果不存在这样的(a,b)输出-1分析:如果x的最......
  • Educational Codeforces Round 2 个人总结A-E
    EducationalCodeforcesRound2A.ExtractNumbers简单的模拟boolcheck(stringop){ if(op.size()==1&&op[0]=='0') returntrue; if(op.size()==0||(op[0]<'1......
  • #0031. Educational Codeforces Round 1
    AB简单题C是计算几何,但核心解法很像sgnoi某年的t1,即与其考虑所有pairs,不如只考虑所有相邻的,这样复杂度就从\(O(N^2)\)降到了O(N)(如果不考虑排序的复杂度的话)。不过这......
  • Educational Codeforces Round 142
    目录写在前面ABCDE写在最后写在前面比赛地址:https://codeforces.com/contest/1792。我是超级大鸽子咕咕咕A当且仅当有两个怪物初始血量为1时使用操作1,否则用操作2......
  • Codeforces Round #846 (Div. 2)
    题目链接D题意给定一个数字n,我们需要通过一系列的操作去猜测这个数字。初始的时候会给我们一个cnt,表示二进制下数字n有多少个1.每次我们可以给出一个t,然后另n减去t,系统......
  • Codeforces Round #601 (Div. 2) A-E
    比赛链接A题意给两个数字\(a,b\),每次操作可以使\(a\)加上\(+1,+2,+5,-1,-2,-5\)中的一个数,求最少多少次操作可以将\(a\)变成\(b\)。题解知识点:贪心。可以......
  • CodeForces 1415E New Game Plus!
    洛谷传送门CF传送门相当于将\(n\)个数分成\(k+1\)组,将每组的最大收益相加。容易发现组内的数不增最优。考虑开个堆,维护当前\(k+1\)组的和即可。code/*p_b_......