Codeforces Round 940 (Div. 2) and CodeCraft-23 (A~E 最喜欢打表的一集)

A - Stickogon 

        题意:给若干根长度不一的棍子,求能够组成的正多边形的最大个数。要求每个边只能用一个棍子。

        思路:贪心,3个长度一样的棍子凑成一个正多边形,然后统计个数

void solve() 
{cin >> n;map<int ,int >mp;for(int i = 0 ; i < n ; i ++){int x;cin >> x;mp[x] ++;}	int ans = 0;for(auto it : mp){ans += it.second / 3;}cout << ans << endl;
}            

B - A BIT of a Construction 

题意:

思路:要求或运算1的个数最大,因此尽可能考虑每一位上的1都只出现一次,考虑位数越低的1代价越低,因此位数从小到大构造1,直到无法构造为止。

        

void solve() 
{cin >> n >> m;LL st = 1;if(n == 1){cout << m << endl;}else{int st = 1;while(st * 2 + 1 <= m){st = st * 2 + 1;}cout << st << " " << m - st <<" ";for(int i = 2 ; i< n ; i ++){cout << 0 <<" ";}cout << endl;}
}

C - How Does the Rook Move? 

         题意:

        思路:当一个n*n的棋盘上放上一颗棋子时,整行整列的棋盘都无法被访问,因此棋盘退化为一个空的(n-1)*(n-1)的棋盘 。因此可以想到用dp来求出n*n的空棋盘能有多少种放法。

        由于电脑会跟着你下,那么当你下了(r,c)(r\neq c)时,电脑也会跟着下一步,整个棋盘退化为(n-2)*(n-2)的空棋盘,当你下了(r,c)(r= c)时,电脑不会下,棋盘退化为(n-1)*(n-1)的空棋盘。接下来只需要考虑怎么从dp[i]求出dp[i + 1]即可。我们假设第一行第一列是新增的,然后考虑第一步放在每个地方的情况,发现下在(1,1)的情况下会退化为i*i的棋盘,其余情况都是(i - 1)*(i - 1)的棋盘,因此状态转移方程有dp[i] = dp[i - 1] + (i + i - 2) * dp[i - 2] , 然后再根据输出判断出k步以后退化为多大的棋盘即可。

        

// Problem: C. How Does the Rook Move?
// Contest: Codeforces - Codeforces Round 940 (Div. 2) and CodeCraft-23
// URL: https://codeforces.com/contest/1957/problem/C
// Memory Limit: 256 MB
// Time Limit: 2000 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define x first
#define y second 
#define endl '\n'
#define int long long
const LL maxn = 4e05+7;
const LL N = 5e05+10;
const LL mod = 1e09+7;
const int inf = 0x3f3f3f3f;
const LL llinf = 5e18;
typedef pair<int,int>pl;
priority_queue<LL , vector<LL>, greater<LL> >mi;//小根堆
priority_queue<LL> ma;//大根堆
LL gcd(LL a, LL b){return b > 0 ? gcd(b , a % b) : a;
}LL lcm(LL a , LL b){return a / gcd(a , b) * b;
}
int n , m;
vector<int>a(N , 0);
void init(int n){for(int i = 0 ; i <= n ; i ++){a[i] = 0;}
}
vector<int>dp(N , 0);
void solve() 
{cin >> n >> m;for(int i = 0 ; i < m ; i ++){int x , y;cin >> x >> y;if(x == y){n -= 1;}else{n -= 2;}}cout << dp[n] << endl;
}            
signed main() 
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout.precision(10);int t=1;dp[0] = 1;dp[1] = 1 , dp[2] = 3;for(int i = 3 ; i < N ; i ++){dp[i] = 1 * dp[i - 1] + (i - 1) * 2 * dp[i - 2];dp[i] %= mod;}cin>>t;while(t--){solve();}return 0;
}

D - A BIT of an Inequality 

        

思路:为了方便表示,我们记a_{i , r} = a_{l} \oplus a_{l + 1} \oplus....\oplus a_{r}。如果我们钦定 a_{y} , 所求数即需要满足 a_{l , r} \oplus a_{y} > a_{l , r}。再根据异或运算的性质:不进位加法,可以发现:假设a_{y}的最高位为第x位,a_{l , r}的第x位是0的话,就能够满足题意,因此我们需要统计的是:以a_{y - 1}为结尾的区间的各个位的奇偶数情况以及a_{y +1}开头的区间的各个位的奇偶数情况,然后再将两者结合即可。

        

