首页 > 其他分享 >2023.11.1 模拟赛

2023.11.1 模拟赛

时间:2023-11-05 11:24:13浏览次数:40  
标签:int rint 2023.11 long time age 模拟 define

T1 game

题目大意

两个 \(2 × 2\) 的方格,问方格一能否通过将滑动操作变成方格二,X 代表空格

样例

AB
XC
AC
BX

NO

题目分析

数据范围很小,我们可以进行暴力搜索,对于有 X 的点就让它移动向两个方向移动一下,对于每一个 dfs 最多搜十次,时空复杂度 \(O(2^{10})\)

#include <bits/stdc++.h>

#define rint register int
#define int long long
#define endl '\n'

#define ck a[i][j] == 'X'

using namespace std;

const int N = 5;
const int MAX = 10;

int n = 2;
char a[N][N], b[N][N], c[N][N];

bool kk; 

void dfs(int cnt)
{
	//cout << cnt << endl;
	if (cnt >= MAX) return ;
	
	/*if (cnt == 1)
	{
		cout << a[1][1] << a[1][2] << endl;
		cout << a[2][1] << a[2][2] << endl;
		return ;
	}*/
	bool flag = 0;
	for (rint i = 1; i <= n; i++)
	{
		for (rint j = 1; j <= n; j++)
		{
			if (a[i][j] != b[i][j])
			{
				flag = 1;
			}
		}
	}
	//if (cnt == 1) return ;
	
	if (flag == 0)
	{
		kk = 1;
		return ;
	}
	
	for (rint i = 1; i <= n; i++)
	{
		for (rint j = 1; j <= n; j++)
		{
			if (ck && i == 1 && j == 1)
			{
				a[1][1] = a[1][2]; a[1][2] = 'X';
				dfs(++cnt); 
				cnt--;
				a[1][2] = a[1][1]; a[1][1] = 'X';
				
				a[1][1] = a[2][1]; a[2][1] = 'X';
				dfs(++cnt); 
				cnt--;
				a[2][1] = a[1][1]; a[1][1] = 'X';				
			}
			else if (ck && i == 1 && j == 2)
			{
				a[1][2] = a[1][1]; a[1][1] = 'X';
				dfs(++cnt);
				cnt--;
				a[1][1] = a[1][2]; a[1][2] = 'X';
				
				a[1][2] = a[2][2]; a[2][2] = 'X';
				dfs(++cnt);
				cnt--;
				a[2][2] = a[1][2]; a[1][2] = 'X';
			}
			else if (ck && i == 2 && j == 1)
			{
			    a[2][1] = a[1][1]; a[1][1] = 'X';
			    dfs(++cnt);
			    cnt--;
			    a[1][1] = a[2][1]; a[2][1] = 'X';
			    
			    a[2][1] = a[2][2]; a[2][2] = 'X';
			    dfs(++cnt);
			    cnt--;
			    a[2][2] = a[2][1]; a[2][1] = 'X';
			}
			else if (ck && i == 2 && j == 2)
			{
				a[2][2] = a[1][2]; a[1][2] = 'X';
			    dfs(++cnt);
			    cnt--;
			    a[1][2] = a[2][2]; a[2][2] = 'X';

				a[2][2] = a[2][1]; a[2][1] = 'X';
			    dfs(++cnt);
			    cnt--;
			    a[2][1] = a[2][2]; a[2][2] = 'X';
			}
		}
	}
}

signed main()
{	
	for (rint i = 1; i <= n; i++)
	{
		for (rint j = 1; j <= n; j++)
		{
			cin >> c[i][j];
			a[i][j] = c[i][j];
		}
	}
	
	for (rint i = 1; i <= n; i++)
	{
		for (rint j = 1; j <= n; j++)
		{
			cin >> b[i][j];
		}
	}
	
	dfs(0);
	
	if (kk == 1) cout << "YES";
	else cout << "NO";
	
	return 0;
}

T2 price

题目大意

\(n\) 个人买东西,每个人有理想价格,如果定价高过理想价格他们就会买,求利润最大值

输入 \(n\),第二行 \(n\) 个数表示理想价格

输出最大利润及对应定价,如果有多组解,输出定价最低的那个

\(n < 10^5, a_i < 10^6\)

样例

4
1 6 4 6

题目分析

排序,然后遍历一遍,二分查找当前点所在序列位置,计算答案,更新答案:

