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\) 条无向无权白边.你需要为每条白边指定边权 ...
随机推荐
- pip 20.3 新版本发布!即将抛弃 Python 2.x
据 Python 软件基金会消息,Python Packaging Authority 和 pip 团队于北美时间11月30日宣布发布 pip 20.3版本,开发者可以通过运行 python -m p ...
- 1. 认识IntelliJ IDEA
恐惧是本能,行动是信仰(在此感谢尚硅谷宋红康老师的教程) 1. Why IDEA ? [注]JetBrains 官方说明: 尽管我们采取了多种措施确保受访者的代表性,但结果可能会略微偏向 JetBra ...
- hashtable分析
1.什么是Hash表? Hash表又被称为散列表,是根据关键码值(key-value)也就是键值对来直接访问的一种数据结构.也就是说,它通过把关键码值映射到表中的一个位置来访问记录,用以加快查找的 ...
- 前端Vue自定义带历史记录的搜索框组件searchBar 支持搜索输入框清空 搜索历史存储记录清除
前端Vue自定义带历史记录的搜索框组件searchBar 支持搜索输入框清空 搜索历史存储记录清除,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/p ...
- 记一次 .NET 在线客服系统同时支持 SQL Server 和 MySQL 没卡死分析
前段时间我发表了一系列文章,开始介绍基于 .net core 的在线客服系统开发过程. 有很多朋友一直提出希望能够支持 MySQL 数据库,考虑到已经有朋友在用 SQL Server,我在升级的过程中 ...
- 使用C#编写.NET分析器(三)
译者注 这是在Datadog公司任职的Kevin Gosse大佬使用C#编写.NET分析器的系列文章之一,在国内只有很少很少的人了解和研究.NET分析器,它常被用于APM(应用性能诊断).IDE.诊断 ...
- Redis的设计与实现(4)-跳跃表
跳跃表 (skiplist) 是一种有序数据结构, 它通过在每个节点中维持多个指向其他节点的指针, 从而达到快速访问节点的目的. 跳跃表支持平均 O(log N) 最坏 O(N) 复杂度的节点查找, ...
- VueJs禁止页面鼠标右键、选中、调用开发者工具
1.禁止鼠标右键操作 // 禁止鼠标右键 window.oncontextmenu = function () { return false; }; 2.禁止选中网页内容 // 禁止选中网页上内容 w ...
- 2021-10-09 Core学习
控制器学习 如果有ID参数,根据前面定义的{controller=Home}/{action=Index}/{id?} 可以换成一下格式 页面学习 视图 基架搭建 然后在nuget控制台添加 Add- ...
- .Net Core控制台程序读取Json配置文件
1 添加依赖(可以直接通过nuget包安装 Microsoft.Extensions.Configuration.Json 这个会依赖其他两个会自动安装依赖的) Microsoft.Extension ...