草庐IT

zzuli预热赛-acm可好(5) 题解

Meteor的博客 2023-03-28 原文

1 acm可好玩了

题解:直接输出acm可好玩了即可

\(code\)

#include <stdio.h>
int main()
{
	printf("acm可好玩了\n"); 
}

2 scz的简单十道题

  1. 质数的定义是:当且仅当能被\(1\)#和自己整除的数叫做质数,那么这里两个数字很大,但是\(a\times b\)必然不是质数,因为称的话必然能够被\(a\)\(b\),或者其他的质因子整除等,所以必然是错误的
  2. 高中的数学知识:等比数列有两个求和公式:
    1. \(q=1\)的时候:\(S_{n}=na_{1} (q=1)\)
    2. \(q\ne 1的时候\)\(S_{n}=a_{1} \frac{1-q^{n}}{1-q}\) \((q \ne 1)\)
    3. 显然是错误的,出题人这种脑残的题都出,哎,智商堪忧
    4. 高中的几个基本放缩,相信大家数学一定懂得的!,显示是正确的
    5. 众所周知,写题要快!,奇函数有一个性质:\(f(x)+f(-x)=0\) 那么直接带入\(x=1\),可以解得\(a=\frac{1}{2}\),并且满足题意,那么显然是正确的
    6. 这里是\(\cos\),不是\(\sin\),也是高中的基本知识
      7.这里比较迷糊人,出题人也是看小学数学才知道的,根据前面的定义可以知道,这里的小数部分是\(-0.66\)
    7. 正确的,出题人在百度百科上抄的
    8. 显然是错误的,因为\(AC=Accepted\),希望22级新生各个\(AC\)!
    9. 错误的,但是\(scz\)很强!

\(code\)

#include <stdio.h>
int main()
{
	printf("FFFTTFFTFF\n");
}

3 做scz的狗

这道题直接按照题意模拟就可以了,注意一下细节

\(code\)

#include<stdio.h>
int main(){
	int n;
	scanf("%d", &n);
	
	char a[14][42];
	
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= 3 * n + 2; j++){
			a[i][j] = ' ';
		}
	}
	
	// 打印 S
	for(int j = 2; j < n; j++)a[1][j] = a[(n + 1) / 2][j] = a[n][j] = '#';
	for(int i = 2; i < (n + 1) / 2; i++)a[i][1] = '#';
	for(int i = (n + 1) / 2 + 1; i < n; i++)a[i][n] = '#';
	a[2][n] = a[n - 1][1] = '#';
	
	// 打印 C
	for(int j = n + 3; j < 2 * n + 1; j++)a[1][j] = a[n][j] = '#';
	for(int i = 2; i < n; i++)a[i][n + 2] = '#';
	a[2][2 * n + 1] = a[n - 1][2 * n + 1] = '#';
	
	// 打印 Z
	for(int j = 2 * n + 3; j <= 3 * n + 2; j++)a[1][j] = a[n][j] = '#';
	for(int i = 2, j = 3 * n + 1; i < n; i++, j--)a[i][j] = '#';
	
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= 3 * n + 2; j++){
			putchar(a[i][j]);
		}
		if(i!=n)putchar('\n');
	}
	
	return 0;
}


4 Lycoris

我拿到最大的糖果,而且让所有人相同,那么应该是让所以人的糖果等于最少的糖果就可以了,我们的糖果数量就是其余的糖果

\(code\)

#include<stdio.h>
#include<math.h>


int a_[55];

int main(){
	int t; scanf("%d\n", &t);
	while(t -- ){
		int n; scanf("%d", &n);
		int minn = 1e9, ans = 0;
		for(int i = 0; i < n; i ++ ){
			scanf("%d", &a_[i]);
			if(a_[i] <= minn) minn = a_[i];//minn就是最小的糖果
		}
		for(int i = 0; i < n; i ++ ){
			ans += a_[i] - minn;//这里ans 不会爆long long , 这里算的就是差值
		}
		printf("%d\n", ans);
	}
}

5 寻找2022级最强oi爷

这里判断字符串,我们可以先判断字符串的大小,如果这里不是等于\(4\),那么这里就是错误的,然后我们可以用tolower()函数将所有的字符串转成小写,然后用strcmp()函数进行判断相同,同样,也可以手动转小写,或者判断相同,这里仅是出题人的一种做法

