小结:

A,B,F 切,C 没写 1ll 对照样例才发现,E,G 对照样例过,D 对照样例+看了其他人代码(主要急于看后面的题,能调出来的但偷懒了。


CF1674A Number Transformation

考虑若 \(y\) 不能整除 \(x\) 则无解,否则一定存在一组解 \(a=1,b=y\div x\)。

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define TIE cin.tie(0),cout.tie(0);
#define int long long
using namespace std;
int T,n,a[200005],x,y ;
string s;
void solve(){
cin>>x>>y;
if(y%x){
cout<<"0 0"<<endl;
return ;
}
int tmp=y/x;
cout<<1<<' '<<tmp<<endl;
}
signed main(){
IOS;TIE;
T=1;
cin>>T;
while(T--) solve();
return 0;
}

CF1674B Dictionary

直接用 \(\text{map}\) 映射,用两个字符或字符串对应数字,注意两个字符相同的要跳过。

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define TIE cin.tie(0),cout.tie(0);
#define int long long
#define mk(x,y) make_pair(x,y)
using namespace std;
int T,n,a[200005],x,y,tot;
string s;
map<pair<char,char>,int> mp;
void solve(){
cin>>s;
cout<<mp[mk(s[0],s[1])]<<endl;
}
signed main(){
IOS;TIE;
T=1;
for(char i='a';i<='z';i++){
for(char j='a';j<='z';j++){
if(i==j) continue;
mp[mk(i,j)]=++tot;
}
}
cin>>T;
while(T--) solve();
return 0;
}

CF1674C Infinite Replacement

分类讨论:

  • 若替换串中有 a,且替换串长度 \(>1\),则可以无限替换,输出 \(-1\)
  • 若替换串中有 a,且替换串长度 \(=1\),则只有一种情况,即原串
  • 否则,考虑原串中每一位是否替换,可能情况有 \(2^{原串长度}\) 种情况
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define TIE cin.tie(0),cout.tie(0);
#define int long long
#define mk(x,y) make_pair(x,y)
using namespace std;
int T;
string s,t;
void solve(){
cin>>s>>t;
bool fl=0;
for(int i=0;i<t.size();i++){
if(t[i]=='a') fl=1;
}
if(fl&&t.size()>1){
cout<<-1<<endl;
return ;
}
if(fl){
cout<<1<<endl;
return ;
}
cout<<(1ll<<s.size())<<endl;
}
signed main(){
IOS;TIE;
cin>>T;
while(T--) solve();
return 0;
}

CF1674D A-B-C Sort

容易发现这样操作之后只可以改变相邻两个数的位置,若原长度为奇数则第一个数会多出来,否则看两两是否相等即可。

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define TIE cin.tie(0),cout.tie(0);
#define int long long
#define mk(x,y) make_pair(x,y)
using namespace std;
int T,n,a[200005],b[200005];
int l[1000005],r[1000005];
void solve(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i],b[i]=a[i];
sort(b+1,b+n+1);
if(n%2){
if(a[0]!=b[0]){
cout<<"NO"<<endl;
return ;
}
}
for(int i=1+(n%2);i<=n;i+=2){
if(!(a[i]==b[i]&&a[i+1]==b[i+1]||a[i]==b[i+1]&&a[i+1]==b[i])){
cout<<"NO"<<endl;
return ;
}
}
cout<<"YES"<<endl;
}
signed main(){
IOS;TIE;
cin>>T;
while(T--) solve();
return 0;
}

CF1674E Breaking the Wall

分类讨论:

  1. 取原串中最小的两个数 \(x,y\)(不一定相邻),使它们变零。分别一直 \(-2\),代价为 \(⌈\frac{x}{2}⌉+⌈\frac{y}{2}⌉\)
  2. 取原串中相邻两个数 \(a_i,a_{i+1}\),使他们变零。设 \(x\) 为较大数,\(y\) 为较小数:
    1. 若 \(x>y\times2\),则一直在 \(x\) 处 \(-2\),代价为 \(y+⌈\frac{x-2\times y}{2}⌉\)
    2. 否则,看大小灵活 \(-2\),代价为 \(⌈\frac{x+y}{3}⌉\)
  3. 取原串中间隔一数的两个数 \(a_i,a_{i+2}\),使他们变零。设 \(x\) 为较大数,\(y\) 为较小数。先一直使中间数 \(-2\) 直到 \(x,y\) 中任意一个变 \(0\),随后剩下的一直 \(-2\),代价为 \(y+⌈\frac{x-y}{2}⌉\)

