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;
}
相关推荐
Tisfy15 小时前
LeetCode 1339.分裂二叉树的最大乘积:深度优先搜索(一次DFS+存数组并遍历)
算法·leetcode·深度优先·题解
惆怅客1232 天前
UVa1409/LA4019 Go to Class
最短路·dijkstra·计算几何·运动规划·离散化·icpc·uva
小龙报2 天前
【算法通关指南:数据结构与算法篇 】二叉树相关算法题:1.新二叉树 2.二叉树的遍历
c语言·数据结构·c++·人工智能·物联网·算法·深度优先
Wuliwuliii4 天前
Hall定理的应用
贪心·hall定理
Boilermaker19924 天前
[算法基础] FooldFill(DFS、BFS)
算法·深度优先·宽度优先
平生不喜凡桃李4 天前
Leetcode-240 :搜索二维矩阵
leetcode·矩阵·深度优先
惆怅客1235 天前
icpc中求解各种搜索问题的算法
迭代加深搜索·搜索·icpc·启发式搜索·uva·对抗搜索·dlx
长安er5 天前
LeetCode121/55/45/763 贪心算法理论与经典题解析
java·数据结构·算法·leetcode·贪心算法·贪心
WW_千谷山4_sch5 天前
洛谷P1120&UVA307 [CERC 1995] 小木棍
c++·算法·深度优先
WW_千谷山4_sch6 天前
洛谷P8653:[模板] [蓝桥杯 2017 国 C] 分考场(染色最小色数)
c++·算法·蓝桥杯·深度优先