\(code\)

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main()
{
    int n;
    char str[15];

    scanf("%d", &n);
    while (n--)
    {
        scanf("%s", str);
        int len = strlen(str);
        if (len != 4)
        {
            printf("NO\n");//直接输出NO,
            continue;//跳过了
        }

        for (int i = 0; i < 4; i++)
            str[i] = tolower(str[i]);//转小写
        
        if (strcmp(str, "oiye") == 0)//如果相同
            printf("YES\n");
        else//不相同的话
            printf("NO\n");
    }
    return 0;
}

6 fufu吃大米

这里只要统计这个对角线的上面就可以了,用二维数组进行模拟一下就行

\(code\)

#include <stdio.h>
#define N 110

int a[N][N];

int main()
{
	int n;
	scanf("%d", &n);
	
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= n; j++) scanf("%d", &a[i][j]);//读入
	
	int res = 0;
	for (int i = 1; i <= n / 2; i++)
		for (int j = i + 1; j <= n - i; j++) res += a[i][j];//统计上面的格子, 注意细节
	
	printf("%d\n", res);
}

7 你玩过糖豆人吗

这里就是判断一下二维数组的曼哈顿距离就可以,曼哈顿的距离要小于时间\(time\),并且这个数字要等于\(number\),然后暴力就行了,

#include <stdio.h>
#include <stdlib.h>

int a[11][11];
int main() {
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;++i) {
        for(int j=1;j<=n;++j) {
            scanf("%d",&a[i][j]);//读二维数组
        }
    }
    int x,y,t,num;
    scanf("%d %d %d %d",&x,&y,&t,&num);
    for(int i=1;i<=n;++i) {
        for(int j=1;j<=n;++j) {//遍历判断
            if(a[i][j]==num&&abs(x-i)+abs(y-j)<=t) {
                printf("Yes\n");
                return 0;//如果找到,直接退出
            }
        }
    }
    printf("No\n");
    return 0;
}

8 hygg的训练计划

解法1:

考虑差分,对于\([a,b]\)区间,我们可以直接差分,表示当前用过此区间,然后在统计的时候如果差分数组大于\(0\)的就是可以用的,时间复杂度是\(O(n)\),即\(O(能过)\)

#include <stdio.h>

int time[1000010];

int main () {
	int q;
	scanf("%d", &q);
	for (int i = 1; i <= q; i ++ ) {
		int l, r;
		scanf("%d%d", &l, &r);
		time[l] ++ , time[r + 1] -- ;//差分
	}
	
	int cnt = 0;
	for (int i = 1; i <= 1e6; i ++ ) {
		time[i] += time[i - 1];//边做前缀和边统计
		if (time[i] > 0) cnt ++ ;	
	}
	printf("%d\n", cnt);
}

如果不了解的话,可以学习一下前缀和差分,

解法2

对于每一次区间合并,我们可以用并查集来算,一个并查集的时间复杂接近于\(O(1)\),综合的时间复杂度是\(O(n)\)
每一次合并的时候是l到r,那么我们就遍历l,r然后将这边的数据合并到r+1这个区间连,虽然都要遍历l,r,但是总长度是\(n\),所以最大的时间复杂度还是\(O(n)\)
ZZULIOJ好像不欢迎C语言,C语言TLE了

#include <stdio.h>
#define N 200010
int p[N];
int m;
int find(int x)
{
	if(x!=p[x]) p[x]=find(p[x]);
	return p[x];
}
int main()
{
	scanf("%d",&m);
	for(int i=1;i<=N;i++) p[i]=i;
	int ans=0;
	for(int i=0;i<m;i++)
	{
		int l,r;
		scanf("%d%d",&l,&r);
		for(int i=find(l);i<=r;i=find(i+1))
		{
			ans++;
			p[i]=find(i+1);
		}
	}
	printf("%d",ans);
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define eps 1e-8
#define int128 __int128
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) a/gcd(a,b)*b
#define lowbit(x) (x&-x)
#define all(x) x.begin(), x.end()
#define debug(x...) do { cout<< #x <<" -> "; re_debug(x); } while (0)
void re_debug() { cout<<'\n'; }
template<class T, class... Ts> void re_debug(const T& arg,const Ts&... args) { cout<<arg<<" "; re_debug(args...); }
int test=1;
void cut(){cout<<"test:"<<' '<<test++<<'\n';}
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
const int INF=0x3f3f3f3f;
const ll LNF=0x3f3f3f3f3f3f3f3fll;
const double PI=acos(-1.0);
const int N=2000010;
int n,m;
int p[N];
int find(int x)
{
	if(x!=p[x]) p[x]=find(p[x]);
	return p[x];
}
void solve()
{
	cin>>m;
	for(int i=1;i<=N;i++) p[i]=i;
	int ans=0;
	while(m--)
	{
		int l,r;
		cin>>l>>r;
		for(int i=find(l);i<=r;i=find(i+1))
		{
			ans++;
			p[i]=find(i+1);
		}
	}
	cout<<ans<<'\n';
	
	
}
int main()
{
	IOS;
	int T=1;
	//	cin>>T;
	while(T--) solve();
	return (0^0);
}