去三种情况的最小答案即可。

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define TIE cin.tie(0),cout.tie(0);
#define int long long
#define mk(x,y) make_pair(x,y)
using namespace std;
int T,n,a[200005],ans=1e18,mn,semn;
void case0(){
mn=semn=1e18;
for(int i=1;i<=n;i++){
if(a[i]<mn) semn=mn,mn=a[i];
else if(a[i]<semn) semn=a[i];
}
ans=min(ans,(int)ceil(mn/2.0)+(int)ceil(semn/2.0));
}
void case1(){
for(int i=1;i<n;i++){
int x=a[i],y=a[i+1];
if(x<y) swap(x,y);
if(y*2<x) ans=min(ans,y+(int)ceil((x-y*2)/2.0));
else ans=min(ans,(int)ceil((x+y)/3.0));
}
}
void case2(){
for(int i=1;i<n-1;i++){
int x=a[i],y=a[i+2];
ans=min(ans,min(x,y)+(int)ceil(abs(x-y)/2.0));
}
}
void solve(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
case0();case1();case2();
cout<<ans<<endl;
}
signed main(){
IOS;TIE;
T=1;
while(T--) solve();
return 0;
}

CF1674F Desktop Rearrangement

题意实为要求将所有 * 移动到这种状态:

即优先填满靠左的列。

所以每次要做的就是统计出当前棋盘上有多少 *,这是左侧该有 * 的数量,然后算出该有 * 的位置有多少是空的,即为最小移动步数。

考虑对于每一列维护前缀和,每次更新一个点加一列,询问只要从左往右扫即可。

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define TIE cin.tie(0),cout.tie(0);
#define int long long
#define mk(x,y) make_pair(x,y)
using namespace std;
int T,n,m,x,y,q,s[1005][1005],sum;
bool a[1005][1005];
char c;
void solve(){
cin>>n>>m>>q;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>c;
if(c=='*') a[i][j]=1,sum++;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) s[i][j]=s[i-1][j]+a[i][j];
}
while(q--){
cin>>x>>y;
if(a[x][y]){
sum--;
for(int i=x;i<=n;i++) s[i][y]--;
}
else{
sum++;
for(int i=x;i<=n;i++) s[i][y]++;
}
a[x][y]^=1;
int tmp=sum,ans=0;
for(int j=1;j<=m;j++){
if(tmp>n) tmp-=n,ans+=n-s[n][j];
else{
ans+=tmp-s[tmp][j];
break;
}
}
cout<<ans<<endl;
}
}
signed main(){
IOS;TIE;
T=1;
while(T--) solve();
return 0;
}

CF1674G Remove Directed Edges

首先手玩样例,可以发现一个性质:删边之后若可以从 \(u\to v\),则需满足 \(u\) 的出度 \(>1\),\(v\) 的入度 \(>1\)。

同时,\(\text{DAG}\) 中要取一个点集,使可以从其中一点走向另一点,则此点集一定可以构成一条链。具体可以根据拓扑序来理解。

所以,就可以用拓扑排序求最长路的方法来做这道题。不同的是,有入度、出度 \(>1\) 的限制条件。具体处理方法是:记下每一个点的原始入度 \(In_i\) ,如果当前队首出度 \(<2\),则按照常规拓扑排序的来搞,否则,若走向点的原始入度 \(>1\),则可以更新那个点的答案。同时,减入度和入队还是和一般拓排序一样。

#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
#define TIE cin.tie(0),cout.tie(0);
#define int long long
#define mk(x,y) make_pair(x,y)
using namespace std;
int T,n,m,in[200005],In[200005],out[200005],f[200005],u,v,ans;
bool vis[200005];
vector<int> a[200005];
queue<int> q;
void solve(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>u>>v;
a[u].push_back(v);
in[v]++,In[v]++,out[u]++;
}
for(int i=1;i<=n;i++) if(!in[i]) vis[i]=1,q.push(i);
for(int i=1;i<=n;i++) f[i]=1;
while(q.size()){
int k=q.front();q.pop();
if(out[k]<2){
for(int i=0;i<a[k].size();i++){
int tmp=a[k][i];
if(!--in[tmp]) q.push(tmp);
}
continue;
}
for(int i=0;i<a[k].size();i++){
int tmp=a[k][i];
if(In[tmp]>1) f[tmp]=max(f[tmp],f[k]+1);
if(!--in[tmp]) q.push(tmp);
}
}
for(int i=1;i<=n;i++) ans=max(ans,f[i]);
cout<<ans<<endl;
}
signed main(){
IOS;TIE;
T=1;
while(T--) solve();
return 0;
}

\[\]
\[\Huge{G\ L\ \&\ H\ F\ !}
\]

