首页 > 其他分享 >2024年2月20号题解

2024年2月20号题解

时间:2024-02-20 20:46:25浏览次数:30  
标签:20 int 题解 31 ans 2024 s2 include define

P5594 【XR-4】模拟赛

解题思路

  1. 重点是怎么判断是不是同一套模拟题
  2. 用一个数组来标记是不是同一套题

代码实现

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <stdbool.h>
#define u unsigned
#define ll long long
#define sc scanf
#define pr printf 
#define fr(i, j, n) for (int i = j; i < n; i++)
#define N 1001

int n, m, k;
int a[N][N];
int ans[N];

int main(int argc, char* argv[])
{
	sc("%d%d%d", &n, &m, &k);
	
	for (int i = 1; i <= n; i ++) {
		for (int j = 1; j <= m; j ++) {
			sc("%d", a[i] + j);
		}
	}
	
	for (int i = 1; i <= m; i ++) {
		bool v[N] = {0};//用来标记 
		for (int j = 1; j <= n; j ++) {
			if (!v[a[j][i]]) {//如果之前没有访问过,代表要增加一场考试 
				ans[a[j][i]] ++;//对应的天数加一 
			}
			v[a[j][i]] = 1;//访问过之后就标记已经访问了 
		}
	}
	
	//打印答案 
	for (int i = 1; i <= k; i ++) {
		pr("%d ", ans[i]);
	}
	
	return 0;
}

P1308 [NOIP2011 普及组] 统计单词数

解题思路

  1. 注意两个要求,第一个是完全匹配,第二个是不区分大小写
  2. 对于第一个要求,我们只要暴力每一个位置就可以了,然后判断是不是两个位置都符合要求
  3. 对于第二个要求,我们可以把所有的大写字母转换乘小写字母

代码实现

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <stdbool.h>
#define u unsigned
#define ll long long
#define sc scanf
#define pr printf 
#define fr(i, j, n) for (int i = j; i < n; i++)
#define N 1000001

char s1[11];
char s2[N];
int len;//s1的长度 
int size;//s2的长度 
int ans;//记录单词出现的次数 
int first = -1;//记录第一个完全匹配的单词位置 

int main(int argc, char* argv[])
{
	gets(s1);//读入需要匹配的单词 
	gets(s2);//因为字符串中有空格,所以需要用gets 

	len = strlen(s2);//计算s1的长度 
	size = strlen(s1);//计算s2的长度 

	for (int i = 0; i < len; i++) {//把s2中的大写字母转换成小写字母 
		if (s2[i] >= 'A' && s2[i] <= 'Z') {
			s2[i] += 32;
		}
	}

	for (int i = 0; i < size; i++) {//把s1中的大写字母转换成小写字母 
		if (s1[i] >= 'A' && s1[i] <= 'Z') {
			s1[i] += 32;
		}
	}

	for (int i = 0; i < len; i++) {//遍历每一个位置看有没有单词可以匹配 
		if (i == 0) {//把第一个位置单独拿出来,因为第一个位置不可能有空格, 
			int j, k;
			for (j = 0, k = i; j < size; ) {//与s1的每一个比较 
				if (s1[j] == s2[k]) {//相同就下一个位置 
					j++;
					k++;
				}
				else {//不同就跳出代表不匹配 
					break;
				}
			}
			if (j == size && s2[k] == ' ') {//完全匹配 
				ans++;
			}
			if (j == size && s2[k] == ' ' && first == -1) {//第一次完全匹配 
				first = i;
			}
		}
		else {//不是第一个位置
			if (s2[i - 1] == ' ') {//如果前面是空格,那么就可以完全匹配 
				int j, k;
				for (j = 0, k = i; j < size; ) {
					if (s1[j] == s2[k]) {
						j++;
						k++;
					}
					else {
						break;
					}
				}
				if (j == size && s2[k] == ' ') {//完全匹配 
					ans++;
				}
				if (j == size && s2[k] == ' ' && first == -1) {//第一次完全匹配 
					first = i;
				}
			}
		}
	}

	if (ans != 0)//如果一次都没有出现过 
		pr("%d %d", ans, first);
	else {
		pr("-1");
	}

	return 0;
}

出错点

  1. 这个是有空格的所以不能使用kmp算法,而且这个还是要求完全匹配的
  2. 这个要完全匹配

P2010 [NOIP2016 普及组] 回文日期

解题思路

  1. 用循环来模拟每一天再判断组成的数是不是会文
#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>
#include <stdbool.h>
#define u unsigned
#define ll long long
#define sc scanf
#define pr printf 
#define fr(i, j, n) for (int i = j; i < n; i++)
#define N 10

