比赛链接:Dashboard - Educational Codeforces Round 138 (Rated for Div. 2) - Codeforces

目录

A. Cowardly Rooks

B. Death's Blessing

C. Number Game

D. Counting Arrays


A. Cowardly Rooks

题意:在n*n的棋盘中存在一些棋子,并且告诉你在同一行或者同一列不会出现两个棋子,请问能否将其中一个棋子换到另一个位置同样满足同一行或者同一列不会出现两个棋子。

思路:判断n>m即可,因为n*n的棋盘中有n个位置可以满足同一行或者同一列不会出现两个棋子的情况。

#define _CRT_SECURE_NO_WARNINGS 1
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include<map>
#include<queue>
#include<stack>
#include<set>
#include<math.h>
#define FOR(a,b) for(int i=a;i<=b;i++)
#define ROF(a,b) for(int i=a;i>=b;i--)
#define FORj(a,b) for(int j=a;j<=b;j++)
#define ROFj(a,b) for(int j=a;j>=b;j--)
#define FORk(a,b) for(int k=a;k<=b;k++)
#define ROFk(a,b) for(int k=a;k>=b;k--)
#define mem(i,a) memset(i,a,sizeof(i))
#define ll long long
#define inf 0x3f3f3f3f
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define int long long
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
#define pi acos(-1.0)
#define endl '\n'
using namespace std;
const int maxn = 2e5 + 5;
void solve() {int n, m;cin >> n >> m;FOR(1, m) {int x, y;cin >> x >> y;}if (n >m)yes;else no;
}
signed main() {cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int _;cin >> _;while (_--)solve();return 0;
}

B. Death's Blessing

题意: 有n个怪物,怪物的属性有血量a[i]和死亡咒语b[i],当第i个怪物死亡时,它的邻居会增加b[i]的血量上限,杀死一个怪物的时间等于怪物的血量,请计算最快杀死所有怪物的时间。

思路:我们一定是在这行怪物的最左边或者最右边删除怪物,因为若不在最左边或者最右边删除怪物,那么怪物a[i]对应的b[i]会对总时间贡献两次b[i]的值,而在最左边或者最右边删除怪物,除了在最后删除的怪物,它们对总时间的贡献只有一次b[i](因为它们的左边或者右边没有怪物),并且最后一次删除怪物a[i]的b[i]是没有贡献的(因为它的左边和右边没有怪物),所以我们挑选b数组里最大的b[i]来使他没有贡献,同时其它的a[i]和b[i]提供一次贡献。

#define _CRT_SECURE_NO_WARNINGS 1
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include<map>
#include<queue>
#include<stack>
#include<set>
#include<math.h>
#define FOR(a,b) for(int i=a;i<=b;i++)
#define ROF(a,b) for(int i=a;i>=b;i--)
#define FORj(a,b) for(int j=a;j<=b;j++)
#define ROFj(a,b) for(int j=a;j>=b;j--)
#define FORk(a,b) for(int k=a;k<=b;k++)
#define ROFk(a,b) for(int k=a;k>=b;k--)
#define mem(i,a) memset(i,a,sizeof(i))
#define ll long long
#define inf 0x3f3f3f3f
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define int long long
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
#define pi acos(-1.0)
#define endl '\n'
using namespace std;
const int maxn = 2e5 + 5;
int a[maxn];
void solve() {int sum=0,x,maxx=-1,n;cin>>n;FOR(1,n){cin>>x;sum+=x;}FOR(1,n){cin>>x;sum+=x;if(x>maxx)maxx=x;}cout<<sum-maxx<<endl;
}
signed main() {cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int _;cin >> _;while (_--)solve();return 0;
}

C. Number Game

题意: 给定一个长度为n的整数数组a, Alice和Bob玩游戏.

对于一个k, 游戏进行k轮, 第i轮,Alice选择从a中删除一个小于等于k - i + 1的数, Bob选择一个数加上k - i + 1.

如果某一轮Alice没有数字可以选择,则Bob赢,否则Alice赢.