Codeforces Round #786 (Div. 3) 补题记录的更多相关文章

  1. Codeforces Round #615 (Div. 3) 补题记录

    第一次搞CF,结果惨不忍睹...还是太菜了 A:要用到全部的钱,所以总数必须是3的倍数,而且初始状态下任意一人的钱数不能超过总数除以3,否则没法分了 (也就这个签到算是在我能力范围之内了....) # ...

  2. Codeforces Round #617 (Div. 3) 补题记录

    1296A - Array with Odd Sum 题意:可以改变数组中的一个数的值成另外一个数组中的数,问能不能使数组的和是个奇数 思路:签到,如果本来数组的和就是个奇数,那就OK 如果不是,就需 ...

  3. Codeforces Round #412 Div. 2 补题 D. Dynamic Problem Scoring

    D. Dynamic Problem Scoring time limit per test 2 seconds memory limit per test 256 megabytes input s ...

  4. Codeforces Round #585 (Div. 2) [补题]

    前言 2019.9.16 昨天下午就看了看D题,没有写对,因为要补作业,快点下机了,这周争取把题补完. 2019.9.17 这篇文章或者其他文章难免有错别字不被察觉,请读者还是要根据意思来读,不要纠结 ...

  5. Codeforces Round #429 (Div. 2) 补题

    A. Generous Kefa 题意:n个气球分给k个人,问每个人能否拿到的气球都不一样 解法:显然当某种气球的个数大于K的话,就GG了. #include <bits/stdc++.h> ...

  6. Codeforces Round #419 (Div. 1) 补题 CF 815 A-E

    A-C传送门 D Karen and Cards 技巧性很强的一道二分优化题 题意很简单 给定n个三元组,和三个维度的上限,问存在多少三元组,使得对于给定的n个三元组中的每一个,必有两个维度严格小于. ...

  7. Codeforces Round #590 (Div. 3)补题

    要想上2000分,先刷几百道2000+的题再说 ---某神 题目 E F 赛时是否尝试 × × tag math bitmask 难度 2000 2400 状态 ∅ √ 解 E 待定 F 传送门 第一 ...

  8. Codeforces Round #574 (Div. 2)补题

    A. Drinks Choosing 统计每种酒有多少人偏爱他们. ki 为每种酒的偏爱人数. 输出ans = (n + 1)/2 >  Σki / 2 ? (n + 1)/2 - Σki / ...

  9. Codeforces Round #378 (Div. 2) D题(data structure)解题报告

    题目地址 先简单的总结一下这次CF,前两道题非常的水,可是第一题又是因为自己想的不够周到而被Hack了一次(或许也应该感谢这个hack我的人,使我没有最后在赛后测试中WA).做到C题时看到题目情况非常 ...

随机推荐

  1. 究竟什么是Shadow DOM?

    shadow dom 是什么? 顾名思义,shadow dom直译的话就是影子dom,但我更愿把它理解为DOM中的DOM.因为他能够为Web组件中的 DOM和 CSS提供了封装,实际上是在浏览器渲染文 ...

  2. 【读书笔记】C#高级编程 第十六章 错误和异常

    (一)简介 错误的出现并不总是编写应用程序的人的原因,有时应用程序会因为应用程序的最终用户引发或运行代码的环境而发生错误.C#提供了异常处理机制来处理错误. (二)异常类 在C#中,但刚出现某个特殊的 ...

  3. WSUS无法发现客户端

    这几天遇到一个问题,刚装好的WSUS服务器同步完补丁后,打算上线使用.挑了几个客户端,使用注册表配置了WSUS,但是迟迟无法在控制台上看到这些客户端.由于部分客户端不在域中,无法使用组策略配置,就写了 ...

  4. 《网页设计基础——CSS的四种引入方式详解》

    网页设计基础--CSS的四种引入方式详解     一.行内式:   规则: 1. 行内式是所有样式方法中最为直接的一种,它直接对HTML的标记使用style属性,然后将CSS代码直接写在其中.   格 ...

  5. BUUCTF Misc 被偷走的文件

    首先下载文件打开 得到一个流量文件 用wireshark打开 打开后 进行分析 看到有ftp流量,于是过滤ftp 看到被偷走的是flag.rar 接下用binwalk进行分离 binwalk -e f ...

  6. 使用 Win2D 实现融合效果

    1. 融合效果 在 CSS 中有一种实现融合效果的技巧,使用模糊滤镜(blur)叠加对比度滤镜(contrast)使两个接近的元素看上去"粘"在一起,如下图所示: 博客园的 Cho ...

  7. 基于深度学习的文本分类案例:使用LSTM进行情绪分类

    Sentiment classification using LSTM 在这个笔记本中,我们将使用LSTM架构在电影评论数据集上训练一个模型来预测评论的情绪.首先,让我们看看什么是LSTM? LSTM ...

  8. ProxySQL查看所有的全局变量及更新操作

    mysql> select * from global_variables; +--------------------------------------------------------- ...

  9. MySQL5.6 & 5.7 配置 SSL

    mysql5.7上开启并配置ssl [root@mysqlmaster01 bin]# ./mysql_ssl_rsa_setup --datadir=/data/mysql_data1/ --use ...

  10. Beats:Beats在Kibana中的集中管理

    我们可以通过在命令行中对我们的Beats进行管理,比如我们可以启动metric几个模块,我们可以通过如下的命令来执行: ./metricbeat modules enable apache mysql ...