int day[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int ans;

bool isy(int y) {
	if (y % 400 == 0 || y % 4 == 0 && y % 100 != 0) {
		return true;
	}

	return false;
}

bool f(int n) {
	int ans = 0;
	int t = n;

	while (t) {
		ans = ans * 10 + t % 10;
		t /= 10;
	}

	return n == ans;
}

int main(int argc, char* argv[])
{
	int ay = 0;//开始的年份 
	int am = 0;//开始的月份 
	int ad = 0;//开始的天 
	int by = 0;//结束的年份 
	int bm = 0;//结束的月份 
	int bd = 0;//结束的日期

	sc("%4d%2d%2d%4d%2d%2d", &ay, &am, &ad, &by, &bm, &bd);

	for (int i = ay; i <= by; i++) {//模拟年份
		if (i == ay) {//如果是第一年
			for (int j = am; j <= 12; j++) {//模拟月份
				for (int k = 1; k <= ((ad < day[j]) ? ad : (isy(i) && j == 2 ? day[j] + 1 : day[j])); k++) {//模拟天数,但要注意结束的天数可能再同一个月,使用要特判
					int n = i * 10000 + j * 100 + k;//组合成一个8位数
					if (f(n)) {//判断是不是回文
						ans++;
					}
				}
			}
		}
		else {//不是第一年了
			for (int j = 1; j <= 12; j++) {//模拟月份
				for (int k = 1; k <= (isy(i) && j == 2 ? day[j] + 1 : day[j]); k++) {//模拟天数,这里不要特判,因为一定不是同一个月了
					int n = i * 10000 + j * 100 + k;//组合成一个8位数
					if (f(n)) {//判断是不是回文
						ans++;
					}
				}
			}
		}
	}

	pr("%d", ans);

	return 0;
}

出错点

  1. 要考虑结束年月份中可能在同一个月结束,那么就会多算一些天进去,因此要判断

标签:20,int,题解,31,ans,2024,s2,include,define
From: https://www.cnblogs.com/lwj1239/p/18023350

相关文章

  • 2.20 鲜花
    【数据删除】被收了,原因:大义灭亲开状压了但是讲解视频的模糊程度和二十年前的电视剧不相上下\(B\)互不侵犯状压模板状态转移方程为$dp_{i,j,k}=\sum\limits_{x=1}^{cnt}dp_{i-1,x,k-sta_j}$,其中(sit[j]&sit_[x]==0)&&((sit[j]<<1)&sit[x]==0)&&(sit_[j]&(sit[x]}<<1)==0......
  • P2023 [AHOI2009] 维护序列
    原题链接code#definelllonglong#include<bits/stdc++.h>usingnamespacestd;lltree[410000]={0};llwait_mul[410000]={0};llwait_add[410000]={0};lln,p;inlinevoidread(ll&x){x=0;llflag=1;charc=getchar();while(c......
  • LOJ2834 「JOISC 2018 Day 2」修行
    LOJ传送门考虑若已求出钦定\(k\)个升高的排列数量\(f_k\),那么二项式反演就可以求出恰好\(k\)个升高的排列数量\(g_k\),即:\[g_k=\sum\limits_{i=k}^n(-1)^{i-k}\binom{i}{k}f_i\]考虑求\(f_i\)。相当于钦定原序列构成了\(n-k\)个上升段。相当于把\(n\)个......
  • 2024-02-20-物联网C语言(10-文件)
    10.文件10.1文件的概念文件用来存放程序、文档、音频、视频数据、图片等数据的。文件就是存放在磁盘上的,一些数据的集合。在windows下可以通过写字板或记事本打开文本文件对文件进行编辑保存。写字板和记事本是微软程序员写的程序,对文件进行打开、显示、读写、关闭。作为......
  • 2.20
    有人建议我把闲话写长一点好的,爱你,笔芯第一件事:假发到了只到了一个但是因为我太兴奋了所以我直接带上OMG黑色齐刘海对不起家人们没办法给你们放照片了,害怕辣眼睛因为辣眼睛,我直接就是反手一个祸害朋友最近比较熟的,chancelong(为什么熟,因为天天抄他作业,cbr假期里好像死了......
  • 2024-02-20 闲话
    今天学习了\(\displaystyle\int_{-\infty}^{+\infty}\exp(-x^2)dx\)的做法。然后把昨天说的题做掉了,不过有一个性质是\(a<0\)否则\(\exp(ax^2+bx+c)\)不能是概率密度函数。上午的大学物理实在是太难了,量纲学不会一点。于是去知乎上找了一个RAG的文章看,然后吸取经验......
  • B3893 [NICA #3] 一键三连 题解
    本文同步发布于洛谷博客水题啊,我发现chen_zhe上传的水题这么多呢?难道kkksc03把水题都交给他上传了?题意简述输入两个整数\(x\)和\(y\),输出\(x+y\times2\)。我能直接上代码吗好的,让我们通过做题认识一下相关的知识点:YF001int类型与输入输出YF002数与数之间的运......
  • 微控制器STM32L475RCT7[IC MCU 32BIT 256KB]、AZ5A25-01F.R7G瞬态抑制二极管(TVS),AONS
    1、微控制器STM32L475RCT7[ICMCU32BIT256KBFLASH64LQFP]STM32L475RC器件是基于高性能ARM®Cortex®-M432位RISC内核的超低功耗微控制器,工作频率高达80MHz。Cortex-M4内核具有浮点单元(FPU)单精度,支持所有ARM单精度数据处理指令和数据类型。它还实现了完整的DSP指令集和存储......
  • 2024年2月18日——KMP算法(未完成
    点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintmaxn=1e6+10;intkmp[maxn];intla,lb,j;chara[maxn],b[maxn];intmain(){ cin>>a+1>>b+1; la=strlen(a+1),lb=strlen(b+1); for(inti=2;i<=lb;i++){ while(j&&b[j+1......
  • 线段树-山海经 题解
    《最痛苦的一集》从开始的找维护变量到依据i比较依据y比较最后发现问题出在没初始化(如果不将答案赋值为极小值那么它最小值就是0因此wa了无数遍下面是思路首先要维护的变量有:\(区间的左右边界\,l,\,r\)\(区间的答案\,ans\)\(含左端点最大值\,lans\,和含右端点最......