CF传送门

因为洛谷题库未更新,所以给出的题面都是CF的。

现场打真是太卡了(梯子挂了,codeforc.es也崩了),所以五六分钟才打开题目 \(qwq\)

A. Spell Check

萌萌题,把字符串放桶里,判名字每个字母是否恰好出现一次即可。

\(9min\) \(AC\) \(qwq\) 都怪CF

Code:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
string s;
int t[150],T,n;
void solve(){
scanf("%d",&n);
cin>>s;
memset(t,0,sizeof(t));
for(int i=0;i<n;i++) t[s[i]]++;
if(t['T']==1&&t['i']==1&&t['m']==1&&t['u']==1&&t['r']==1&&n==5) printf("YES\n");
else printf("NO\n");
}
int main(){
scanf("%d",&T);
while(T--) solve();
return 0;
}

B. Colourblindness

萌萌题\(\times 2\),将 \(G\) 和 \(B\) 视为相同,然后比一下两个字符串即可。

\(15min\) \(AC\)

Code:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
string s1,s2;
int T,n;
bool a[105],b[105];
void solve(){
scanf("%d",&n);
cin>>s1>>s2;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i=0;i<n;i++){
if(s1[i]=='R') a[i]=1;
if(s2[i]=='R') b[i]=1;
}
for(int i=0;i<n;i++){
if(a[i]!=b[i]){
printf("NO\n");
return ;
}
}
printf("YES\n");
}
int main(){
scanf("%d",&T);
while(T--) solve();
return 0;
}

C. Word Game

用三个 \(map\) 表示三个人每次用到过的字符串,然后分别判断其他两人有没有用过,并计算答案即可。

\(25min\) \(AC\)

Code:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int T,n;
string s1[1005],s2[1005],s3[1005];
int ans1,ans2,ans3;
void solve(){
scanf("%d",&n);
map<string,bool> a,b,c;
ans1=ans2=ans3=0;
for(int i=1;i<=n;i++) cin>>s1[i],a[s1[i]]=1;
for(int i=1;i<=n;i++) cin>>s2[i],b[s2[i]]=1;
for(int i=1;i<=n;i++) cin>>s3[i],c[s3[i]]=1;
for(int i=1;i<=n;i++){
if(b[s1[i]]+c[s1[i]]==0) ans1+=3;
else if(b[s1[i]]+c[s1[i]]==1) ans1+=1;
}
for(int i=1;i<=n;i++){
if(a[s2[i]]+c[s2[i]]==0) ans2+=3;
else if(a[s2[i]]+c[s2[i]]==1) ans2+=1;
}
for(int i=1;i<=n;i++){
if(b[s3[i]]+a[s3[i]]==0) ans3+=3;
else if(b[s3[i]]+a[s3[i]]==1) ans3+=1;
}
printf("%d %d %d\n",ans1,ans2,ans3);
}
int main(){
scanf("%d",&T);
while(T--) solve();
return 0;
}

D. Line

首先可以知道,左半边的 \(L\) 改为 \(R\) 可以使答案更优,右半边的 \(R\) 改为 \(L\) 可以使答案更优。

所以只要先算出初始的答案,然后 \(l,r\) 从两边往中间扫,发现可以改的就更新答案并输出,同时 \(cnt\) 记着更新了几次。最后 \(cnt\) 还不到 \(n\) 的话说明已经最优不用改了,输出 \(n-cnt\) 次最终答案即可。

几个不等号注意一下即可。

\(41min\) \(AC\) \(qwq\)

Code:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int T,n;
ll ans;
string s;
void solve(){
scanf("%d",&n);
cin>>s;
ans=0;
for(int i=0;i<n;i++){
if(s[i]=='L') ans+=(ll)i;
else ans+=(ll)n-(ll)i-1ll;
}
int cnt=0,now=0;
for(int l=0,r=n-1;l<=n/2,r>=n/2;l++,r--){
if(s[l]=='L'){
now++;
ans-=(ll)l;
ans+=(ll)n-(ll)l-1ll;
}
if(now>cnt){
cnt=now;
printf("%lld ",ans);
}
if(s[r]=='R'){
now++;
ans+=(ll)r;
ans-=(ll)n-(ll)r-1ll;
}
if(now>cnt){
cnt=now;
printf("%lld ",ans);
}
}
for(int i=1;i<=n-cnt;i++) printf("%lld ",ans);
printf("\n");
}
int main(){
scanf("%d",&T);
while(T--) solve();
return 0;
}