问使得Alice赢的最大的k是多少?

思路:若Alice想赢的几率尽可能大,她应该选择满足小于等于k - i + 1的最大的数,因为这个数现在能选但是游戏的下一轮中却不一定能选(因为k-i+1在不断变小),而比这个更小的数下一轮还是能选,所以我们将适用回合最小但满足条件的数先用了,避免下一轮这个数不能用就浪费了。而若Bob想赢的几率尽可能大,他应该将Alice拥有最小的数变大,这样使当第k轮,Alice需要小于等于k - i + 1的数时,最小数比k - i + 1大,这样Alice就输了,使得Bob赢面更大。

因为a[i]的范围为1~100,所以直接模拟即可。

#define _CRT_SECURE_NO_WARNINGS 1
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include<map>
#include<queue>
#include<stack>
#include<set>
#include<math.h>
#define FOR(a,b) for(int i=a;i<=b;i++)
#define ROF(a,b) for(int i=a;i>=b;i--)
#define FORj(a,b) for(int j=a;j<=b;j++)
#define ROFj(a,b) for(int j=a;j>=b;j--)
#define FORk(a,b) for(int k=a;k<=b;k++)
#define ROFk(a,b) for(int k=a;k>=b;k--)
#define mem(i,a) memset(i,a,sizeof(i))
#define ll long long
#define inf 0x3f3f3f3f
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define int long long
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
#define pi acos(-1.0)
#define endl '\n'
using namespace std;
const int maxn = 2e5 + 5;
int a[maxn],p[maxn];
void solve() {int n,ans=0,f;cin >> n;FOR(1, n)cin >> p[i];sort(p+ 1,p + n + 1);ROFk(n, 1) {for(int m=1; m<=n; m++)a[m]=p[m];FOR(1, k) {f = 0;ROFj(n, 1)if (a[j] <= k - i + 1&&a[j]) {a[j] = 0;f = 1;break;}if (f==0)break;FORj(1, n)if (a[i]){a[i] += k - i + 1;break;}sort(a + 1, a + n + 1);}if (f){ans = k;break;}}cout << ans << endl;
}
signed main() {cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);int _;cin >> _;while (_--)solve();return 0;
}

D. Counting Arrays

题意: 对于一个数组a, 如果gcd(a[i],i)=1,就可以删掉第i个元素,删除后,重新编号(后面的往前移).

对于一个数组b,如果第i次能够删除a中第b[i]个位置, 则称b为a的可删除序列.

一个a称为歧义数组,如果它存在至少两个可删除序列.

现在给定n,m, 要求满足以下条件的歧义数组a的数目

  • a的长度小于等于n
  • a[i] <= m

思路 :若直接求歧义数组的数目会很难,但若我们反过来想,先求出无歧义数组的数目,再将总数目减去无歧义数组的数目,来得出有歧义数组的数目,这样便会简单很多。而无歧义数组的操作只有一种情况:每次只能删除下标为1的数组元素。所以我们构造无歧义数组。对于无歧义数组,每一位上的a[i],在2~i的范围内,他们gcd(a[i],i)!=1,所以a[i]就是2~i中所有出现过的质子之积的倍数,原因是一个数的因子里必须要有另一个数的全部质因子,才能令它们有不为1的公因子。

