Codeforces 956 Div2

news/2024/11/15 6:23:54/文章来源:https://www.cnblogs.com/qau-marisa3/p/18301138

期末考试结束,开始训练

A. Array Divisibility

----------------------------------题解----------------------------

简单的构造题,要让数组a里面的下表为1<=k<=n的数以及下表为(k的因数)的数加起来的和能被K整除,那我们只需要让每一个k的因数都能被k整除就行了,直接让每一个编号i处所带的元素为i*i便可以实现,不信你就随便找几个k试一下例如(2,3,5)

点击查看代码
#include<bits/stdc++.h>
using namespace std;
int main()
{int t;cin>>t;while(t--){int n;cin>>n;for(int i=1;i<=n;i++){cout<<i*i<<" ";}cout<<endl;}
}

B. Corner Twist


不擅长这种猜结论题,卡了很久

最后结论是每行每列的值模3不相等就不行

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=510;
char a[N][N];
char b[N][N];
int main()
{int t;cin>>t;while(t--){int n,m;cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) cin>>a[i][j];}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++) cin>>b[i][j];}int jud=0;int c1=0,c2=0;for(int i=1;i<=n;i++){   c1=0,c2=0;for(int j=1;j<=m;j++){c1+=a[i][j]-'0';c2+=b[i][j]-'0';}if(c1%3!=c2%3) jud=1;}for(int i=1;i<=m;i++){   c1=0,c2=0;for(int j=1;j<=n;j++){c1+=a[j][i]-'0';c2+=b[j][i]-'0';}if(c1%3!=c2%3) jud=1;}if(jud==1) cout<<"NO"<<endl;else cout<<"YES"<<endl;}
}
C. Have Your Cake and Eat It Too

--------------------------------------题解---------------------------------------

这题我尝试了一个暴力解法,我求出了a,b,c三个数组的前缀和,然后枚举每个数组的前缀和中所有能放在中间的值假如说把数组a取得数字放在中间 让B,和C各自取左右两边的编号都试试如果符合条件就输出,不符合就继续试,直到把三个数组全试玩,如果没有符合条件的,就返回-1.略微考验码力

