K-独立钻石(dfs),G-邪恶铭刻(贪心)

这两题,都是应该赛场上A出来的。

K.独立钻石


当时一直关注点在 I. Path Planning,没关注榜单,K,也能写,也就是dfs,从数据范围可以看出,直接暴力搜索。

代码

c 复制代码
#include<bits/stdc++.h>
#define int long long 
#define IOS ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
using namespace std;
int n,m,kk,x,y,a[15][15],ans;
int b[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
void dfs()
{
	ans=min(kk,ans);
	for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++)
	{ 
		if(a[i][j]==1)
		{
			for(int l=0;l<4;l++)
			{
				int ii=i+b[l][0],jj=j+b[l][1];
				if(a[ii][jj]==1)
				{
					int iii=ii+b[l][0],jjj=jj+b[l][1];
					if(a[iii][jjj]==0&&iii>=1&&iii<=n&&jjj>=1&&jjj<=m)//这个范围要界定
					{
						kk--;
						a[i][j]=0,a[ii][jj]=0,a[iii][jjj]=1;//补题时,错写成双等,又费了不少时间
						dfs();
						kk++;
						a[i][j]=1,a[ii][jj]=1,a[iii][jjj]=0;
					}
				}
			}
			
		}	
	}
}
void solve()
{
	
	memset(a,0,sizeof(a));
	cin>>n>>m>>kk;
	for(int i=0;i<kk;i++)
	{
		cin>>x>>y;
		a[x][y]=1;
	}
	 
		ans=kk;
		dfs();
		cout<<ans<<'\n';
}
signed main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int t;
	cin>>t;
	while(t--)
	solve();
	return 0;
}

G.邪恶铭刻

在这场中,只写出一道签到题,此题并不难,也不复杂,从前往后算就行了。当时,第一思路,先入为主,一直被绕在里边,改了十几次,改一次,发现一个漏洞,一直在完善特判,应该想到,既然有那么多漏洞,那思路方法就有问题,肯定有更优解法,答案也是这样,将近五个小时的debug太傻了,毫无用处。

(错误思路:考虑1,-1,过程中用1,0作-1的弥补,最后将剩余0判断变成什么,其实究竟如何,心里是没底的,妄想投机取巧。判断剩余0,也是多此一举,遍历中已经可以得到答案)

正确: 0优先考虑-1,否则1,当遇到-1,且分母不足时,就将变为-1 的0再变回来
最大公约数 __gcd(p,q)

代码

c 复制代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
	int p=1,q=1,n,sum=0,f=0;
 	cin>>n;
 	while(n--)
 	{
 		int k;
	 	cin>>k;	
	 	if(f==0)
	 	{
		 	if(k==0)
	 	 	{
	 		 	if(q<2) p++,q++;
	 			else q--,sum++;
	 		 }
	 		 else if(k==1)
	 		 p++,q++;
	 		 else
	 		 {
	 		 	if(q<2) 
	 			 {
	 			 	if(sum<1) 
	 				 {
	 				 	cout<<"-1"<<'\n';
	 				    f=1;
	 				 }
	 			 	else    sum--,p++,q++;
	 			 }
	 			 else q--;	
	 	      }			
		 }
	 	
 	}
	   if(f==0)	
		 cout<<p/__gcd(p,q)<<" "<<q/__gcd(p,q)<<'\n';
}
signed main()
{
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	int t;
	cin>>t;
	while(t--)
	{
		 solve();	
	 } 
	 return 0;
}
相关推荐
何妨重温wdys2 天前
跳跃游戏(二):DFS 求解最少跳跃次数与最优路径
算法·深度优先
执子手 吹散苍茫茫烟波2 天前
leetcode46.全排列
java·leetcode·链表·深度优先·回溯法
熬了夜的程序员5 天前
【LeetCode】30. 串联所有单词的子串
算法·leetcode·链表·职场和发展·深度优先
sssvangen5 天前
数字接龙(dfs)(蓝桥杯)
算法·蓝桥杯·深度优先
爱coding的橙子6 天前
每日算法刷题Day65:8.27:leetcode dfs11道题,用时2h30min
算法·leetcode·深度优先
岁月静好20256 天前
Leetcode 深度优先搜索 (15)
算法·leetcode·深度优先
快去睡觉~6 天前
力扣18:四数之和
算法·leetcode·深度优先
qq_433554549 天前
C++深度优先搜素
开发语言·c++·深度优先
啊我不会诶11 天前
【图论】拓扑排序
算法·深度优先·图论
Ldawn_AI11 天前
4+ 图论高级算法
算法·深度优先·图论