#define _CRT_SECURE_NO_WARNINGS 1
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include<map>
#include<queue>
#include<stack>
#include<set>
#include<math.h>
#define FOR(a,b) for(int i=a;i<=b;i++)
#define ROF(a,b) for(int i=a;i>=b;i--)
#define FORj(a,b) for(int j=a;j<=b;j++)
#define ROFj(a,b) for(int j=a;j>=b;j--)
#define FORk(a,b) for(int k=a;k<=b;k++)
#define ROFk(a,b) for(int k=a;k>=b;k--)
#define mem(i,a) memset(i,a,sizeof(i))
#define ll long long
#define inf 0x3f3f3f3f
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define int long long
#define yes cout<<"YES"<<endl
#define no cout<<"NO"<<endl
#define pi acos(-1.0)
#define endl '\n'
using namespace std;
const int maxn = 2e6 + 5;
const int mod=998244353;
bool pd(int x) {FOR(2,sqrt(x)) {if(x%i==0)return 0;}return 1;
}
void solve() {int n,m,cmp=1,ans=0,tot=1,del=1;cin >> n >> m;FOR(1,n) {if(pd(i)) cmp=cmp*i;//目前质因子的乘积tot=tot*(m%mod)%mod;//全部方案数ans=(ans+tot)%mod;//答案加上全部方案数 del=del*((m/cmp)%mod)%mod;//无歧义数目组合数 ans=(ans-del)%mod;//总答案为该数组长度所有的排列组合数减去无歧义序列数目}cout<<ans<<endl;
}
signed main() {cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);solve();return 0;
}

Educational Codeforces Round 138 (Rated for Div. 2) A~D相关推荐

  1. Educational Codeforces Round 138 (Rated for Div. 2)-赛后总结

    Dashboard - Educational Codeforces Round 138 (Rated for Div. 2) - Codeforces 总结一个教训就是不要心急,特别是对于一些题目, ...

  2. Educational Codeforces Round 138 (Rated for Div. 2) D

    Educational Codeforces Round 138 (Rated for Div. 2) D. Counting Arrays 题意 给定长度为nnn的数组aaa,若gcd(ai,i)= ...

  3. Educational Codeforces Round 138 (Rated for Div. 2) C. Number Game 解题报告

    原题链接: Problem - C - Codeforces 题目描述: Alice and Bob are playing a game. They have an array of positiv ...

  4. Educational Codeforces Round 138 (Rated for Div. 2)

    文章目录 一.A. Cowardly Rooks 二.B - Death's Blessing 三.C - Number Game 四.D - Counting Arrays 四.E - Cactus ...

  5. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  6. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  7. Educational Codeforces Round 37 (Rated for Div. 2) 1

    Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...

  8. Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)

    Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...

  9. Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)

    Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...

最新文章

  1. MySQL 学习笔记(7)—— 游标
  2. Ajax基础讲解 1
  3. Android中级篇之百度地图SDK v3.5.0-百度地图定位[超详细图解定位基础]
  4. UITextField与UITextView的区别
  5. es的query及filter
  6. Java基础之多线程框架
  7. oracle导入初始数据死机,Sqoop导入Oracle数据至hive卡死在hive.HiveImport: Connecting to jdbc:hive2不执行...
  8. 多mysql实例下开发需要注意主从同步延迟
  9. PCA-SIFT原理及源码解析
  10. pandas 转换为文本类型_分享5个高效的pandas函数!
  11. VMware快照的工作原理
  12. wpf中内容包含在border中_Excel中创建包含注释的数学公式
  13. python 输出函数表达式——LaTeX数学公式
  14. Atitit  J2EE平台相关规范--39个  3.J2SE平台相关规范--42个
  15. withRouter有什么用?干嘛用?为啥要用它啊???一分钟理解!
  16. python you-get ffmpeg 下载哔哩哔哩视频
  17. 找到一个数组对象中 '某某某(属性名)'为 ['某某','某某']的值
  18. 射频day7:微带线;带状线
  19. Go学习——使用MongoDB
  20. [RK3288][Android6.0] Skia中的编解码小结

热门文章

  1. 利用m3u8下载ts并合并成一个完整视频
  2. LTE学习-信道均衡(MMSE)
  3. nonebot2聊天机器人插件3:计算器calculator
  4. c++ vector用法 入门必看 超详细
  5. 通用游戏服务器架构设计
  6. mysql函数返回表类型_如何从MySQL函数返回表?
  7. Mybatis学习笔记——Mybatis入门
  8. Carla设置同步模式
  9. 变量定义在for循环外面还是里面
  10. net代码生成器 mysql_旺财C# .NET代码生成器支持DTcms MySQL版生成了