Codeforces Round #674 (Div. 3) A ~ F 详细讲解
时间:2022-07-26
本文章向大家介绍Codeforces Round #674 (Div. 3) A ~ F 详细讲解,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
A
思路+题意:就是除了第一层有两个单元的话,其余的楼层都有x个单元。自己动手推一推就知道了。然后就是取余跟做除,看看在当前这层,还是下一层。不要忘了 加上第一层。
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n,x;
cin>>n>>x;
if(n == 1 || n==2 ){
cout<<"1"<<endl;
continue;
}
else{
if(x==1){
cout<<n-1<<endl;
continue;
}
else{
int res = n - 2;
int tot = res/x;
int ans = res % x;
if(ans == 0){
cout<<1 + tot<<endl;
}
else{
cout<<2+tot<<endl;
}
}
}
}
return 0;
}
B 题意 + 思路:就是让你求一个矩阵关于主对角线对称。那么就是小矩阵的左下角跟右上角一样就行了。自己推一推。 然后大矩阵还必须是偶数的。这样子就行了。
#include<bits/stdc++.h>
using namespace std;
int a[5][5];
int main(){
int t;
cin>>t;
while(t--){
int n,m;
cin>>n>>m;
bool flag=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=2;j++){
for(int k=1;k<=2;k++){
cin>>a[j][k];
}
}
if(a[2][1] == a[1][2]) flag = 1;
//cout<<flag<<endl;
}
if(m%2==0 && flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
C 题意 + 思路: 就是给你两个操作,一个是可以对序列选定的一个数 + 1,一个是对序列进行赋值加到当前序列。问你大于等于n至少需要多少次。然后我们就是枚举 +1即操作一的次数,然后这个时候看操作二要复制多少次才能>=n,然后我们维护跟新最小值就行。开到根号n就行了。
#include<bits/stdc++.h>
using namespace std;
int main(){
int t;
cin>>t;
while(t--){
int n;
cin>>n;
int ans = n;
for(int i=2;i*i<=n;i++){
if(n%i==0){
ans = min(ans,i-1+n/i);
}
else{
ans = min(ans,i-1+n/i+1);
}
}
ans--;
cout<<ans<<endl;
}
return 0;
}
D 题意 + 思路:就是给你一个序列,然后让任意子序列和不为 0 。那么我们首先肯定写个前缀和!,然后呢?我们思考,如果一个区间和 为 0 ,然后我们在右端点左边 加入一个无穷大的值,那么这个时候就相当于加入这个值左面的子区间肯定不为 0了,所以就相当于一个新的前缀和从右端点开始的,如此循环模拟,得到最少插入次数。
include<bits/stdc++.h>
#define maxn 200005
using namespace std;
typedef long long ll;
ll a[maxn],sum[maxn];
set<ll> s;
int tot = 0;
ll temp = 0;
int main(){
ll n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
sum[i] = sum[i-1]+a[i];
}
for(int i=0;i<=n;i++){
if(!s.count(sum[i]-temp)) s.insert(sum[i]-temp);
else{
tot++;
s.clear();
s.insert(0);
s.insert(a[i]);
temp = sum[i-1];
}
}
cout<<tot<<endl;
return 0;
}
E 题意 + 思路:就是石头剪刀布卡片若干 两个人博弈,数目不一样,然后让你求自己赢的最多的次数跟赢的最少的次数,赢的最好就是让自己去赢就行了,赢的最少的话就是平局让对面赢,然后最后迫不得已了让自己再赢。
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
ll a[10];
ll b[10];
int main(){
ll n;
cin>>n;
for(int i=1;i<=3;i++){
cin>>a[i];
}
for(int i=1;i<=3;i++){
cin>>b[i];
}
ll tot = 0;//就让自己赢最多
a[1] >= b[2] ? tot+=b[2]:tot+=a[1];
a[2] >= b[3] ? tot+=b[3]:tot+=a[2];
a[3] >= b[1] ? tot+=b[1]:tot+=a[3];
ll to =0;//尽量平局然后让对方赢自己。
ll a1=0,a2=0,a3=0,b1=0,b2=0,b3=0;
ll aa1=0,aa2=0,aa3=0;//存下平局跟输的
if(a[2] - b[1] -b[2] > 0){
aa2 = (a[2]-b[1]-b[2]);
}
ans = min(ans,aa2);
if(a[1] - b[1] - b[3] >0){
aa1 = (a[1]-b[1]-b[3]);
}
ans = min(ans,aa1);
if(a[3] - b[3] -b[2] >0){
aa3 =(a[3] - b[3]-b[2]);
}
to = aa1+aa2+aa3;
cout<<to<<" "<<tot<<endl;
return 0;
}
F 题意 + 思路:就是“?”可以改成 a ,b,c。然后让求abc的个数。模拟这个过程然后暴力即可。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 5, mod = 1e9 + 7;
int n, m, _, k;
char s[N];
ll a[20], ans = 0;
int qpow(ll a, ll b) {
ll ans = 1; a %= mod;
for (; b; a = a * a % mod, b >>= 1)
if (b & 1) ans = ans * a % mod;
return ans;
}
int main() {
cin >> n;
cin >> s + 1;
for(int i=0;i<n;i++)
if (s[i] == 'a') ++a[1];
else if (s[i] == 'b') {
a[3] += a[1];
a[5] += a[2];
} else if (s[i] == 'c') {
a[7] += a[3];
a[9] += a[4];
a[10] += a[5];
a[13] += a[6];
} else {
a[14] += a[6];
a[12] += a[5];
a[11] += a[4];
a[8] += a[3];
a[6] += a[2];
a[4] += a[1];
++a[2];
}
if (a[7]) ans = a[7] % mod * qpow(3, a[2]) % mod;
if (a[8]) ans = (ans + a[8] % mod * qpow(3, a[2] - 1) % mod) % mod;
if (a[9]) ans = (ans + a[9] % mod * qpow(3, a[2] - 1) % mod) % mod;
if (a[10]) ans = (ans + a[10] % mod * qpow(3, a[2] - 1) % mod) % mod;
if (a[11]) ans = (ans + a[11] % mod * qpow(3, a[2] - 2) % mod) % mod;
if (a[12]) ans = (ans + a[12] % mod * qpow(3, a[2] - 2) % mod) % mod;
if (a[13]) ans = (ans + a[13] % mod * qpow(3, a[2] - 2) % mod) % mod;
if (a[14]) ans = (ans + a[14] % mod * qpow(3, a[2] - 3) % mod) % mod;
cout << ans;
return 0;
}
- 如何解决分布式系统中的跨时区问题[原理篇]
- 什么是区块链:块的结构
- Spring读书笔记——bean创建(下)
- 当区块链遇上传统行业 我们的生活和工作会改变吗?
- 如何设计开发好一个 HTTP API?
- [WCF权限控制]基于Windows用户组的授权方式[下篇]
- Spring读书笔记——bean解析
- 10个大数据误区,看看你中了几个?
- 从数据到代码——通过代码生成机制实现强类型编程[上篇]
- Spring读书笔记——bean加载
- Java8-初识Lambda
- 我的WCF之旅(5):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的重载(Overloading)
- WCF技术剖析之三十:一个很有用的WCF调用编程技巧[下篇]
- 谈谈WCF中的Data Contract(3):WCF Data Contract对Collection & Dictionary的支持
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- python实现简单名片管理系统
- PHP7创建COOKIE和销毁COOKIE的实例方法
- PHP实现新型冠状病毒疫情实时图的实例
- 深入浅析Python2.x和3.x版本的主要区别
- 用户态进程如何得到虚拟地址对应的物理地址?
- Linux中利用grep命令如何检索文件内容详解
- laravel框架学习笔记之组件化开发实现方法
- PHP7创建销毁session的实例方法
- Vim如何使用相对行号实现一切操作详解
- laravel 框架执行流程与原理简单分析
- 对python自动生成接口测试的示例讲解
- 解决pip install xxx报错SyntaxError: invalid syntax的问题
- PHP如何使用JWT做Api接口身份认证的实现
- 解决python3 Pycharm上连接数据库时报错的问题
- php把文件设置为插件的技巧方法