Solution Set -「CF 1520」
「CF 1520A」Do Not Be Distracted!
Link.
模拟。
#include<bits/stdc++.h>
char now;
char get_char(){char res=getchar();while(res<'A' || res>'Z') res=getchar(); return res;}
bool vis[26];
int main()
{
int T,n;
scanf("%d",&T);
while(T-->0)
{
scanf("%d",&n);
int ans=0;
for(int i=1;i<=n;++i)
{
char cur=get_char();
if(cur!=now)
{
now=cur;
if(vis[cur-'A']) ans=1;
}
vis[cur-'A']=1;
}
puts(ans?"NO":"YES");
memset(vis,0,sizeof vis);
}
return 0;
}
「CF 1520B」Ordinary Numbers
Link.
按位考虑。
#include<bits/stdc++.h>
typedef long long ll;
int main()
{
int T;
scanf("%d",&T);
while(T-->0)
{
ll ans=0,n;
scanf("%lld",&n);
for(ll pw=1;pw<=n;pw=pw*10+1) for(int now=1;now<=9;++now) if(pw*now<=n) ++ans;
printf("%lld\n",ans);
}
return 0;
}
「CF 1520C」Not Adjacent Matrix
Link.
用 flows 的 trick 来构造,\((i+j)\) 为奇先填,为偶后填。
#include<bits/stdc++.h>
int main()
{
int T,n;
scanf("%d",&T);
while(T-->0)
{
scanf("%d",&n);
if(n==2) puts("-1");
else
{
int cur=0;
static int ans[110][110];
for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) if((i+j)&1) ans[i][j]=++cur;
for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) if((i+j)&1^1) ans[i][j]=++cur;
for(int i=1;i<=n;++i,puts("")) for(int j=1;j<=n;++j) printf("%d ",ans[i][j]);
}
}
return 0;
}
「CF 1520D」Same Differences
Link.
式子移项。
#include<bits/stdc++.h>
typedef long long ll;
int a[200010],cnt[500010];
int main()
{
int T,n;
scanf("%d",&T);
while(T-->0)
{
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",&a[i]),a[i]-=i,a[i]+=200000,++cnt[a[i]];
ll ans=0;
for(int i=1;i<=n;++i) ans+=cnt[a[i]]-1;
printf("%lld\n",ans/2);
for(int i=1;i<=n;++i) --cnt[a[i]];
}
return 0;
}
「CF 1520E」Arranging The Sheep
Link.
所有牛往中间那头牛走。
#include<bits/stdc++.h>
typedef long long ll;
#define All(x) (x).begin(),(x).end()
int fuck[1000010];
int main()
{
int T,n;
scanf("%d",&T);
while(T-->0)
{
scanf("%d",&n);
int tot=0;
for(int i=1;i<=n;++i)
{
char now=getchar();
while((now^ '.') && (now^'*')) now=getchar();
if(now=='*') fuck[++tot]=i;
}
int mpos=int(std::ceil(tot/2.0));
ll ans=0;
for(int i=1;i<=tot;++i) ans+=std::abs(fuck[i]-fuck[mpos]+mpos-i);
printf("%lld\n",ans);
}
return 0;
}
「CF 1520F1」Guess the K-th Zero (Easy version)
Link.
二分维护答案区间,询问 \(\log_{2}\) 次。
#include<bits/stdc++.h>
#define fl fflush(stdout)
int n,t,k;
int q(int l,int r){int res=0; printf("? %d %d\n",l,r); fl; scanf("%d",&res); return res;}
int main()
{
scanf("%d %d",&n,&t);
while(t--)
{
scanf("%d",&k);
int l=1,r=n,ans=0;
while(l<=r)
{
int mid=(l+r)>>1,tmp=mid-l+1-q(l,mid);
if(tmp>=k) r=mid-1,ans=mid;
else k-=tmp,l=mid+1;
}
printf("! %d\n",ans);
fl;
}
return 0;
}
「CF 1520F2」Guess the K-th Zero (Hard version)
Link.
把二分记忆化下来,用 std::map 和 BIT 实现。
#include<bits/stdc++.h>
#define fl fflush(stdout)
int n,t,k;
struct FWT
{
#define l(x) ((x)&-(x))
int tr[200010];
FWT(){memset(tr,0,sizeof tr);}
void i(int x){for(;x<=n;x+=l(x)) ++tr[x];}
int $(int x){int r=0; for(;x;x^=l(x)) r+=tr[x]; return r;}
int f(int l,int r){return $(r)-$(l-1);}
}fw;
std::map<std::tuple<int,int>,int> mp;
int q(int l,int r){
if(mp.find(std::tie(l,r))==mp.end())
{
int res=0;
printf("? %d %d\n",l,r);
fl;
scanf("%d",&res);
mp[std::tie(l,r)]=res;
return res;
}
else return mp[std::tie(l,r)]+fw.f(l,r);
}
int main()
{
scanf("%d %d",&n,&t);
while(t--)
{
scanf("%d",&k);
int l=1,r=n,ans=0;
while(l<=r)
{
int mid=(l+r)>>1,tmp=mid-l+1-q(l,mid);
if(tmp>=k) r=mid-1,ans=mid;
else k-=tmp,l=mid+1;
}
printf("! %d\n",ans);
fl;
fw.i(ans);
}
return 0;
}
「CF 1520G」To Go Or Not To Go?
Link.
广搜。
#include<bits/stdc++.h>
typedef long long ll;
#define sf(x) scanf("%d",&x)
#define ssf(x) scanf("%lld",&x)
const int wax[4]={1,-1,0,0},way[4]={0,0,1,-1};
int n,m;
ll w,dis0[2010][2010],dis1[2010][2010],a[2010][2010];
bool Inside(int x,int y){return !(x<1 || x>n || y<1 || y>m);}
void Compute_0()
{
std::queue<std::tuple<int,int>> q;
q.emplace(1,1);
dis0[1][1]=1;
while(!q.empty())
{
int nowx,nowy;
std::tie(nowx,nowy)=q.front();
q.pop();
for(int k=0;k<4;++k)
{
int tox=nowx+wax[k],toy=nowy+way[k];
if(Inside(tox,toy) && !dis0[tox][toy] && ~a[tox][toy]) dis0[tox][toy]=dis0[nowx][nowy]+1,q.emplace(tox,toy);
}
}
for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) --dis0[i][j];
}
void Compute_1()
{
std::queue<std::tuple<int,int>> q;
q.emplace(n,m);
dis1[n][m]=1;
while(!q.empty())
{
int nowx,nowy;
std::tie(nowx,nowy)=q.front();
q.pop();
for(int k=0;k<4;++k)
{
int tox=nowx+wax[k],toy=nowy+way[k];
if(Inside(tox,toy) && !dis1[tox][toy] && ~a[tox][toy]) dis1[tox][toy]=dis1[nowx][nowy]+1,q.emplace(tox,toy);
}
}
for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) --dis1[i][j];
}
int main()
{
sf(n),sf(m),ssf(w);
for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) ssf(a[i][j]);
Compute_0(),Compute_1();
ll mxtmp=std::numeric_limits<ll>::max();
ll ans=~dis0[n][m]?w*dis0[n][m]:mxtmp,ozd=mxtmp;
for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) if(~dis1[i][j] && a[i][j]>=1) ozd=std::min(ozd,a[i][j]+w*dis1[i][j]);
for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) if(~dis0[i][j] && a[i][j]>=1 && ozd!=mxtmp) ans=std::min(ans,w*dis0[i][j]+a[i][j]+ozd);
if(ans==mxtmp) puts("-1");
else printf("%lld\n",ans);
return 0;
}
Solution Set -「CF 1520」的更多相关文章
- Diary / Solution Set -「WC 2022」线上冬眠做噩梦
大概只有比较有意思又不过分超出能力范围的题叭. 可是兔子的"能力范围" \(=\varnothing\) qwq. 「CF 1267G」Game Relics 任意一个 ...
- Solution Set -「ARC 107」
「ARC 107A」Simple Math Link. 答案为: \[\frac{a(a+1)\cdot b(b+1)\cdot c(c+1)}{8} \] 「ARC 107B」Quadrup ...
- Solution -「CF 1342E」Placing Rooks
\(\mathcal{Description}\) Link. 在一个 \(n\times n\) 的国际象棋棋盘上摆 \(n\) 个车,求满足: 所有格子都可以被攻击到. 恰好存在 \(k\ ...
- Solution -「CF 1622F」Quadratic Set
\(\mathscr{Description}\) Link. 求 \(S\subseteq\{1,2,\dots,n\}\),使得 \(\prod_{i\in S}i\) 是完全平方数,并最 ...
- Solution -「CF 923F」Public Service
\(\mathscr{Description}\) Link. 给定两棵含 \(n\) 个结点的树 \(T_1=(V_1,E_1),T_2=(V_2,E_2)\),求一个双射 \(\varph ...
- Solution -「CF 923E」Perpetual Subtraction
\(\mathcal{Description}\) Link. 有一个整数 \(x\in[0,n]\),初始时以 \(p_i\) 的概率取值 \(i\).进行 \(m\) 轮变换,每次均匀随机 ...
- Solution -「CF 1586F」Defender of Childhood Dreams
\(\mathcal{Description}\) Link. 定义有向图 \(G=(V,E)\),\(|V|=n\),\(\lang u,v\rang \in E \Leftrightarr ...
- Solution -「CF 1237E」Balanced Binary Search Trees
\(\mathcal{Description}\) Link. 定义棵点权为 \(1\sim n\) 的二叉搜索树 \(T\) 是 好树,当且仅当: 除去最深的所有叶子后,\(T\) 是满的: ...
- Solution -「CF 623E」Transforming Sequence
题目 题意简述 link. 有一个 \(n\) 个元素的集合,你需要进行 \(m\) 次操作.每次操作选择集合的一个非空子集,要求该集合不是已选集合的并的子集.求操作的方案数,对 \(10^9 ...
- Solution -「CF 1023F」Mobile Phone Network
\(\mathcal{Description}\) Link. 有一个 \(n\) 个结点的图,并给定 \(m_1\) 条无向带权黑边,\(m_2\) 条无向无权白边.你需要为每条白边指定边权 ...
随机推荐
- 驱动开发:内核实现SSDT挂钩与摘钩
在前面的文章<驱动开发:内核解析PE结构导出表>中我们封装了两个函数KernelMapFile()函数可用来读取内核文件,GetAddressFromFunction()函数可用来在导出表 ...
- 使用脚本收发 protobuf 协议数据
问题背景 最近做了一个 ipv6 相关的功能,发现使用 getifaddrs 获取的本地 ipv6 地址有可能不是真实的网络 ipv6 地址: 例如上图中通过 getifaddrs 获得了多个本地 i ...
- 闺蜜机 StanbyME 产品随想
今天媳妇告诉我,现在小度这边推出一款叫 "闺蜜机"的可用移动的IPAD设备,我点开链接一看,就感觉兴趣不大,不就是一款把屏幕做的更大些的IPAD了吗? 有哪些更多创新呢?为什么会需 ...
- 精彩回顾 | 金蝶云苍穹技术开放日xUser Club广州站
6月14日,以"项目实践案例:性能优化与实践"为主题的金蝶云·苍穹技术开放日广州站圆满落幕.此次活动吸引了50多位开发者到场,大家不仅聆听了开发者关于"代码检查.性能优化 ...
- Aerospike架构设计与实现细节
目录 1. 引言 2. 技术原理及概念 2.1. 基本概念解释 2.2. 技术原理介绍 2.3. 相关技术比较 3. 实现步骤与流程 3.1. 准备工作:环境配置与依赖安装 3.2. 核心模块实现 3 ...
- CF1794B Not Dividing题解
如果 \(a_i\) 可以整除 \(a_{i - 1}\),只要在 \(a_i\) 上 \(+1\) 即可,这样 \(a_i \bmod a_{i - 1} = 1\) 就满足题目要求了,如果这样算来 ...
- .NET for Apache Spark 调试
.NET for Apache Spark 调试 官方文档:在 Windows 上部署 .NET for Apache Spark 应用程序 | Microsoft Learn 打开"新命令 ...
- Mysql生成测试数据函数
1.查看设置是否允许创建函数系统参数 show variables like 'log_bin_trust_function_creators'; 2.临时设置允许创建函数系统参数 set globa ...
- Unity UGUI的RawImage(原始图片)组件的介绍及使用
Unity UGUI的RawImage(原始图片)组件的介绍及使用 1. 什么是RawImage组件? RawImage是Unity UGUI中的一个组件,用于显示原始图片.与Image组件不同,Ra ...
- 配置oracle DG
主库名称:prod1 使用asm存储数据 11.2.03 同一机器备库名称:dg 使用file存储数据 11.2.03 配置备库的参数文件cd $ORACLE_HOME/dbsvi initdg.or ...