void solve() 
{cin >> n;for(int i = 1 ; i <= n ; i ++){cin >> a[i];}int dp1[n + 5][32][2];//i结尾的int dp2[n + 5][32][2];//i开头的memset(dp1 , 0 , sizeof dp1);memset(dp2 , 0 , sizeof dp2);for(int i = 1 ; i <= n ; i ++){for(int j = 0 ; j < 32 ; j ++){if((a[i] >> j) & 1){dp1[i][j][1] = dp1[i - 1][j][0] + 1;dp1[i][j][0] = dp1[i - 1][j][1];}else{dp1[i][j][1] = dp1[i - 1][j][1];dp1[i][j][0] = dp1[i - 1][j][0] + 1;}}}for(int i = n ; i >= 1 ; i --){for(int j = 0 ; j < 32 ; j ++){if((a[i] >> j) & 1){dp2[i][j][1] = dp2[i + 1][j][0] + 1;dp2[i][j][0] = dp2[i + 1][j][1];}else{dp2[i][j][1] = dp2[i + 1][j][1];dp2[i][j][0] = dp2[i + 1][j][0] + 1;}}}	LL ans = 0;for(int i = 1 ; i <= n ; i ++){//ai为中间值for(int j = 32 ; j >= 0 ; j --){if((a[i] >> j) & 1){//左侧+右侧=奇数ans += dp1[i - 1][j][0] * dp2[i + 1][j][1];ans += dp1[i - 1][j][1] * dp2[i + 1][j][0];ans += dp1[i - 1][j][1];ans += dp2[i + 1][j][1];break;}}}	cout << ans << endl;
}            

E - Carousel of Combinations

        题意:

        思路:若不取模,可以发现C(i,j) = c(i , j) * f[j] / j ,其中 c(i , j)从i个里面选出j个数的排列,f(j)表示j个数的组合,然而由于可以旋转匹配,所以j个序列合为1个序列。

        然后打表发现:当j为素数时,C(i , j)的规律:随着i的增大依次为j(j -1) \ mod\ j , j(j -2) \ mod\ j ..当 j 为4时较为特殊 , 可自行打表。然后就是一个简单的求和了。

        

// Problem: E. Carousel of Combinations
// Contest: Codeforces - Codeforces Round 940 (Div. 2) and CodeCraft-23
// URL: https://codeforces.com/contest/1957/problem/E
// Memory Limit: 256 MB
// Time Limit: 2500 ms
// 
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define pb push_back
#define x first
#define y second 
#define endl '\n'
#define int long long
const LL maxn = 4e05+7;
const LL N = 1e06+10;
const LL mod = 1e09+7;
const int inf = 0x3f3f3f3f;
const LL llinf = 5e18;
typedef pair<int,int>pl;
priority_queue<LL , vector<LL>, greater<LL> >mi;//小根堆
priority_queue<LL> ma;//大根堆
LL gcd(LL a, LL b){return b > 0 ? gcd(b , a % b) : a;
}LL lcm(LL a , LL b){return a / gcd(a , b) * b;
}
int n , m;
vector<int>a(N , 0);
void init(int n){for(int i = 0 ; i <= n ; i ++){a[i] = 0;}
}
vector<LL>prime;//存储素数
bool vis[N+5];
void su() 
{for(int i=2;i<=N;i++){if(!vis[i])prime.pb(i);for(int j=0;j < prime.size() && prime[j] * i <= N;j ++){vis[prime[j]*i]=1;if(i % prime[j]==0)break;}}
} 
LL qpow(LL a , LL b)//快速幂
{LL sum=1;while(b){if(b&1){sum=sum*a%mod;}a=a*a%mod;b>>=1;}return sum;
}
LL f[N] , g[N];
void init(){f[0] = g[0] = 1;for(int i=1;i < N; i ++){f[i]= f[i-1] * i % mod; //计算i的阶乘g[i] = g[i-1] * qpow(i , mod - 2) % mod; //计算i的乘法逆元 qpow为快速幂}
}
LL get(int n,int m ){ //得到C(n,m)的组合数答案if(n < m)return 0;elsereturn f[n] * g[m] % mod * g[n-m] % mod;
}
LL cnt(int x , int y){LL res = get(x , y) * f[y - 1];res %= y;return res;
}
vector<int>add(N + 5 , 0);
vector<int>dp(N + 5 , 0);
void solve() 
{for(auto it : prime){int now = it - 1;add[it] += now;for(int st = it * 2 ; st < N ; st += it){if(now > 0){add[st]--;now--;}else{now = it - 1;add[st] += it - 1;}}}int now = 2;add[4] += 2;for(int st = 4 * 2 ; st < N ; st += 4){if(now > 0){add[st] -= 2;now -= 2;}else{now = 2;add[st] += 2;}}int cnt = 0;dp[0] = 0;for(int i = 1 ; i < N ; i ++){cnt += add[i];dp[i] = dp[i - 1] + cnt;dp[i] %= mod;}
}          
void win(){int n;cin >> n;cout << dp[n] << endl;
}  
signed main() 
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cout.precision(10);su();int t=1;init();cin>>t;solve();while(t--){win();}return 0;
}

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

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

