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\) 条无向无权白边.你需要为每条白边指定边权 ...
随机推荐
- R 语言主成分分析(PCA)实战教程
作者:落痕的寒假原文:https://blog.csdn.net/LuohenYJ/article/details/97950522 声明:本文章经原作者同意后授权转载. 主成分分析 Principa ...
- TIM-BLDC六步换相-串口中断模拟检测霍尔信号换相-软件COM事件解析
TIM-BLDC六步换相-串口中断模拟检测霍尔信号换相-软件COM事件解析 一.COM事件解析 COM事件简介:COM事件即换相事件只用于高级定时器当中,其主要目的是用在BLDC方波的控制中,用于同时 ...
- CHAT-GPT初使用
拿chatgpt去试验了一下,一个挺小的需求,但是前后还是更改了三次,体验就是它可以不断改进之前实现的代码,但需要提需求的人比较清楚需求内的细节,差不多类似于,我有想法,它来实现,还是可以提高不少效率 ...
- 检测手机系统是iOS还是android(可实现根据手机系统跳转App下载链接)
快速实现检测手机系统是iOS还是android(可实现根据手机系统跳转App下载链接); 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin ...
- C# - ConcurrentDictionary 并发场景使用注意事项
1 自身作为 Enumerable 的遍历 自身作为可遍历对象,键值对为元素进行遍历,是线程安全的,但不提供快照,遍历过程中集合产生变更会直接反馈至此次遍历过程中.但并不一定能够保障获取数据的过程中, ...
- TornadoFx 页面之间的数据传递
原文地址: TornadoFx 页面之间的数据传递 - Stars-One的杂货小窝 和Android开发一样,经常遇到两个页面之间需要进行数据的交互传输,本文讲解下TornadoFx框架中,页面之间 ...
- JavaScript 整理的基础的方法
innerHTML //innerHTML 属性设置或返回表格行的开始和结束标签之间的 HTML. innertext//innerText 属性返回文本值 没有结构信息 $("#test& ...
- Vue基础技术之——数据绑定
Vue数据大致绑定分为两类: 1.单向数据绑定(v-bind): 数据只能从data流向页面. 2.双向数据绑定(v-model):数据不仅能从data流向页面,还能从页面流向data. 话不多说,先 ...
- 在mapper.xml中遍历添加多条数据
<insert id="saveAuditDf" parameterType="java.util.List"> insert into audit ...
- C语言循环坑 -- continue的坑
文章目录 前言 一.continue语法 1.continue的作用 2.语法 二.大坑项目 题目 分析 正确写法 三.进坑调试 第一种 第二种 总结 前言 在使用continue和break时,会出 ...