点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
typedef long long ll;
ll a[N];
ll b[N],c[N];
ll a1[N],b1[N],c1[N];
int main()
{int t;cin>>t;while(t--){ll n;cin>>n;ll sum=0;for(ll i=1;i<=n;i++) cin>>a[i],sum+=a[i];for(ll i=1;i<=n;i++) cin>>b[i];for(ll i=1;i<=n;i++) cin>>c[i];ll la=1,ra=1,lb=1,rb=1,lc=1,rc=1;ll s1=0;sum=sum/3+(sum%3!=0);a1[0]=b1[0]=c1[0]=0;for(ll i=1;i<=n;i++){  a1[i]=a1[i-1]+a[i];b1[i]=b1[i-1]+b[i];c1[i]=c1[i-1]+c[i];}ll jud=0;for(ll i=1;i<=n;i++){s1+=a[i];while(s1-a[la]>=sum){s1-=a[la];la++;}if(s1>=sum&&b1[la-1]>=sum&&c1[n]-c1[i]>=sum){cout<<la<<" "<<i<<" "<<1<<" "<<la-1<<" "<<i+1<<" "<<n<<'\n';jud=1;break;}if(s1>=sum&&c1[la-1]>=sum&&b1[n]-b1[i]>=sum){cout<<la<<" "<<i<<" "<<i+1<<" "<<n<<" "<<1<<" "<<la-1<<'\n';jud=1;break;}}s1=0;if(jud==0){for(ll i=1;i<=n;i++){s1+=b[i];while(s1-b[lb]>=sum){s1-=b[lb];lb++;}if(s1>=sum&&a1[lb-1]>=sum&&c1[n]-c1[i]>=sum){cout<<1<<" "<<lb-1<<" "<<lb<<" "<<i<<" "<<i+1<<" "<<n<<'\n';jud=1;break;}if(s1>=sum&&c1[lb-1]>=sum&&a1[n]-a1[i]>=sum){cout<<i+1<<" "<<n<<" "<<lb<<" "<<i<<" "<<1<<" "<<lb-1<<'\n';jud=1;break;}}}s1=0;if(jud==0){lb=1;//	cout<<11111<<endl;for(ll i=1;i<=n;i++){s1+=c[i];while(s1-c[lb]>=sum){s1-=c[lb];lb++;}if(s1>=sum&&a1[lb-1]>=sum&&b1[n]-b1[i]>=sum){cout<<1<<" "<<lb-1<<" "<<i+1<<" "<<n<<" "<<lb<<" "<<i<<'\n';jud=1;break;}if(s1>=sum&&b1[lb-1]>=sum&&a1[n]-a1[i]>=sum){cout<<i+1<<" "<<n<<" "<<1<<" "<<lb-1<<" "<<lb<<" "<<i<<'\n';jud=1;break;}}}if(jud==0) cout<<"-1"<<'\n';}}/*
4
4 4 4 4
4 4 4 4
4 4 4 4
*/

D


能看到这的都是糕手了,我简要分析

------------------------------题解-----------------------------------------------

每交换一次,数组中逆序对数量的奇偶性都会发生改变,因此我猜测这题是个猜结论的,因为我没分析出来。结论大概是和逆序对的奇偶性有关。

我们设定一个数组不变,只变一个数组,看看需要变多少次才能让两数组相同,看看需要奇数次还是偶数次,如果是偶数次便可以,奇数次不行
可以类比于两个人互相接近,一次只能走1,如果距离点是偶数便可以两人最后不能停在一个格子,奇数就可以

这里我写的不好看贴一下别人代码

点击查看代码
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[200005], b[200005];
map<int, int> mp;
void solve()
{mp.clear();int n;cin >> n;for (int i=1;i<=n;i++) cin >> a[i];for (int i=1;i<=n;i++){cin >> b[i];mp[b[i]]=i;}int ans = 0;for (int i=1;i<=n;i++){if (b[i] == a[i]) continue;if (mp.count(a[i]) == 0){cout << "NO\n";return;}int p=mp[a[i]];swap(b[i],b[p]);mp[b[i]]=i;mp[b[p]]=p;ans+=1; }if (ans%2 == 0) cout << "YES\n";else cout << "NO\n";
}
signed main()
{int t;cin >> t;while (t--) solve();return 0;
}
**You can BE the best**

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/743435.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习-flutter学习-009-文本及样式

《Flutter实战第二版》 TextTextAlign:left right center 注意点:对齐的参考系是Text widget 本身,如果文本不够长,设置看起来是没有生效的;文本长才看得到,字符串内容超过一行,Text 宽度等于屏幕宽度,第二行文本便会居中显示。maxLines、overflow:指定文本显示的最大…

Invicti v24.7.0 for Windows - Web 应用程序安全测试

Invicti v24.7.0 for Windows - Web 应用程序安全测试Invicti v24.7.0 for Windows - Web 应用程序安全测试 Invicti Standard v24.7.0 - 9 July 2024 请访问原文链接:https://sysin.org/blog/invicti/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgInvicti 是…

Nexpose v6.6.260 for Linux Windows - 漏洞扫描

Nexpose v6.6.260 for Linux & Windows - 漏洞扫描Nexpose v6.6.260 for Linux & Windows - 漏洞扫描 Rapid7 Vulnerability Management, release Jul 10, 2024 请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。 作者主页:…

ABC 362

ABC 362比赛链接\[Solution \]题目链接 提交记录模拟。

Jmeter 引入自己写的jar包代码

一、编译调试Java代码在编程工具中将代码进行调试,满足需求后将代码进行打包导出成 .jar 文件,根据不同的编译工具搜索导出功能即可示例代码一:package com.dffl.gyl;public class Jmeter_test {public static String meter_test() {System.out.println("写点东西2"…

0180-进入 64 位模式

环境Time 2022-11-12 WSL-Ubuntu 22.04 QEMU 6.2.0 NASM 2.15.05前言 说明 参考:https://os.phil-opp.com/entering-longmode 目标 从保护模式切换到长模式。 定位代码段 因为当前还是执行的 32 的指令,所以需要执行跳转,重新选择 GDT,这里给代码段加了一个标记。 gdt64:dq…

0178-开启四级分页

环境Time 2022-11-12 WSL-Ubuntu 22.04 QEMU 6.2.0 NASM 2.15.05前言 说明 参考:https://os.phil-opp.com/entering-longmode 目标 如果要进入长模式,则必须要进行分页。在 64 位系统中,采用 4 级分页。 关于分页的信息,需要找其它的资料另外了解,这里不做详细介绍。 介绍…

『比赛记录』【LGR-193】洛谷 7 月月赛 IABC 362

『比赛记录』【LGR-193】洛谷 7 月月赛 IABC 362最舒服的一集「CROI R2」在相思树下 I 想了好久还是决定把这道题也写一下,毕竟赛事花了 \(40min\) 才解决。 思路 开比赛,看题面,很快啊,打了一个双端队列的做法,结果 MLE,然后人傻了二十分钟。 之后缓过神来开始推式子。…

[DP] 数位DP

本文主要内容:数位DP例题数位DP 主要有两种方法,填数法和记搜。这里主要研究记搜的实现; 模板 相比于填数法,记搜的优点在于有固定的模板,实现较容易; 缺点在于需要很多 $ memset $,常数较大,容易被卡; 下面通过几道例题来了解记搜模板; 一 $ haha $ 数设记搜各参数如…

数据库的触发器的使用

需要实现在passenger中添加乘客信息后,在classes(班次)中对应舱位的已售出票数+1例:在passenger中添加了一个degree=“头等舱”的乘客,就在classes中对应头等舱已售出票数goodnumber+1 (经济舱类似,对应secondnumber+1实现方法: 在passenger表中增加触发器,在新增pa…

【比赛】CSP提高组模拟1

挂的分比我打的都多和初三学长们一起打的比赛,被人家爆杀了。 T1 最短路 20Pts 原题 Cow Toll Paths G。 正解是按点权排序后跑一遍 Floyd,歪解是多迭代几遍。 赛时没开 long long \(80 \to 20\)。点击查看代码 #include<bits/stdc++.h> #define int ll using namespa…