2024初三年前集训测试1
2024初三年前集训测试1
学说话
-
找到下划线后将计数器归零。
点击查看代码
string s; int main() { freopen("word.in","r",stdin); freopen("word.out","w",stdout); int ans=0,num=0,len,i; cin>>s; len=s.size(); for(i=0;i<=len-1;i++) { if(s[i]=='_') { ans=max(ans,num); num=0; } else { num++; } } ans=max(ans,num); cout<<ans<<endl; fclose(stdin); fclose(stdout); return 0; }
膜拜大佬
-
map
大法好。点击查看代码
map<string,bool>vis; string s1,s2,s3; int main() { freopen("dalao.in","r",stdin); freopen("dalao.out","w",stdout); ll n,m,i; cin>>n; for(i=1;i<=n;i++) { cin>>s1; vis[s1]=true; } cin>>m; for(i=1;i<=m;i++) { cin>>s1>>s2>>s3; if(vis.find(s3)==vis.end()) { cout<<"No"<<endl; } else { cout<<"Yes"<<endl; } } fclose(stdin); fclose(stdout); return 0; }
走迷宫
-
难点在于如何建图。
- 把一个二维矩阵压缩成一行,即原第
行第 列的点压缩后成了第 个点。 - 把
@
和=
同样视作.
,分别向 个方向在可以通过的情况下连一条边权为 的有向边。 - 当我们走到传送装置上时,会离开传送到另一个传送装置。故我们选择将传送装置与另一个传送装置的
个方向在可以通过的情况下连一条边权为 的有向边。
- 把一个二维矩阵压缩成一行,即原第
-
因边权只有
和 ,故使用 或 或其他求解单源最短路算法均可。点击查看代码
struct node { ll nxt,to,w; }e[4000000]; ll dis[4000000],head[4000000],sum[30],cnt=0; char c[2000][2000]; bool vis[4000000]; pair<ll,ll>zimu[30][3]; void add(ll u,ll v,ll w) { cnt++; e[cnt].nxt=head[u]; e[cnt].to=v; e[cnt].w=w; head[u]=cnt; } ll val(ll i,ll j,ll m) { return (i-1)*m+j; } void dijkstra(ll s) { memset(dis,0x3f,sizeof(dis)); memset(vis,false,sizeof(vis)); priority_queue<pair<ll,ll> >q; ll x,i; dis[s]=0; q.push(make_pair(0,-s)); while(q.empty()==0) { x=-q.top().second; q.pop(); if(vis[x]==false) { vis[x]=true; for(i=head[x];i!=0;i=e[i].nxt) { if(dis[e[i].to]>dis[x]+e[i].w) { dis[e[i].to]=dis[x]+e[i].w; q.push(make_pair(-dis[e[i].to],-e[i].to)); } } } } } int main() { freopen("maze.in","r",stdin); freopen("maze.out","w",stdout); ll n,m,i,j,s,t; cin>>n>>m; for(i=0;i<=m+1;i++) { c[0][i]='#'; c[n+1][i]='#'; } for(i=0;i<=n+1;i++) { c[i][0]='#'; c[i][m+1]='#'; } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cin>>c[i][j]; if(c[i][j]=='@') { s=val(i,j,m); } if(c[i][j]=='=') { t=val(i,j,m); } if('A'<=c[i][j]&&c[i][j]<='Z') { sum[c[i][j]-'A'+1]++; zimu[c[i][j]-'A'+1][sum[c[i][j]-'A'+1]]=make_pair(i,j); } } } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { if(c[i][j]=='.'||c[i][j]=='@') { if(c[i-1][j]!='#') { add(val(i,j,m),val(i-1,j,m),1); } if(c[i][j-1]!='#') { add(val(i,j,m),val(i,j-1,m),1); } if(c[i+1][j]!='#') { add(val(i,j,m),val(i+1,j,m),1); } if(c[i][j+1]!='#') { add(val(i,j,m),val(i,j+1,m),1); } } } } for(i=1;i<=26;i++) { if(sum[i]!=0) { if(c[zimu[i][2].first-1][zimu[i][2].second]!='#') { add(val(zimu[i][1].first,zimu[i][1].second,m),val(zimu[i][2].first-1,zimu[i][2].second,m),1); } if(c[zimu[i][2].first][zimu[i][2].second-1]!='#') { add(val(zimu[i][1].first,zimu[i][1].second,m),val(zimu[i][2].first,zimu[i][2].second-1,m),1); } if(c[zimu[i][2].first+1][zimu[i][2].second]!='#') { add(val(zimu[i][1].first,zimu[i][1].second,m),val(zimu[i][2].first+1,zimu[i][2].second,m),1); } if(c[zimu[i][2].first][zimu[i][2].second+1]!='#') { add(val(zimu[i][1].first,zimu[i][1].second,m),val(zimu[i][2].first,zimu[i][2].second+1,m),1); } if(c[zimu[i][1].first-1][zimu[i][1].second]!='#') { add(val(zimu[i][2].first,zimu[i][2].second,m),val(zimu[i][1].first-1,zimu[i][1].second,m),1); } if(c[zimu[i][1].first][zimu[i][1].second-1]!='#') { add(val(zimu[i][2].first,zimu[i][2].second,m),val(zimu[i][1].first,zimu[i][1].second-1,m),1); } if(c[zimu[i][1].first+1][zimu[i][1].second]!='#') { add(val(zimu[i][2].first,zimu[i][2].second,m),val(zimu[i][1].first+1,zimu[i][1].second,m),1); } if(c[zimu[i][1].first][zimu[i][1].second+1]!='#') { add(val(zimu[i][2].first,zimu[i][2].second,m),val(zimu[i][1].first,zimu[i][1].second+1,m),1); } } } dijkstra(s); cout<<((dis[t]==0x3f3f3f3f3f3f3f3f)?-1:dis[t])<<endl; fclose(stdin); fclose(stdout); return 0; }
鸭子游戏
-
观察到
内的数都加 或减 ,此时有差分数组不变,考虑进行差分。 -
令
。我们选择固定 不变,题意要求转化为让 均等于 。 -
令
。考虑先把 都统一成正号或负号,需要 次次数;然后有 ,为使 需要 次次数。故 即为所求。点击查看代码
ll a[2000002],b[2000002]; int main() { freopen("game.in","r",stdin); freopen("game.out","w",stdout); ll n,p=0,q=0,i; cin>>n; for(i=1;i<=n;i++) { cin>>a[i]; b[i]=a[i]-a[i-1]; } for(i=2;i<=n;i++) { p+=(b[i]>0)?b[i]:0; q+=(b[i]<0)?-b[i]:0; } cout<<max(p,q)<<endl; fclose(stdin); fclose(stdout); return 0; }
总结
暴露出自己的思维和能力太差,典型套路知道不全。 最后想出了结论,但少了个负号,挂了 。
后记
- 模拟赛重复利用。
- 引流:@jijidawang 在
年 月写这套题的 题解 。
- 引流:@jijidawang 在
- 这套题数据太水了,导致部分错解获得了较高的分数。
- 部分分很足,但貌似不太符合普及难度比赛的要求,起不到提升拿部分分能力的效果。
第 个测试点的数据如下。
本文来自博客园,作者:hzoi_Shadow,原文链接:https://www.cnblogs.com/The-Shadow-Dragon/p/17999119,未经允许严禁转载。
版权声明:本作品采用 「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0) 进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析