E. Counting Rectangles

数据范围要求 \(O(1)\) 查询,所以一眼矩阵前缀和。

只需要预处理出 \(1000 \times 1000\) 范围内的 \(sum[i][j]\),表示 \(i\times j\) 的矩形可以容纳的答案即可。

同时注意,可能有重复的边长(如样例最后一组),所以 \(sum\) 初始时要 \(+=\)

但是这个菜ji赛时输出的调挂了喜提 WA

Code:

#include<bits/stdc++.h>
#define ll long long
int T,n,q;
ll sum[1005][1005],x,y;
void solve(){
memset(sum,0,sizeof sum);
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++){
scanf("%lld%lld",&x,&y);
sum[x][y]+=x*y;
}
for(int i=1;i<=1000;i++){
for(int j=1;j<=1000;j++) sum[i][j]+=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
}
for(int i=1;i<=q;i++){
int u,v,w,z;
scanf("%d%d%d%d",&u,&v,&w,&z);
printf("%lld\n",sum[w-1][z-1]+sum[u][v]-sum[u][z-1]-sum[w-1][v]);
}
}
int main(){
scanf("%d",&T);
while(T--) solve();
return 0;
}

F. L-shapes

其实这题根本不用搜索,有耐心即可。

可以发现,在 \(n\times m\) 范围内扫,可能合法的只有以下四种情况,其中蓝色代表示是 *,红色表示不能是 *,其中黄色五角星表示当前 \(i,j\) 的位置。

所以只要把 * 标记为 \(1\),全图扫一遍,发现合法就给它变 \(0\),看最后有没有 \(1\) 剩余即可。

因为 \(E\) 卡太久,\(1h\) \(45min\) 才 \(AC\) \(qwq\)

Code:

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int T,n,m,a[55][55];
char c;
void search(int i,int j){
if(a[i+1][j]&&a[i+1][j+1]&&!a[i-1][j-1]&&!a[i-1][j]&&!a[i-1][j+1]&&
!a[i][j-1]&&!a[i][j+1]&&!a[i][j+2]&&!a[i+1][j-1]&&!a[i+1][j+2]&&
!a[i+2][j-1]&&!a[i+2][j]&&!a[i+2][j+1]&&!a[i+2][j+2]){
a[i][j]=a[i+1][j]=a[i+1][j+1]=0;
return ;
}
if(a[i+1][j-1]&&a[i+1][j]&&!a[i-1][j-1]&&!a[i-1][j]&&!a[i-1][j+1]&&
!a[i][j-2]&&!a[i][j-1]&&!a[i][j+1]&&!a[i+1][j-2]&&!a[i+1][j+1]&&
!a[i+2][j-2]&&!a[i+2][j-1]&&!a[i+2][j]&&!a[i+2][j+1]){
a[i][j]=a[i+1][j-1]=a[i+1][j]=0;
return ;
}
if(a[i][j+1]&&a[i+1][j+1]&&!a[i-1][j-1]&&!a[i-1][j]&&!a[i-1][j+1]&&
!a[i-1][j+2]&&!a[i][j-1]&&!a[i][j+2]&&!a[i+1][j-1]&&!a[i+1][j]&&
!a[i+1][j+2]&&!a[i+2][j]&&!a[i+2][j+1]&&!a[i+2][j+2]){
a[i][j]=a[i][j+1]=a[i+1][j+1]=0;
return ;
}
if(a[i][j+1]&&a[i+1][j]&&!a[i-1][j-1]&&!a[i-1][j]&&!a[i-1][j+1]&&
!a[i-1][j+2]&&!a[i][j-1]&&!a[i][j+2]&&!a[i+1][j-1]&&!a[i+1][j+1]&&
!a[i+1][j+2]&&!a[i+2][j-1]&&!a[i+2][j]&&!a[i+2][j+1]){
a[i][j]=a[i][j+1]=a[i+1][j]=0;
return ;
}
}
void solve(){
scanf("%d%d",&n,&m);
memset(a,0,sizeof(a));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>c;
if(c=='*') a[i][j]=1;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==1) search(i,j);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==1){
printf("NO\n");
return ;
}
}
}
printf("YES\n");
}
int main(){
scanf("%d",&T);
while(T--) solve();
return 0;
}