代码

#include <bits/stdc++.h>

#define rint register int
#define int long long
#define endl '\n'

using namespace std;

const int N = 4e5 + 5;
const int inf = 1e8;

int n;
int a[N], ans = 0, minn = inf;
int c[N], s[N];

signed main()
{
	cin >> n;
	for (rint i = 1; i <= n; i++)
	{
		cin >> a[i];
	}
	sort(a + 1, a + n + 1);
	int len = a[n];
	int j = 0;
	for (rint i = 1; i <= a[n]; i++)
	{
		j = lower_bound(a + 1, a + n + 1, i) - a - 1;
		//cout << (n - j) * i << endl;
		if (ans < (n - j) * i)
		{
			ans = (n - j) * i;
			minn = i;
		}
	}
	cout << ans << " " << minn << endl;
	return 0;
}

T3 wait

题目传送门

题目分析

资历程度不同的 cow 吃草顺序不同

所以用优先队列维护即可

赛时智慧的我直接插入数组,导致出现莫名 WA,挂掉 90pts

10pts 代码

#include <bits/stdc++.h>

#define rint register int
#define int long long
#define endl '\n'
#define time time__

using namespace std;

const int N = 2e5 + 5;
const int inf = 1e18;

int n;
int maxx = 0;
int time = 0;

struct node
{
	int age;
	int a, time;
}f[N];

bool cmp(node a, node b)
{
	if (a.a != b.a)
	{
		return a.a < b.a;
	}
	if (a.a == b.a)
	{
		return a.age > b.age;
	}
}

bool cmp1(node a, node b)
{
	return a.age > b.age;
}

signed main()
{
	cin >> n;
	
	f[n + 1].a = inf;
	
	for (rint i = 1; i <= n; i++)
	{
		cin >> f[i].a >> f[i].time;
		f[i].age = n - i + 1;
	}
	
	sort(f + 1, f + n + 1, cmp);
	
	time = f[1].a + f[1].time;
	
	for (rint i = 2; i <= n;)
	{
		//cout << i << " " << time << endl;
		if (f[i].a <= time)
		{
			int k = i;
			while (1) 
			{
				if (f[k].a <= time) k++;
				else break;
			}
			k--;
			
			sort(f + i, f + k + 1, cmp1);
			
			for (rint j = i; j <= k; j++)
			{
				//cout << f[j].a << " " << time << endl;;
				maxx = max(maxx, time - f[j].a);
				time += f[j].time;
			}
			i = k + 1;
		}
		else
		{
			time = f[i].a;
			//i++;
		}
	}
	
	cout << maxx << endl;
	
	return 0;
}

赛后 100pts 代码

#include <bits/stdc++.h>

#define rint register int
#define int long long
#define endl '\n'
#define time time__

using namespace std;

const int N = 2e5 + 5;
const int inf = 1e9;

int n;
int time = 0;
int maxx = 0;

struct cow
{
	int a, time, age;
}f[N];

priority_queue<cow> q;

bool operator < (cow x, cow y)
{
	return x.age > y.age;
}

bool cmp(cow x, cow y)
{
	return x.a < y.a;
}

signed main()
{
	cin >> n;
	for (rint i = 1; i <= n; i++)
	{
        cin >> f[i].a >> f[i].time;
        f[i].age = i;
	}
	sort(f + 1, f + n + 1, cmp);
	auto s = f[1];
	q.push(s);
	time = f[1].a;
	for (rint i = 2; i <= n; )
	{
		if (q.empty())
		{
			q.push(f[i]);
			time = f[i].a;
			i++;
		}
		auto x = q.top();
		maxx = max(maxx, time - x.a);
		time += x.time;
		q.pop();
		while (f[i].a <= time && i <= n)
		{
			q.push(f[i]);
			i++;
		}
	}
	
	cout << maxx << endl;
	
	return 0;
}

T4 func

题目大意

查询 \(q\) 个 \(f(a)\) 的值

\(f(a)=\max_{0<b<a}\gcd(a\oplus b,a\ \&\ b)\)

数据范围:\(1\le q\le 10^3\),\(2\le a_i\le 2^{25}-1\)

题目分析

通过打表,发现结论是有规律的 他一定为 \(2^k-1\),对于 \(n=2^k-1\) ,结果单独另算,可以打表求出

代码

#include <bits/stdc++.h>