9 lzc和zyb的生日

这里就是为了判断一下闰年就行了,注意:闰年的判断跟平常的不是一样的,比如\(1900\)就不是闰年,可以上网查一下,zzulioj上也有一道判断闰年的题目:zzulioj i love 闰年!

#include <stdio.h>

int is_leap (int x) {
	if ((x % 4 == 0 && x % 100 != 0) || (x % 400 == 0)) {//判断闰年的方式
		return 1;
	}
	else return 0;
}

int main () {
	int year, month, day;
	scanf("%d%d%d", &year, &month, &day);
	if (month > 2) {//这里要判断一下在2月前还是后,因为有可能是365天,也有可能是366天
		if (is_leap(year + 1)) puts("366");
		else puts("365");
	}
	else {
		if ((is_leap(year))) puts("366");
		else puts("365");
	}
}

10 scz的异世界探索之旅

这道题也有很多解法,这里用写题解的人的一种解法,根据题意可以知道,\(G\)\(B\)是认为是相同的,那么,对于一列来说,如果说有一个是\(R\),那么另一个必然一定是\(R\),\(B\)\(G\)我们可以不用管,我们可以扫一遍,然后判断就可以了

#include <stdio.h>
#define N 1010
char g[3][N];
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n;
		scanf("%d",&n);
		for(int i=1;i<=2;i++)
		{
			scanf("%s",g[i]+1);//读入字符串//注意 这样就是从下标1开始往后读了
		}
		int is_true=1;
		for(int i=1;i<=n;i++)
		{
			if(g[1][i]=='R')
			{
				if(g[2][i]!='R')
				{
					is_true=0;
				}
			}
			if(g[2][i]=='R')
			{
				if(g[1][i]!='R')
				{
					is_true=0;
				}
			}
		}
		if(is_true) printf("YES\n");
		else printf("NO\n");
		
	}
}