G. Even-Odd XOR

巧妙的构造。赛时来不及了

应该有很多种方法,说一下我的想法。

首先发现从 \(0\) 开始排的有序数列,它的奇数位、偶数位的异或和很有特点(可以手算)。只要有办法让他们都等于 \(0\) 就是合法的答案了。

同时可以得知,要使 \(x_1\) 到 \(x_n\) 的异或和为 \(0\),只需要 \(x_1\) 到 \(x_{n-1}\) 的异或和等于 \(x_n\) 即可。

所以计一个 \(k\) 表示 \(0\) 到 \(n-1\) 的异或和放在最后,但发现这样能会出现重复数字,比如 \(0\) 到 \(7\) 异或和为 \(0\),数列出现两个 \(0\) 就不合法了。

所以想到搞两个大数,比如 \(x=2^{24}\) 和 \(y=2^{25}\),各放在奇、偶位,同时将得到的 \(k\oplus x\oplus y\) ,答案就还是合法的且不会重复。多出两个数怎么办?\(0\) 到 \(n-1\) 改为到 \(n-3\) 即可。

Code:

#include <bits/stdc++.h>
using namespace std;
int T,n,k;
void solve(){
scanf("%d",&n);
k=0;
for(int i=0;i<n-3;i++){
printf("%d ",i);
k^=i;
}
int x=1<<24,y=1<<25;
printf("%d %d %d\n",k^x^y,x,y);
}
int main(){
scanf("%d",&T);
while(T--) solve();
return 0;
}

G L & H F !

Codeforces Round #817 (Div. 4)的更多相关文章

  1. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  2. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  3. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  4. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  5. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  6. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  7. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  8. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

  9. Codeforces Round #268 (Div. 2) ABCD

    CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...

随机推荐

  1. 第三十一篇:vue3和vue2的不同

    好家伙 1.为什么会有vue3? Vue2和Vue3的区别 - 简书 (jianshu.com) 貌似是因为他的对手太优秀,所以他也必须进步 2.什么是api? 从文件操作开始谈API. 以C语言为例 ...

  2. 搭建docker镜像仓库(二):使用harbor搭建本地镜像仓库

    目录 一.系统环境 二.前言 三.Harbor 四.使用harbor搭建私有镜像仓库 4.1 环境介绍 4.2 k8smaster节点安装配置harbor 4.2.1 安装harbor离线包 4.2. ...

  3. 全局索引与分区索引对于SQL性能影响的比较

    KingbaseES 提供了对于分区表 global index 的支持.global index 不仅提供了对于唯一索引功能的改进(无需包含分区键),而且在性能上相比非global index (l ...

  4. 如何用 refcursor 返回结果集

    可以通过返回 Refcursor 类型的函数,或者out 类型的函数或 procedure 返回结果集. 一.返回refcursor 类型的函数 create or replace function ...

  5. electron 起步

    electron 起步 为什么要学 Electron,因为公司需要调试 electron 的应用. Electron 是 node 和 chromium 的结合体,可以使用 JavaScript,HT ...

  6. 【2022-09-09】Django框架(九)

    Django框架(九) cookie与session简介 网址的发展史: 1.起初网站都没有保存用户功能的需求,所有用户访问返回的结果都是一样的. 比如:新闻网页,博客网页,小说... (这些网页是不 ...

  7. c#中容易被忽视的foreach

    有句俗语:百姓日用而不知.我们c#程序员很喜欢,也非常习惯地用foreach.今天呢,我就带大家一起探索foreach,走,开始我们的旅程. 一.for语句用的好好的,为什么要提供一个foreach? ...

  8. Windows Powershell安装错误

    今天需要更新一下VMware的 powercli.使用命令install-module -Name VMware.PowerCLI -AllowClobber但是遇到一个错误. Unable to r ...

  9. 关于在PyCharm中使用虚拟环境

    Python虚拟环境的概念对于管理项目用到的第三方包真是好处多多,所以也想在PyCharm使用虚拟环境. 在这个过程中,遇到很多问题: 第一是使用Python创建虚拟环境,然后在PyCharm创建项目 ...

  10. kibana配置文件kibana.yml参数详解

    server.port: 默认值: 5601 Kibana 由后端服务器提供服务,该配置指定使用的端口号. server.host: 默认值: "localhost" 指定后端服务 ...