#define rint register int
#define int long long
#define endl '\n'

using namespace std;

const int N = 1e5 + 5;

int T;
int f[N] = {0, 0, 1, 1, 5, 1, 21, 1, 85, 73, 341, 89, 1365, 1, 5461, 4681, 21845, 1, 87381, 1, 349525, 299593, 1398101, 178481, 5592405, 1082401};

signed main() 
{
	cin >> T;
	
    while (T--)
    {
		int n;
		cin >> n;
		int x = log2(n + 1) + 1;
		if (!(n & (n + 1)))
		{
			cout << f[x - 1] << endl;
		}
		else
		{
			cout << (1 << x) - 1 << endl;
		}
	}
	
	return 0;
}

标签:int,rint,2023.11,long,time,age,模拟,define
From: https://www.cnblogs.com/spaceswalker/p/17810323.html

相关文章

  • 2023.11.4测试
    \[\text{NOIP模拟赛-2023.11.4}\]T1难题设\(f(i)\)表示最小的非\(i\)因数的正整数,求\(\sum\limits_{i=1}^nf(i)\)\(T\leq10^4\),\(1\leqn\leq10^{16}\)考虑计算数\(x\)对\(f(1\simn)\)的贡献通过分析可以发现,\(1\simx\)能筛掉的数的个数为\(n-\dfrac{n}{\ope......
  • NOIP 模拟赛 11~11
    模拟11A层联测24100+0+20+10=130ptsrk32T1签到题T2最大值的最小竟然没想到二分,退役吧。。爆搜所有路径不知道哪写挂了赛后被卡成零蛋。。。T3暴力枚举T4二维前缀差分暴力T1花菖蒲首先有解一定满足\(b\lea-2\)。当\(b=0\)时,可以想到构造菊花图。当\(b=a-2\)......
  • 2023.11.4——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.软考知识明日计划:学习......
  • 2023.11.4
    提前打摆开始写总结。A记\(\displaystlef(x)=\min_{i\in\mathbb{N^+}}\),求\(\displaystyle\sum_{i=1}^{n}f(i)\).答案模\(1\mathrm{e}9+7\),多测。\(n\le10^{16}\),\(T\le10^4\).从小到大考虑每个\(f(i)\)的出现次数。若当前求\(x\)的出现次数,那么符合的是\(\b......
  • 2023.11.3——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.软考知识明日计划:学习......
  • 11.3 模拟赛小记
    今天题目质量逆天,题也不是那个他讲的。应该是生气了。所以我也不打算写赛时记录了。T1分讨负数个数,T2二分答案;T3我写了哈希,想半天想不到性质;T4小范围暴力大范围输出区间最大值+暴力之类的。本场的感觉很不好。模拟赛期间最绝望的是闲下来:指已经不能进一步思考、没有什么......
  • NOIP2023模拟9联测30
    这篇博客是第二天赛时写的。(恼)T1数学题。肯定是想把\(k\)质因数分解,然后找一找规律,发现对于一个最小的\(n\)一定不包括除了\(k\)有的质因子以外的其他质因子,因为其他质因子对是不是\(k\)的倍数没有用。\(n^2\)相当于把\(n\)的所有质因子的指数乘了个\(2\),那么只......
  • 代码模拟死锁
    publicclassDeadLockDemo{privatestaticObjectresource1=newObject();//资源1privatestaticObjectresource2=newObject();//资源2publicstaticvoidmain(String[]args){newThread(()->{synchronized(resource1......
  • 飞行模拟机—使用WED建设一个新机场
    为了有一个独立的数据验证空间,我们需要自己来建一个机场,今天用到的工具是WorldEditor2.5(简称WED)。WED软件功能非常丰富,可用来绘制机场的多种场景,当下我们只取其中关于跑道和灯光的内容来使用,机坪、滑行道等细节内容时间关系暂时就不考虑了。打开软件后,在初始界面中,首先......
  • 2023.11.3 做题记录
    CF349B*1700\(Igor\)深深爱上了\(Tanya\).现在,\(Igor\)想表达他的爱意,他便在\(Tanya\)家对面的墙上写下一串数字.\(Igor\)认为,数字写得越大,\(Tanya\)越喜欢他.不幸的是,他只有\(v\)升油漆,每个数字都会花掉一定的油漆\(a_i\).\(Igor\)不喜欢\(0\)所以数中不会出......