首页 > 其他分享 >20220924模拟赛解题报告

20220924模拟赛解题报告

时间:2022-09-24 22:01:00浏览次数:61  
标签:20220924 int vis 解题 110 freopen using include 模拟

概要

我 AK 了,srds因为有Q老师的免费测试套餐,才发现题目名错了(

题目难度不大

题目

T1

随便脚算一下人数完了

比赛后 \(-\) 比赛前 \(+\) 晋级的。

code:

#include<bits/stdc++.h>
using namespace std;
int x[10],y[10],yin,huang,bai; 
int main()
{
	freopen("promotion.in","r",stdin);
	freopen("promotion.out","w",stdout);
	for(int i=1;i<=4;i++)
	{
		cin>>x[i]>>y[i];
	}
	bai=y[4]-x[4];
	huang=y[3]+bai-x[3];
	yin=y[2]+huang-x[2];
	cout<<yin<<"\n"<<huang<<"\n"<<bai<<"\n";
	return 0;
}

T2

枚举 boom 的源头,再 bfs 一下,把当前能连锁 boom 的 boom 了。

#include<bits/stdc++.h>
using namespace std;
int n,a[110],ans;
int vis[110];
struct node
{
	int x,r;
};
queue <node> q; 
void bfs(int X)
{
	//int times=0;
	while(!q.empty()) q.pop();
	node l;l.x=X;l.r=1;q.push(l);
	while(!q.empty())
	{
		//times++;
		l=q.front();q.pop();
		int x=l.x,r=l.r;
		if(vis[x] || x<1 || x>n) continue;
		//cerr<<"**"<<x<<" "<<r<<"\n";
		vis[x]=1;
		l.r=r+1;
		for(int i=1;i<=n;i++)
		{
			if(abs(a[i]-a[x])<=r && !vis[i])
			{
				l.x=i;
				q.push(l);
				//cerr<<"**"<<x<<" to "<<i<<"\n";
			} 
		}
	}
}
int main()
{
	freopen("angry.in","r",stdin);
	freopen("angry.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	sort(a+1,a+1+n);
	for(int i=1;i<=n;i++)
	{
		memset(vis,0,sizeof(vis));
		bfs(i);
		int cnt=0;
		for(int j=1;j<=n;j++)
		{
			cnt+=vis[j];
			//cerr<<vis[j]<<" ";
		}
		ans=max(ans,cnt);
		//cerr<<"\n";
	}
	cout<<ans<<"\n";
	return 0;
}

T3

从 \((1,1)\) 开始 bfs,把当前能点亮的访问,如果点亮的四周有,就 \(\texttt{push}\) 一下。

#include<bits/stdc++.h>
using namespace std;
int n,m,ans;
const int dx[]={114514,1,-1,0,0},dy[]={1919810,0,0,1,-1};
struct NodeV
{
	int x,y;
};
struct NodeBfs
{
	int x,y;
};
vector <NodeV> v[110][110];
bool vis[110][110],islight[110][110];
queue <NodeBfs> q;
int main()
{
	freopen("lightson.in","r",stdin);
	freopen("lightson.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		int x,y,a,b;
		scanf("%d%d%d%d",&x,&y,&a,&b);
		v[x][y].push_back({a,b});
	}
	q.push({1,1});
	while(!q.empty())
	{
		int x=q.front().x,y=q.front().y;
		q.pop();
		if(x<1 || y<1 || x>n || y>n || vis[x][y]) continue;
		vis[x][y]=1;
		islight[x][y]=1;
		for(int i=0;i<v[x][y].size();i++)
		{
			int nx=v[x][y][i].x;
			int ny=v[x][y][i].y;
			islight[nx][ny]=1;
			if(vis[nx][ny]==0)
			{
				if(vis[nx-1][ny] || vis[nx+1][ny] || vis[nx][ny-1] || vis[nx][ny+1]) q.push({nx,ny});
			}
		}
		for(int i=1;i<=4;i++)
		{
			int nx=x+dx[i],ny=y+dy[i];
			if(!vis[x][y] || !islight[nx][ny]) continue;
			q.push({nx,ny});
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			//cerr<<islight[i][j];
			ans+=islight[i][j];
		}
		//cerr<<"\n";
	}
	cout<<ans<<"\n";
	return 0;
}

T4

我太菜了,不会用 DP。

可以考虑减半只会对一次影响(因为如果两次及以上就可以换成整的 \(+\) 一半)

枚举 \(4\) 种情况即可

#include<bits/stdc++.h>
#define LL long long
using namespace std;
LL T,t,a,b,c,d,ans=11919810;
int main()
{
	freopen("feast.in","r",stdin);
	freopen("feast.out","w",stdout);
	cin>>T>>a>>b;
	if(a<b) swap(a,b);
	T*=2;
	c=a;
	d=b;
	a*=2;
	b*=2;
	
	//the fang'an of 1st
	t=T;
	for(int i=0;i<=t/a;i++)
	{
		ans=min(ans,t-(i*a)-(t-i*a)/b*b);
		//cerr<<ans<<"\n";
	}
	
	//the fang'an of 2nd
	t=T-c;
	for(int i=0;i<=t/a;i++)
	{
		ans=min(ans,t-(i*a)-(t-i*a)/b*b);
		//cerr<<ans<<"\n";
	}
	
	//the fang'an of 3rd
	t=T-d;
	for(int i=0;i<=t/a;i++)
	{
		ans=min(ans,t-(i*a)-(t-i*a)/b*b);
		//cerr<<ans<<"\n";
	}
	
	//the fang'an of 4th
	t=T-c-d;
	for(int i=0;i<=t/a;i++)
	{
		ans=min(ans,t-(i*a)-(t-i*a)/b*b);
		//cerr<<ans<<"\n";
	}
	//cerr<<ans<<"\n";
	cout<<(T-ans)/2<<"\n";
	return 0;
}
/*
4 possible
1st all do not use
2nd use a/2
3rd use b/2
4th use (a+b)/2
*/

标签:20220924,int,vis,解题,110,freopen,using,include,模拟
From: https://www.cnblogs.com/lzx19/p/match-20220924.html

相关文章

  • 20220924--CSP-S模拟10
    A.欧几里得的噩梦首先发现第一问所询问的异或值数量就是所求的第二问的最小集合的元素个数次方因为除去集合里的任一一个元素,其中若干个元素异或之后的集合就不可能为原......
  • CSP-S模拟10
    T1.欧几里得的噩梦第一眼,这不是线性基板子题吗。但是值域是\(2^{5e5}\),但是我们发现它的一个神奇性质,一个数的二进制中只有两个一。我们定义高位为x,低位为y。如果线性基中......
  • CSP-S模拟10
    体活就是用来上体育的~~~Cat到操场上跑了n圈,6:00~6:25,并且边跑边唱歌,就是那首我最喜欢的"世界问,你是谁,来自哪……"好像路上有人因此回头多看了两眼,今天的云好美,一路上的老......
  • 9.24-CSP-S模拟10
    T1欧几里得的噩梦一眼线性基题,可以证明在模拟线性基插入时,任何时候当前数的为1的位都不会超过二,于是模拟的做法就很显然了。但是这显然复杂度还是错的,赛时百分之八十的人......
  • 2022NOIP前模拟赛订正情况
    √表示已订正,×表示不在能力范围之内,空表示未订正日期ABCD订正地址2022.9.3√√√×https://www.luogu.com.cn/contest/828672022.9.7√××ht......
  • [总结]2022.9.24 挖土机杯 CSP-J 组模拟赛 R1
    [总结]2022.9.24挖土机杯CSP-J组模拟赛R1P1赛时情况看到T1,显然是道白给。但我想了一会。依旧先把题目读完。T2有点模拟的样子,但又有点简单;T3显然dp;T4连乱搞都不会......
  • CF1310C Au Pont Rouge 解题报告
    题意翻译给出一个长度为\(n\)的字符串\(S\)以及整数\(m,k\)。对于一个把\(S\)分割成非空的\(m\)段的一个方案,我们用这个方案中分割出的字典序最小的一个串代表......
  • 队列的模拟及环形队列思路
    定义队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出模拟思路队列本身是有序列表,若使用数组的......
  • CSP模拟10
    现在有这样一种感觉:是在留下永远不会在有人看的遗产。T1正解并查集,直接把每次给你的\(x,y\)用并查集合并一下(没有\(y\)就把\(x\)和\(0\)合并一下)并加入答案,如果......
  • Noip模拟赛34
    noip模拟赛34$$给定1\ldotsN的一个排列a,M次操作,操作有两种:1lmr表示将al,al+1,...,ar改为merge(\{a_l,a_{l+1},...,a_m\},\{a_{m+1},a_{m+2},...,a_r\2i,表......