2022.4.23———HZOI【高一普及组模拟赛2】爆蛋寄
T1 循环,T2 漫步,T3 穿越,T4 结队
成绩综述,,,
gtm大佬太强了%%%
28名/40人
我太逊了qAq
题((
我太逊了所以我就把我代码粘过来吧,,,
T1 循环
题目
照理讲,应该都会罢,,这似乎不是什么数论,直接暴力就行,一百次之内应该是必出结果
不要问我为什么只用取输入的数组的后两位,因为是%100,取后边两位就可以,然后搞一个vis数组记录每个数字是否出现过(直接硬乘应该会爆longlong?
然后x^3 = x^2 * x,这个应该能看懂,所以直接"援引"上一次的结果乘
Code
查看代码#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cctype>
#include<algorithm>
#define ll long long
#define mem(x,y) memset(x,y,sizeof(x))
#define re register int
#define char_phi signed
#define MARK printf("~~~")
#define _MARK printf("###")
#define LMARK printf("@@@@@@")
#define SLEEP printf("💤")
#define _ putchar(' ')
#define endl putchar('\n')
#define iwh printf("我永远爱朱文虎")
#define mx 105
using namespace std;
// bool flag;
int x;
int vis[mx];
inline int read(){
int x = 0;char c;
while(!isdigit(c = getchar()));
do{
x = (x << 3) + (x << 1) + (c & 15);
}while(isdigit(c = getchar()));
return x;
}
void ot(int x){
if(x < 0) x = - x,putchar('-');
if(x > 9) ot(x / 10);
putchar(x % 10 ^ 48);
}
void work(){
//唉唉,我枚举了一小下,不过也可能不对。。
//应该是对的吧
/*
数太大,虽然mod但有可能爆long long甚么的
所以取后边两位,然后vis数组?
别的不清楚了。。
*/
x = read(),x %= 100,ot(x),_,vis[1] = x;
re i = 1,tmp = x;
//又有了一个小启示,直接援引上一次的就行
while(1){
++ i;
tmp *= x,tmp %= 100;
vis[i] = tmp;
ot(tmp),_;
for(re j = 1 ; j < i ; ++ j){
if(vis[j] == tmp){
// endl;
// for(re k = 1 ; k <= 13 ; ++ k) ot(vis[k]),_;
exit(0);
}
}
}
}
char_phi main(){
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
work();
return 0;
}
T2 漫步
这个也是一个水题,从最后往前面遍历,每次查看能否更新最小值,能的话就更新同时final_ans++
呃呃final_ans初始化为1,然后从倒数第二个人往前搜,我反正觉得这么保险所以这么写了,,,
至于为什么从后往前搜更新最小值就能出答案,这个自己枚举枚举就出来了,速度大的肯定能追上在他前面的速度小的
然后输入的那个"d"没啥用,因为他说了是递增给出的d
Code
查看代码#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cctype>
#include<algorithm>
#define ll long long
#define mem(x,y) memset(x,y,sizeof(x))
#define re register int
#define char_phi signed
#define MARK printf("~~~")
#define _MARK printf("###")
#define LMARK printf("@@@@@@")
#define SLEEP printf("💤")
#define _ putchar(' ')
#define endl putchar('\n')
#define iwh printf("我永远爱朱文虎")
#define MIN(X,Y) ((X<Y)?(X):(Y))
#define N 100005
using namespace std;
int n,final_ans = 1,lit;
int a[N];
inline int read(){
int x = 0;char c;
while(!isdigit(c = getchar()));
do{
x = (x << 3) + (x << 1) + (c & 15);
}while(isdigit(c = getchar()));
return x;
}
void ot(int x){
if(x < 0) x = - x,putchar('-');
if(x > 9) ot(x / 10);
putchar(x % 10 ^ 48);
}
void work(){
/*
唉唉,题目说的有一丢丢隐晦,我也不大清楚
希望能多有几个样例、、、
嗐,我就按我觉得的做罢:
我似乎读明白了。。
先遍历一遍找出最小值
记录最小速度的cnt 还有位置
然后先把每两个cnt之间的归并为一组
然后判断一下最后一个的cnt是否在最后一个位置,不在就继续在这个位置往后的找次小的,一直找,这个有点点难实现()()
距离既然是递增的没啥用,就直接按i标号了,也不用管
其实还想分块做,,,唉唉,分块不分块么,谁来管这等事...
阿!分块?我觉得没啥必要。。?
时间复杂度(我是蒟蒻瞎分析的) O()
update:
cnt不用了,节省一点可能的空间(bushi) 直接++final_ans
*/
//我忽然地觉得我很傻,直接从后面往前面遍历不久完了吗?!
/*
唉唉,样例不样例呢。。。按照自己的想法造的数据点,不知道对不对阿。。。
*/
n = read();
for(re i = 1 ; i <= n ; ++ i) read(),a[i] = read();
// ,lit = MIN(lit,a[i])
// plc = n;
// for(re i = 1 ; i <= n ; ++ i) if(a[i] == lit) ++ final_ans,litplc = i;
// if(litplc != n){
// lit = a[n],++ final_ans;
// for(re i = n ; i >= litplc ; -- i){
// if(a[i] <= lit){
// ++ final_ans;
// }
// }
// }
lit = a[n];
// for(re i = 1 ; i <= n ; ++ i) SLEEP,ot(a[i]),_;
// endl;
// ot(lit);
for(re i = n-1 ; i >= 1 ; -- i){
// SLEEP,ot(a[i]),_,ot(lit),endl;
if(a[i] <= lit){
// MARK,ot(i),endl;
lit = a[i];
++ final_ans;
}
}
ot(final_ans);
}
char_phi main(){
freopen("jog.in","r",stdin);
freopen("jog.out","w",stdout);
work();
return 0;
}
T3 穿越
特殊性质 3:地图中没有传送地域。
我这个题只是隐隐约约地看了看题解写了出来,还是比较简单的,不过毕竟BFS码量。。
Code
Code#include<iostream> #include<iomanip> #include<cstdio> #include<cmath> #include<cstring> #include<cctype> #include<algorithm> #define ll long long #define mem(x,y) memset(x,y,sizeof(x)) #define re register int #define char_phi signed #define MARK printf("~~~") #define _MARK printf("###") #define LMARK printf("@@@@@@") #define SLEEP printf("💤") #define _ putchar(' ') #define endl putchar('\n') #define iwh printf("我永远爱朱文虎") #define MINN(X,Y) ((X<Y)?(X):(Y)) #define mx 303 #define T 90003 using namespace std; int ud[6] = {0,1,-1,0,0},lr[6] = {0,0,0,1,-1}; int n,m,R,ANI; int X[T],Y[T]; int s[mx][mx],rain[mx][mx],timm[mx][mx]; struct chuan{ int x,y; }c[T]; struct animal{ int l,r; }an[mx][mx]; inline int read(){ int x = 0;char c; while(!isdigit(c = getchar())); do{ x = (x << 3) + (x << 1) + (c & 15); }while(isdigit(c = getchar())); return x; } void ot(int x){ if(x < 0) x = - x,putchar('-'); if(x > 9) ot(x / 10); putchar(x % 10 ^ 48); } inline int getw(int nxtx,int nxty,int t,int oldx,int oldy){ if(an[nxtx][nxty].l <= t && t <= an[nxtx][nxty].r){//下一步有野兽 int _waittime = an[nxtx][nxty].r + 1; if(rain[oldx][oldy] != 0 && rain[oldx][oldy] <= _waittime){//等的时候被暴雨淦了 return 114514;//够大吗这数 } if(an[oldx][oldy].l <= _waittime && _waittime <= an[oldx][oldy].r){//等的时候自己的地方野兽醒了 return 114514; } return (_waittime - t); } return 0;//下一秒野兽不会醒,不用等着 } void bfs(int x,int y){ int ft = 0,bk = 1;//模拟队列罢 // ot(x),_,ot(y),endl; X[bk] = x,Y[bk] = y; // ot(X[ft]),_,ot(Y[ft]),endl; // ot(X[bk]),_,ot(Y[bk]),endl; while(ft < bk){ ++ ft; // SLEEP,ot(ft),_,ot(bk),endl; if(s[X[ft]][Y[ft]] == 3){//当前地方是传送门 for(re i = 1 ; i <= c[0].x ; ++ i){ // SLEEP,ot(c[0].x); if(rain[c[i].x][c[i].y] != 0 && rain[c[i].x][c[i].y] <= timm[X[ft]][Y[ft]]+2) continue;//大雨 if(timm[c[i].x][c[i].y] == 0){ timm[c[i].x][c[i].y] = timm[X[ft]][Y[ft]] + 2; ++ bk; X[bk] = c[i].x,Y[bk] = c[i].y; } else if(timm[c[i].x][c[i].y] != 0){/// if(timm[c[i].x][c[i].y] > timm[X[ft]][Y[ft]] + 2){ timm[c[i].x][c[i].y] = timm[X[ft]][Y[ft]] + 2; ++ bk; X[bk] = c[i].x,Y[bk] = c[i].y; } } } } // SLEEP,endl; for(re i = 1 ; i <= 4 ; ++ i){//1下2上3右4左 // MARK,ot(X[ft]),_,ot(Y[ft]),_,ot(x),_,ot(y),endl; // iwh,ot(ud[i]),_,ot(lr[i]),endl; x = X[ft] + ud[i]; y = Y[ft] + lr[i];//上下左右走一步 // LMARK,ot(x),_,ot(y),endl; if(x <= 0 || y <= 0 || x > n || y > m){//草!>n >m!不是>= continue; } if(s[x][y] == 1){ continue; } // _MARK,endl; if(s[x][y] == 2){//野兽 int waittime = getw(x,y,timm[X[ft]][Y[ft]] + 1,X[ft],Y[ft]); if(waittime == 114514) continue; else{ if(timm[x][y] == 0 && (x != 1 || y != 1)){/// ++ bk; X[bk] = x,Y[bk] = y; timm[x][y] = timm[X[ft]][Y[ft]] + waittime + 1;/// } else{ if(timm[x][y] > timm[X[ft]][Y[ft]] + waittime + 1){/// timm[x][y] = timm[X[ft]][Y[ft]] + waittime + 1; ++ bk; X[bk] = x,Y[bk] = y; } } } } else if(s[x][y] == 0 || s[x][y] == 3){///下一步空地 传送门/// if(timm[x][y] == 0 && (x != 1 || y != 1)){/// ++ bk; X[bk] = x,Y[bk] = y; timm[x][y] = timm[X[ft]][Y[ft]] + 1; } else if(x != 1 || y != 1){/// if(timm[x][y] > timm[X[ft]][Y[ft]]+1){ ++ bk; X[bk] = x,Y[bk] = y; timm[x][y] = timm[X[ft]][Y[ft]] + 1; } } } } } } void work(){ //唉唉,神奇的广搜阿...只觉得天地间的众算法接受了人间的牲?(忘了那个字了),要给予衡实的人们以无限的幸福。 //"阿!广搜?"我浑身震悚起来,只得支梧着,"广搜...照理讲,也就该搜。然而也未必,谁来管这等事..." //time是关键字。。。 n = read(),m = read(); for(re i = 1 ; i <= n ; ++ i){ for(re j = 1 ; j <= m ; ++ j){ s[i][j] = read(); if(s[i][j] == 3){ c[++c[0].x].x = i; c[c[0].x].y = j; } } } R = read(); for(re i = 1,tt,few,XAXA,XAY ; i <= R ; ++ i){//XAXA,XAY,嗐雌性雄性显性纯合子(bushi) tt = read(),few = read(); for(re j = 1 ; j <= few ; ++ j){ XAXA = read(),XAY = read(); ////////////////////////////////////////////////////// rain[XAXA][XAY] = tt;//加入隐性纯合子()()()()()()() } } ANI = read(); for(re i = 1,XAXA,XAY,LL,RR ; i <= ANI ; ++ i){ LL = read(),RR = read(),XAXA = read(),XAY = read(); an[XAXA][XAY].l = LL,an[XAXA][XAY].r = RR;//我傻了 刚才输入错了 } // for(re i = 1 ; i <= 4 ; ++ i){ // for(re j = 1 ; j <= 4 ; ++ j){ // SLEEP,ot(i),_,ot(j),_,ot(rain[i][j]),endl; // } // } bfs(1,1); // iwh,endl; // for(re i = 0 ; i <= 5 ; ++ i){ // for(re j = 0 ; j <= 5 ; ++ j){ // ot(timm[i][j]),_; // } // endl; // } ot(timm[n][m]); } char_phi main(){ freopen("cross.in","r",stdin); freopen("cross.out","w",stdout); work(); return 0; }
T4 结队
这个是一个并查集+质数判断,比较烦人的是我考试的时候没打出来。。甚至暴力都没打,,随机数划了个水就跑去肝T3了。。
Code
查看代码#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<ctime>
#include<vector>
#define ll long long
#define mem(x,y) memset(x,y,sizeof(x))
#define re register int
#define char_phi signed
#define MARK printf("~~~")
#define _MARK printf("###")
#define LMARK printf("@@@@@@")
#define SLEEP printf("💤")
#define _ putchar(' ')
#define endl putchar('\n')
#define iwh printf("我永远爱朱文虎")
#define mx 50005
#define ss 5150
using namespace std;
int A,B,p,final_ans;
// int a[mx][ss];//照理讲,也不应超内存,唉唉,谁来管这等事...
// int belong[mx];
int fa[mx];
vector<int> vc[mx];
inline int read(){
int x = 0;char c;
while(!isdigit(c = getchar()));
do{
x = (x << 3) + (x << 1) + (c & 15);
}while(isdigit(c = getchar()));
return x;
}
void ot(int x){
if(x < 0) x = - x,putchar('-');
if(x > 9) ot(x / 10);
putchar(x % 10 ^ 48);
}
int tmp;
int find(int x){
if(fa[x] == x) return x;
else return fa[x] = find(fa[x]);
}
inline void prime(int x){
// tmp = x;
// for(re i = 1 ; i <= x ; ++ i){//
// if(tmp % zs[i] == 0){
// vc[zs[i]].push_back(x);//把x加入属于素数a[i]行列的
// while(tmp % zs[i] == 0){
// tmp /= zs[i];
// }
// }
// }
// if(tmp > 1){
// vc[tmp].push_back(x);
// }
tmp = x;
/*
没想到我的打表出了错!
鲁四:可恶!然而......
*/
for(re i = 2 ; i <= sqrt(x)+1 ; ++ i){
if(tmp % i == 0){
vc[i].push_back(x);
while(tmp % i == 0){
tmp /= i;
}
}
}
if(tmp > 1){
vc[tmp].push_back(x);
}
}
void work(){
/*
我太逊了,我甚至觉得这是线段树合并,但是我太逊了我不会
所以先跑一个类似于筛素数甚么的,先把每个素数在这个区间里的都给整出来
筛素数的话,,我觉得最大的素数是49999本身?
这个可以先打一个素数表(doge)
然后再[a,b]区间里对素数进行投影,%=也行吧,,,
*/
//并查集,,刚开始有这感觉,但是没敢写当然我太逊了也不会写,然后wudi昨天晚上睡觉的时候指点了一下,让我们一起说:谢谢wudi
A = read(),B = read(),p = read();
for(re i = 1 ; i <= B ; ++ i) fa[i] = i;
for(re i = A ; i <= B ; ++ i){
prime(i);
}
for(re i = B,siz,mainn ; i >= p ; -- i){
siz = vc[i].size();
if(siz == 0) continue;
mainn = find(vc[i][0]);
for(re j = 1,bing ; j <= siz-1 ; ++ j){
bing = find(vc[i][j]);
fa[bing] = mainn;
}
}
for(re i = A ; i <= B ; ++ i){
if(fa[i] == i){
++ final_ans;
}
}
ot(final_ans);
}
char_phi main(){
freopen("merge.in","r",stdin);
freopen("merge.out","w",stdout);
work();
return 0;
}
唉唉,考的一般般,,还是得加油啊!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现