河南手机网站建设,淘宝销售书网站建设方案,轻创网,wordpress邮箱注册功能这里把我的想法和思路写出来#xff0c;恳请批评指正#xff01;
目录
考前准备
试题1#xff1a;
试题2#xff1a;
试题3#xff1a;
试题4#xff1a;
试题5#xff1a;
试题6#xff1a;
试题7#xff1a;
试题8#xff1a;
试题9#xff1a;
试题1…这里把我的想法和思路写出来恳请批评指正
目录
考前准备
试题1
试题2
试题3
试题4
试题5
试题6
试题7
试题8
试题9
试题10
总结 考前准备
考前五分钟开十个源文件并把头文件等必须写的部分写出来写完的程序一定要有顺序地保留
试题1
问题描述 请找到一个大于 2022 的最小数这个数转换成十六进制之后所有的数位不含前导 0都为字母A 到 F。 请将这个数的十进制形式作为答案提交。
答案提交 这是一道结果填空的题你只需要算出结果后提交即可。本题的结果为一个整数在提交答案时只填写这个整数填写多余的内容将无法得分。 个人认为难度易
答案2730
思路从2023开始一直输出十六进制形式用眼睛找第一个全字母的就行
代码
#include bits/stdc.h
using namespace std;
typedef long long ll;int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);for(int i2023;i;i)coutdeci hexiendl;//2730 10*16*1610*1610//cout10*16*1610*1610;
}
试题2
问题描述 在 Excel 中列的名称使用英文字母的组合。前 26 列用一个字母依次为 A 到 Z接下来 26*26 列使用两个字母的组合依次为 AA 到 ZZ。 请问第 2022 列的名称是什么
答案提交 这是一道结果填空的题你只需要算出结果后提交即可。本题的结果为一个由大写字母组成的字符串在提交答案时只填写这个字符串填写多余的内容将无法得分。
个人认为难度易
答案BYT
思路纯手算就行
考场推导过程
#include bits/stdc.h
using namespace std;
typedef long long ll;int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);//26//26*26676;//67626702//A676 6767021378//B676 13786762054 BZZ2054//BZ 2054-262028 BZA2029//BY 2028-262004 BYZ2028 BYY BYX BYW BYV BYU2023 BYT2022//cout1378676;
}
试题3
问题描述 对于一个日期我们可以计算出年份的各个数位上的数字之和也可以分别计算月和日的各位数字之和。请问从 1900 年 1 月 1 日至 9999 年 12 月 31 日总共有多少天年份的数位数字之和等于月的数位数字之和加日的数位数字之和。 例如2022年11月13日满足要求因为 2022(11)(13) 。 请提交满足条件的日期的总数量。
答案提交 这是一道结果填空的题你只需要算出结果后提交即可。本题的结果为一个整数在提交答案时只填写这个整数填写多余的内容将无法得分。
个人认为难度易中之间
答案70910
思路年份转化成字符串计算四位数也算比较多的了取模作除法可能麻烦一点月份日期可以纯枚举至于闰年的问题可以拿出来单独讨论还是比较容易算错的
代码
#include bits/stdc.h
using namespace std;
typedef long long ll;
const int maxn9999;
ll year[maxn],md[maxn][maxn],day[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};
int num1,num2,ans;
string y,m,d;void run()
{for(int i1900;i9999;i){if(i%40i%100!0||i%4000){yto_string(i);if((int)y[0](int)y[1](int)y[2](int)y[3]-48*413){coutyendl;ans;}}}
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);for(int i1900;i9999;i){yto_string(i);year[i](int)y[0](int)y[1](int)y[2](int)y[3]-48*4;}for(int i1;i12;i){if(i10) num1i;if(i10) num11;if(i11) num12;if(i12) num13;for(int j1;jday[i];j){if(j10) num2j;if(j10) num21;if(j11) num22;if(j12) num23;if(j13) num24;if(j14) num25;if(j15) num26;if(j16) num27;if(j17) num28;if(j18) num29;if(j19) num210;if(j20) num22;if(j21) num23;if(j22) num24;if(j23) num25;if(j24) num26;if(j25) num27;if(j26) num28;if(j27) num29;if(j28) num210;if(j29) num211;if(j30) num23;if(j31) num24;md[i][j]num1num2;}}for(int i1900;i9999;i){for(int j1;j12;j){for(int k1;kday[j];k){if(year[i]md[j][k]){ans;couti j kendl;}}}}run();coutans;}
试题4
问题描述 小蓝有 30 个数分别为99, 22, 51, 63, 72, 61, 20, 88, 40, 21, 63, 30, 11, 18, 99, 12, 93, 16, 7, 53, 64, 9, 28, 84, 34, 96, 52, 82, 51, 77 。 小蓝可以在这些数中取出两个序号不同的数共有 30*29/2435 种取法。 请问这 435 种取法中有多少种取法取出的两个数的乘积大于等于 2022 。
答案提交 这是一道结果填空的题你只需要算出结果后提交即可。本题的结果为一个整数在提交答案时只填写这个整数填写多余的内容将无法得分。
个人认为难度易
答案189
思路这里其实就能看出来这个模拟赛的水了第四题甚至感觉比第一题还好算直接两重循环解决问题
代码
#include bits/stdc.h
using namespace std;
typedef long long ll;
int num[30]{99, 22, 51, 63, 72, 61, 20, 88, 40, 21, 63, 30, 11, 18, 99, 12, 93, 16, 7, 53, 64, 9, 28, 84, 34, 96, 52, 82, 51, 77 };
int ans;
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);for(int i0;i29;i){for(int ji1;j29;j){if(num[i]*num[j]2022){coutnum[i]*num[j]endl;ans;}}}coutans;
}
试题5
问题描述
小蓝有一个 30 行 60 列的数字矩阵矩阵中的每个数都是 0 或 1 。如果从一个标为 1 的位置可以通过上下左右走到另一个标为 1 的位置则称两个位置连通。与某一个标为 1 的位置连通的所有位置包括自己组成一个连通分块。 请问矩阵中最大的连通分块有多大
110010000011111110101001001001101010111011011011101001111110
010000000001010001101100000010010110001111100010101100011110
001011101000100011111111111010000010010101010111001000010100
101100001101011101101011011001000110111111010000000110110000
010101100100010000111000100111100110001110111101010011001011
010011011010011110111101111001001001010111110001101000100011
101001011000110100001101011000000110110110100100110111101011
101111000000101000111001100010110000100110001001000101011001
001110111010001011110000001111100001010101001110011010101110
001010101000110001011111001010111111100110000011011111101010
011111100011001110100101001011110011000101011000100111001011
011010001101011110011011111010111110010100101000110111010110
001110000111100100101110001011101010001100010111110111011011
111100001000001100010110101100111001001111100100110000001101
001110010000000111011110000011000010101000111000000110101101
100100011101011111001101001010011111110010111101000010000111
110010100110101100001101111101010011000110101100000110001010
110101101100001110000100010001001010100010110100100001000011
100100000100001101010101001101000101101000000101111110001010
101101011010101000111110110000110100000010011111111100110010
101111000100000100011000010001011111001010010001010110001010
001010001110101010000100010011101001010101101101010111100101
001111110000101100010111111100000100101010000001011101100001
101011110010000010010110000100001010011111100011011000110010
011110010100011101100101111101000001011100001011010001110011
000101000101000010010010110111000010101111001101100110011100
100011100110011111000110011001111100001110110111001001000111
111011000110001000110111011001011110010010010110101000011111
011110011110110110011011001011010000100100101010110000010011
010011110011100101010101111010001001001111101111101110011101答案提交
这是一道结果填空的题你只需要算出结果后提交即可。本题的结果为一个整数在提交答案时只填写这个整数填写多余的内容将无法得分。
个人认为难度中
答案148
思路全球变暖的变形题用BFS本来我是不想写代码的因为30*60这个规模感觉还好可以用眼睛看但是还是看错了模拟之后完整写了这个代码还要注意文件读取问题
考场推导过程看看方法就行 代码
#include bits/stdc.h
using namespace std;
typedef long long ll;
char mp[31][61];
queuepairint,int q;
bool vis[31][61];
int X[4]{0,0,1,-1};
int Y[4]{1,-1,0,0};
ll x,y,maxn0,cnt0;
void bfs()
{for(int i1;i30;i){for(int j1;j60;j){cnt0; if(mp[i][j]1){q.push({i,j});cnt;}vis[i][j]true;while(q.size()){xq.front().first;yq.front().second;for(int k0;k3;k){int nxxX[k];int nyyY[k];if(nx0nx30ny0ny60!vis[nx][ny]mp[nx][ny]1){vis[nx][ny]true;cnt;q.push({nx,ny});}}coutq.front().first q.front().secondendl; q.pop();}maxnmax(maxn,cnt);}}}
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);freopen(C:\\Users\\张px\\Desktop\\input.txt,r,stdin);for(int i1;i30;i){for(int j1;j60;j){cinmp[i][j];}}bfs();coutmaxn;return 0;
}
试题6
问题描述 给定一天是一周中的哪天请问 n 天后是一周中的哪天
输入格式 输入第一行包含一个整数 w表示给定的天是一周中的哪天w 为 1 到 6 分别表示周一到周六w 为 7 表示周日。 第二行包含一个整数 n。
输出格式 输出一行包含一个整数表示 n 天后是一周中的哪天1 到 6 分别表示周一到周六7 表示周日。
样例输入 6 10
样例输出 2
评测用例规模与约定 对于所有评测用例1 n 1000000
个人认为难度易
思路取模运算就行
#include bits/stdc.h
using namespace std;
typedef long long ll;
ll today,target,n;
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);scanf(%lld%lld,today,n);targettodayn%7;targettarget%7;printf(%lld,target);return 0;
}
试题7
问题描述 小蓝负责一块区域的信号塔安装整块区域是一个长方形区域建立坐标轴后西南角坐标为 (0, 0) 东南角坐标为 (W, 0) 西北角坐标为 (0, H) 东北角坐标为 (W, H)。其中 W, H 都是整数。 他在 n 个位置设置了信号塔每个信号塔可以覆盖以自己为圆心半径为 R 的圆形包括边缘。 为了对信号覆盖的情况进行检查小蓝打算在区域内的所有横纵坐标为整数的点进行测试检查信号状态。其中横坐标范围为 0 到 W纵坐标范围为 0 到 H总共测试 (W1) * (H1) 个点。 给定信号塔的位置请问这 (W1)*(H1) 个点中有多少个点被信号覆盖。
输入格式 输入第一行包含四个整数 W, H, n, R相邻整数之间使用一个空格分隔。 接下来 n 行每行包含两个整数 x, y表示一个信号塔的坐标。信号塔可能重合表示两个信号发射器装在了同一个位置。
输出格式 输出一行包含一个整数表示答案。
样例输入 10 10 2 5 0 0 7 0
样例输出 57
评测用例规模与约定 对于所有评测用例1 W, H 1001 n 100, 1 R 100, 0 x W, 0 y H。
个人认为难度易
思路注意记忆即可加上欧式距离这一限制条件即可
代码
#include bits/stdc.h
using namespace std;
typedef long long ll;
ll W,H,n,R,ans,x,y;
bool vis[105][105];
void num()
{for(int k0;kW;k){for(int p0;pH;p){if(!vis[k][p](x-k)*(x-k)(y-p)*(y-p)R*R){vis[k][p]true;//coutk pendl;ans;}}}
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);scanf(%lld%lld%lld%lld,W,H,n,R);for(int i1;in;i){scanf(%lld%lld,x,y);num();}printf(%lld,ans);return 0;
}
试题8
问题描述 小蓝有一个 n * m 大小的矩形水域小蓝将这个水域划分为 n 行 m 列行数从 1 到 n 标号列数从 1 到 m 标号。每行和每列的宽度都是单位 1 。 现在这个水域长满了水草小蓝要清理水草。 每次小蓝可以清理一块矩形的区域从第 r1 行含到第 r2 行含的第 c1 列含到 c2 列含。 经过一段时间清理后请问还有多少地方没有被清理过。
输入格式 输入第一行包含两个整数 n, m用一个空格分隔。 第二行包含一个整数 t 表示清理的次数。 接下来 t 行每行四个整数 r1, c1, r2, c2相邻整数之间用一个空格分隔表示一次清理。请注意输入的顺序。
输出格式 输出一行包含一个整数表示没有被清理过的面积。
样例输入1 2 3 2 1 1 1 3 1 2 2 2
样例输出1 2
样例输入2 30 20 2 5 5 10 15 6 7 15 9
样例输出2 519
评测用例规模与约定 对于所有评测用例1 r1 r2 n 100, 1 c1 c2 m 100, 0 t 100。
个人认为难度易
思路感觉和第七题出重复了同样需要记忆
代码
#include bits/stdc.h
using namespace std;
typedef long long ll;
const int maxn105;
ll n,m,t, r1, c1, r2, c2,ans;
bool vis[105][105];
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);scanf(%lld%lld%lld,n,m,t);for(int i1;it;i){scanf(%lld%lld%lld%lld,r1, c1, r2, c2);for(int jr1;jr2;j){for(int kc1;kc2;k){if(!vis[j][k]){vis[j][k]true;ans;}}}}printf(%lld,n*m-ans);return 0;
}
试题9
问题描述 小蓝准备在一个空旷的场地里面滑行这个场地的高度不一小蓝用一个 n 行 m 列的矩阵来表示场地矩阵中的数值表示场地的高度。 如果小蓝在某个位置而他上、下、左、右中有一个位置的高度严格低于当前的高度小蓝就可以滑过去滑动距离为 1 。 如果小蓝在某个位置而他上、下、左、右中所有位置的高度都大于等于当前的高度小蓝的滑行就结束了。 小蓝不能滑出矩阵所表示的场地。 小蓝可以任意选择一个位置开始滑行请问小蓝最多能滑行多远距离。
输入格式 输入第一行包含两个整数 n, m用一个空格分隔。 接下来 n 行每行包含 m 个整数相邻整数之间用一个空格分隔依次表示每个位置的高度。
输出格式 输出一行包含一个整数表示答案。
样例输入 4 5 1 4 6 3 1 11 8 7 3 1 9 4 5 2 1 1 3 2 2 1
样例输出 7
样例说明 滑行的位置一次为 (2, 1), (2, 2), (2, 3), (3, 3), (3, 2), (4, 2), (4, 3)。
评测用例规模与约定 对于 30 % 评测用例1 n 20 1 m 20 0 高度 100 对于所有评测用例1 n 100 1 m 100 0 高度 10000
个人认为难度中
思路找最值路径用BFS每一点都作为起点搜索一次然后开一个二维数组记录滑行的次数搜索完一次就遍历一次二维数组更新最大值
代码
#include bits/stdc.h
using namespace std;
typedef long long ll;
int maxn0;
int n,m,mp[105][105];
int X[4]{1,-1,0,0};
int Y[4]{0,0,1,-1};
int cnt[105][105];
int x,y,nx,ny;
queuepairint,int q;
void bfs()
{while(q.size()){xq.front().first;yq.front().second;//coutx yendl;for(int k0;k4;k){nxxX[k];nyyY[k];//coutnx nyendl;//if(nx0) cout1;//if(ny0) cout2;//if(nxn) cout3;//if(nym) cout4;//coutmp[x][y] mp[nx][ny];//coutendl;if(nx0ny0nxnnymmp[x][y]mp[nx][ny]){q.push({nx,ny});cnt[nx][ny]cnt[x][y]1;}}q.pop();}for(int a1;an;a){for(int b1;bm;b){maxnmax(cnt[a][b],maxn);}}
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);scanf(%lld%lld,n,m);for(int i1;in;i){for(int j1;jm;j){cinmp[i][j];}}for(int i1;in;i){for(int j1;jm;j){q.push({i,j});memset(cnt,0,sizeof(cnt));cnt[i][j]1;bfs();}}printf(%d,maxn);return 0;
}
试题10
问题描述 小蓝有一个序列 a[1], a[2], …, a[n]。 给定一个正整数 k请问对于每一个 1 到 n 之间的序号 ia[i-k], a[i-k1], …, a[ik] 这 2k1 个数中的最小值是多少当某个下标超过 1 到 n 的范围时数不存在求最小值时只取存在的那些值。
输入格式 输入的第一行包含一整数 n。 第二行包含 n 个整数分别表示 a[1], a[2], …, a[n]。 第三行包含一个整数 k 。
输出格式 输出一行包含 n 个整数分别表示对于每个序号求得的最小值。
样例输入 5 5 2 7 4 3 1
样例输出 2 2 2 3 3
评测用例规模与约定 对于 30 % 的评测用例1 n 1000 1 a [ i ] 1000 对于 50 % 的评测用例1 n 10000 1 a [ i ] 10000 对于所有评测用例1 n 1000000 1 a [ i ] 1000000
个人认为难度中难之间
思路我使用multimap直接对数进行排序然后从最小的开始对序号进行筛选如果符合区间i-k到ik之间那么就直接输出进行下一轮搜索这样做能节省一部分时间复杂度没有对所有数据进行搜索但是可能还是不如用ST表
我把我的代码写出来吧
代码:
#include bits/stdc.h
using namespace std;
typedef long long ll;
const ll maxn1000005;
ll num[maxn],xuhao[maxn],n;
multimapint,int,lessint m;
ll k,cnt;
int main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);scanf(%lld,n);for(int i1;in;i){scanf(%lld,num[i]);m.insert(pairll,ll(num[i],i));}scanf(%lld,k);for(int i1;in;i){for(multimapint,int,lessint ::iterator itm.begin();it!m.end();it){if(i-k0i-knit-secondi-kit-secondik) {printf(%lld ,it-first); break;}}}return 0;
}
总结
序号个人认为难度涉及知识点是否推荐手算1易进制输入输出流否2易是3易中之间年份问题否4易尽量不要手算5中搜索数据结构文件读取自己决定6易取模7易记忆8易记忆9中搜索数据结构10中难之间ST表/高级数据结构