当前位置: 首页 > news >正文

Neowise Labs Contest 1 (Codeforces Round 1018, Div. 1 + Div. 2)

AB 略

C

当同一行中相邻的数相等,我们改变列。同一列中相邻的数相等,我们改变行。行和列是相互隔绝的,我们分开考虑。不妨先考虑同一列的相等。用动规,阶段是行,状态是列。相邻的两个数存在三种情况:相等,相差1 -1。f[i][0/1]表现前i行的最小花费,第i行是否+1。我们结合三种情况转移即可。

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10;
int T,n,a[1010],b[1010],h[1010][1010],f1[1010][2],f2[1010][2];
void init()
{for(int i=1;i<=n;i++)f1[i][0]=f1[i][1]=f2[i][0]=f2[i][1]=0x3f3f3f3f3f3f;
}
void solve()
{cin>>n;init();for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>h[i][j];for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++)cin>>b[i];for(int i=1;i<=n;i++){int flag=0,ok=0,pd=0;for(int j=1;j<=n;j++){if(h[i][j]==h[i-1][j]) flag=1;if(h[i][j]+1==h[i-1][j]) ok=1;if(h[i][j]-1==h[i-1][j]&&i!=1) pd=1;}if(flag&&ok){if(!pd) f1[i][0]=f1[i-1][1];}if(flag&&!ok){f1[i][1]=f1[i-1][0]+a[i];if(!pd) f1[i][0]=f1[i-1][1];}if(!flag&&ok){f1[i][1]=f1[i-1][1]+a[i];f1[i][0]=f1[i-1][0];if(!pd) f1[i][0]=min(f1[i][0],f1[i-1][1]);}if(!flag&&!ok){f1[i][1]=min(f1[i-1][1],f1[i-1][0])+a[i];f1[i][0]=f1[i-1][0];if(!pd) f1[i][0]=min(f1[i][0],f1[i-1][1]);}}for(int j=1;j<=n;j++){int flag=0,ok=0,pd=0;for(int i=1;i<=n;i++){if(h[i][j]==h[i][j-1]) flag=1;if(h[i][j]+1==h[i][j-1]) ok=1;if(h[i][j]-1==h[i][j-1]&&j!=1) pd=1;}if(flag&&ok){if(!pd) f2[j][0]=f2[j-1][1];}if(flag&&!ok){f2[j][1]=f2[j-1][0]+b[j];if(!pd) f2[j][0]=f2[j-1][1];}if(!flag&&ok){f2[j][1]=f2[j-1][1]+b[j];f2[j][0]=f2[j-1][0];if(!pd) f2[j][0]=min(f2[j][0],f2[j-1][1]);}if(!flag&&!ok){f2[j][1]=min(f2[j-1][1],f2[j-1][0])+b[j];f2[j][0]=f2[j-1][0];if(!pd) f2[j][0]=min(f2[j][0],f2[j-1][1]);}}if(min(f1[n][0],f1[n][1])+min(f2[n][0],f2[n][1])>2e12) cout<<-1<<endl;else cout<<min(f1[n][0],f1[n][1])+min(f2[n][0],f2[n][1])<<endl;
}
signed main()
{std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>T;while(T--) solve();
}

D

如果不考虑开始亮着的灯,那么每列的亮灯都是偶数个,考虑开始的灯,那么哪一列亮灯是奇数,宝藏就在哪列。如果不考虑开始亮着的灯,那么从左上到右下斜线的亮灯都是偶数个,考虑开始的灯,那么哪一斜线亮灯是奇数,宝藏就在哪列斜线由此推出横坐标。

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+10;
int T,n,s,t;
void init()
{
}
void solve()
{cin>>n;init();map<int,int> mp,mpp;for(int i=1;i<=n;i++){int x,y;cin>>x>>y;mp[x]++;mpp[x+y]++;}for(auto&& [i,j]: mp){if(j&1) {s=i; break;}}for(auto&& [i,j]: mpp){if(j&1) {t=i-s; break;}}cout<<s<<" "<<t<<endl;
}
signed main()
{std::ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>T;while(T--) solve();
}

http://www.xdnf.cn/news/179119.html

相关文章:

  • HTML基础完全解析
  • Astah Professional反向建模C++类图
  • 【记录解决问题】--vue select下拉框排除已选择option
  • MCP协议:AI生态的统一标准
  • LeetCode 24 两两交换链表中的节点
  • 半导体行业如何开展风险管理?有没有半导体风控案例参考?
  • 反序列化漏洞2
  • 贪吃蛇游戏demo
  • 计网二。。
  • css响应式布局设置子元素高度和宽度一样
  • Maven项目细节
  • re题(48)BUUCTF-[网鼎杯 2020 青龙组]singal
  • vue项目页面适配
  • Java学习--HashMap
  • 科技打头阵,创新赢未来——中科视界携千眼狼超高速摄像机亮相第三届科交会
  • 【HPC存储性能测试】02-ior带宽性能测试
  • acwing532. 货币系统
  • 【操作系统原理07】输入/输出系统
  • 常用的多传感器数据融合方法
  • 安卓屏播放语音失败,报错TextToSpeech: speak failed: not bound to TTS engine
  • risc-V学习日记(4):RV32I指令集
  • 开关电源实战(六)ADDC反激电源
  • 说一下Drop与delete区别
  • 在java中实现protobuf自定义协议
  • 通过ThreadLocal存储登录用户信息
  • LeetCode每日一题4.27
  • 【HPC存储性能测试】01-OpenMPI部署
  • 深入理解指针(5)
  • 【Leetcode 每日一题】3392. 统计符合条件长度为 3 的子数组数目
  • lobechat调用ollama模型,服务连接失败