有关zzuli预热赛-acm可好(5) 题解的更多相关文章

  1. NEUQ-acm 预备队训练Week4—BFS/DFS - 2

    1.深度优先搜索(DFS)深度优先遍历主要思路是从图中一个未访问的顶点V开始,沿着一条路一直走到底,然后从这条路尽头的节点回退到上一个节点,再从另一条路开始走到底…,不断递归重复此过程,直到所有的顶点都遍历完成。例题P1605迷宫题目描述给定一个N×MN\timesMN×M方格的迷宫,迷宫里有TTT处障碍,障碍处不可通过。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。给定起点坐标和终点坐标,每个方格最多经过一次,问有多少种从起点坐标到终点坐标的方案。输入格式第一行为三个正整数N,M,TN,M,TN,M,T,分别表示迷宫的长宽和障碍总数。第二行为四个正整数SX,S

  2. 【算法题解】20. 两数之和 - 2

    这是一道简单题题目来自:https://leetcode.cn/problems/two-sum/题目给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。提示:22nums.length104−109−109nums[i]109−109−109target109只会存在一个有效答案进阶:你可以想出一个时间复杂度小于O(n2)O(n^2)O(n2)的算法吗?示例1:输入:nums=[2,7,11,15],targe

  3. 蓝桥杯第十四届省赛完整题解 C/C++ B组 - 2

    没有测评,不知道对不对,仅仅过样例而已试题A:日期统计本题总分:5分【问题描述】小蓝现在有一个长度为100的数组,数组中的每个元素的值都在0到9的范围之内。数组中的元素从左至右如下所示:5686916124919823647759503875815861830379270588570991944686338516346707827689565614010094809128502533现在他想要从这个数组中寻找一些满足以下条件的子序列:   1.子序列的长度为8;   2.这个子序列可以按照下标顺序组成一个yyyymmdd格式的日期,并且要求这个日期是2023年中的某一天的日期,例如202309

  4. 2023第十四届蓝桥杯C/C++B组省赛题解 - 2

    2023蓝桥C/C++B组省赛文章目录2023蓝桥C/C++B组省赛试题A:日期统计题目描述枚举参考代码试题B:01串的熵题目描述枚举|模拟参考代码试题C:冶炼金属题意描述取交集参考代码试题D:飞机降落题意描述DFS+剪枝,懒得写试题E:接龙数列题意描述DP参考代码试题F:岛屿个数题意描述dfs|连通块参考代码试题G:子串简写题意描述前缀和参考代码试题H:整数删除题意描述双向链表|最小堆参考代码试题I:景区导游题意描述带权LCA参考代码试题J:砍树题意描述树上差分参考代码试题A:日期统计题目描述【问题描述】小蓝现在有一个长度为100的数组,数组中的每个元素的值都在0到9的范围之内。数组中的元素

  5. go - crypto/autocert 包停止工作,永远挂起等待 acme 挑战 - 2

    我一直依赖这个库有一段时间了,没有任何问题,但突然间它完全忽略了缓存的证书,尝试获取新证书,但它只是永远等待显然永远不会出现的acme挑战。据我所知,我的用法是完全正确的(这在过去几周内一直有效,没有问题):certManager:=autocert.Manager{Prompt:autocert.AcceptTOS,HostPolicy:autocert.HostWhitelist("example.com"),Cache:autocert.DirCache("certs"),}c1:=make(chanerror)gofunc(){err:=http.ListenAndServe(

  6. LeetCode——链表简单题题解 - 2

    83.删除排序链表中的重复元素题目描述给定一个已排序的链表的头head,删除所有重复的元素,使每个元素只出现一次。返回已排序的链表。输入:head=[1,1,2]输出:[1,2]解题思路:用一个指向节点类型的指针保存头结点,用另一个指向节点类型的指针对该链表进行遍历,由于是有序的,当出现不同的值就说明不会再出现跟前面的值相同的节点了,最后循环结束的条件是遍历到最后一个节点的时候,也就是该节点的next指向空的时候,停止循环,返回该保存的头结点,另外,如果传过来的头结点是空,则直接返回空。参考代码:/***Definitionforsingly-linkedlist.*structListNod

  7. NEUQ week 12 题解 - 2

    P1776宝物筛选宝物筛选题目描述终于,破解了千年的难题。小FF找到了王室的宝物室,里面堆满了无数价值连城的宝物。这下小FF可发财了,嘎嘎。但是这里的宝物实在是太多了,小FF的采集车似乎装不下那么多宝物。看来小FF只能含泪舍弃其中的一部分宝物了。小FF对洞穴里的宝物进行了整理,他发现每样宝物都有一件或者多件。他粗略估算了下每样宝物的价值,之后开始了宝物筛选工作:小FF有一个最大载重为WWW的采集车,洞穴里总共有nnn种宝物,每种宝物的价值为viv_ivi​,重量为wiw_iwi​,每种宝物有mim_imi​件。小FF希望在采集车不超载的前提下,选择一些宝物装进采集车,使得它们的价值和最大。输入

  8. 2023第十四届蓝桥杯 C/C++大学生A组省赛 满分题解 - 2

    写在前面以下代码,目前均可通过民间OJ数据(dotcpp&NewOnlineJudge),两个OJ题目互补,能构成全集,可以到对应链接下搜题提交(感谢OJ对题目的支持)如果发现任何问题,包含但不限于算法思路出错、OJ数据弱算法实际超时、存在没考虑到的边界情况等,请及时联系作者​​题解A.幸运数(模拟)题面​题解 由于是填空题,按题意本地暴力,几秒就跑出来结果了,直接交结果代码#includeusingnamespacestd;intans;intmain(){ /* for(inti=1;iB.有奖问答(搜索/dp)题面​题解1.搜索:2的30次方种可能,每次要么+10要么清零,遇到100分时

  9. 【独家】华为OD机试提供C语言题解 - 箱子之形摆放 - 2

    最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理已参加机试人员的实战技巧文章目录最近更新的博客使用说明箱子之形摆放题目输入输出示例一输入输出说明备注Code

  10. 华为机试(6.17笔试题解析) - 2

    华为机试一共三道题,分值分别是100,100,200,满分400分,限时2.5小时。我抽到的这三题相对来说比较简单,满分通过,这里做个总结:第一题:数据分类■ 题目描述 对一个数据a进行分类,分类方法为:此数据a(四个字节大小)的四个字节相加对一个给定的值b取模,如果得到的结果小于一个给定的值c,则数据a为有效类型,其类型为取模的值;如果得到的结果大于或者等于c,则数据a为无效类型。比如一个数据a=0x01010101,b=3,按照分类方法计算(0x01+0x01+0x01+0x01)%3=1,所以如果c=2,则此a为有效类型,其类型为1,如果c=1,则此a为无效类型;又如一个数据a=0x01

随机推荐