相关文章

【存储】cosbench对象存储测试工具

目录 简略说明 原理 用法 详细说明 简介 用法 一 安装 二 简单验证 三 编写配置文件 四 提交配置文件下IO 五 测试结果查看 结果概览 查看详情 每秒钟的io情况查看 工作负载配置 参数配置&#xff08;controller和driver&#xff09; 查看错误的方法和错误记录 查看错误的方法 …

spring boot3单模块项目工程搭建-上(个人开发模板)

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《spring boot实战》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途 目录 写在前面 上文衔接 常规目录创建 common目录 exception.handle目录 result.handle目录 controller目录 service…

基本的SELECT语句及DESC显示表结构

1. SELECT ... 例 : 2. SELECT ... FROM ... (1). SELECT ... : 标识选择哪些列. (2). FROM ... : 标识从哪个表中选取. (3). *通配符 : 选择表中全部列. 例 : 3.列的别名 (1). 空一格. (2). 在列和别名间加入关键字AS. (3). 别名可以使用双引号&#xff0c;以便于在…

二、python+前端 实现MinIO分片上传

python前端 实现MinIO分片上传 一、背景二、流程图三、代码 一、背景 问题一&#xff1a;前端 -> 后端 ->对象存储 的上传流程&#xff0c;耗费带宽。 解决方案&#xff1a;上传流程需要转化为 前端 -> 对象存储&#xff0c;节省上传带宽 问题二&#xff1a;如果使用…

使用spring boot集成shardingsphere分库分表简易测试

根据如下pom整上一个spring-boot项目&#xff0c;spring-boot版本用2.3.5&#xff0c;shardingsphere用5.1.1。 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://ww…

学习微服务nacos遇到的问题

在学习微服务注册到nacos的时候&#xff0c;所有过程都正确了&#xff0c;注册也成功了&#xff0c;但是访问不了调用的地址报错出现问题。 一、引入依赖 在cloud-demo父工程的pom文件中的<dependencyManagement>中引入SpringCloudAlibaba的依赖 1、springboot <pa…

数据结构 - 顺序表

一. 线性表的概念 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构&#xff0c;也就说是连续的…

回归预测 | Matlab实现BO-RF贝叶斯优化随机森林多变量回归预测

回归预测 | Matlab实现BO-RF贝叶斯优化随机森林多变量回归预测 目录 回归预测 | Matlab实现BO-RF贝叶斯优化随机森林多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现BO-RF贝叶斯优化随机森林多变量回归预测&#xff1b; 2.输入7个特征&#xf…

【Linux】学习记录_14_线程

14 线程 14.1 线程和进程 进程是资源管理的最小单位&#xff0c;每个进程都有数据段、代码段和堆栈段&#xff0c;进程切换时都有复杂的上下文切换等动作。进程切换上下文时&#xff0c; 需要重新映射虚拟地址空间、进出OS内核、寄存器切换&#xff0c;还会干扰处理器的缓存机…

探索NDWI:归一化水体指数的意义与应用

随着遥感技术的不断发展&#xff0c;NDWI&#xff08;Normalized Difference Water Index&#xff0c;归一化水体指数&#xff09;作为一种重要的植被指数&#xff0c;被广泛应用于水资源管理、湿地监测和环境保护等领域。本文将介绍NDWI的意义、计算方法以及在不同领域的应用。…

kettle从入门到精通 第五十三课 ETL之kettle MQTT/RabbitMQ consumer实战

1、上一节课我们学习了MQTT producer 生产者步骤&#xff0c;MQTT consumer消费者步骤。该步骤可以从支持MRQTT协议的中间件获取数据&#xff0c;该步骤和kafka consumer 一样可以处理实时数据交互&#xff0c;如下图所示&#xff1a; 2、双击步骤打开MQTT consumer 配置窗口&a…

golang学习笔记(net/http库基本使用)

关于net/http库 我们先看看标准库net/http如何处理一个请求。 import ("fmt""log""net/http" )var count 0func main() {http.HandleFunc("/", handler)http.HandleFunc("/count", counter)log.Fatal(http.ListenAndServ…