Educational Codeforces Round 138 (Rated for Div. 2)-赛后总结
Dashboard - Educational Codeforces Round 138 (Rated for Div. 2) - Codeforces
总结一个教训就是不要心急,特别是对于一些题目,发现越写越复杂的时候,一定及时转换思路
Problem - A - Codeforces
有意思的一道题,由于必须移动,那么枚举移动位置,移动位置必须空白,条件是,同行同列没有冲突或者仅有一个冲突(把该冲突点放在这个移动位置)
#include <bits/stdc++.h>
using namespace std;typedef long long int ll;int a[100][100], x[100],y[100];
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++){a[i][j]=0;}}for(int i=1;i<=m;i++){cin>>x[i]>>y[i];a[x[i]][y[i]]=1;}int flag=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i][j]==0){int cnt=0;for(int ii=1;ii<=n;ii++){if(a[ii][j])cnt++;}for(int jj=1;jj<=m;jj++){if(a[i][jj])cnt++;}if(cnt<=1){flag=1;break;}}}}if(flag){cout<<"YES"<<endl;}else{cout<<"NO"<<endl;}}return 0;
}
Problem - B - Codeforces
B题真的是抽风了,本以为没开LL,开完又WA,白WA两次。实际上是贪心策略跑偏了。应该仔细研究模型,可见从一边开始进行消灭能使代价最小。这样每个人只能影响一次。减去最大值就行
#include <bits/stdc++.h>
using namespace std;typedef long long int ll;int main ()
{int t;cin>>t;while(t--){int n;cin>>n;ll ans=0,x,y;for(int i=1; i<=n; i++){cin>>x;ans+=x;}ll maxx=0;for(int i=1; i<=n; i++){cin>>y;ans+=y;maxx=max(maxx,y);}cout<<ans-maxx<<endl;}return 0;
}
Problem - C - Codeforces
C题算是一个小贪心与模拟
A同学想赢就应该保证每次都有删的数,而我们已知,每次删的数是必须减少的。那么就容易推知,每次都删最大的。
B同学为了让自己赢,就必须让A同学能删的越来越少,也就是把当前最小的给“破坏掉”
这样来看,n很小,k超过n的时候易知没有意义。故我们倒叙暴力枚举k,第一个答案就是我们要的。
#include <bits/stdc++.h>
using namespace std;typedef long long int ll;int a[110],n;
int temp[110];
bool check(int k)
{if(!k)return 1;for(int i=1; i<=n; i++){temp[i]=a[i];}int now=1;while(now<=k){int flag=0;int pos=0,maxx=0;for(int i=1; i<=n; i++){if(temp[i]==-1)continue;if(temp[i]<=k-now+1&&maxx<temp[i]){pos=i;maxx=temp[i];flag=1;}}if(flag==0){return 0;}temp[pos]=-1;pos=0;int minn=1e9;for(int i=1; i<=n; i++){if(temp[i]==-1)continue;if(temp[i]<minn){minn=temp[i];pos=i;}}temp[pos]+=k-now+1;now++;}return 1;}
int main ()
{int t;cin>>t;while(t--){cin>>n;for(int i=1; i<=n; i++){cin>>a[i];}for(int k=100; k>=0; k--){if(check(k)){cout<<k<<endl;break;}}}return 0;
}
Problem - D - Codeforces
D的突破点在于他给定的数列定义,要求拥有两个所谓的“序列”。前面很多话都是把人绕远的,实际上突破点就在这个不起眼的地方。拥有大于等于两个所谓的序列是合法的,言外之意就是一个是不合法的。有可能是0个吗,不可能,从头一直删一定可以。
这样就暗示我们,我们要排除的序列一定是只能从头往后删的,也就是说,我们位置i上面的数字,无论前面怎么缩短,始终找不到一个能使之gcd为1的位置(该位置小于等于i,通过消灭开头得到),既然如此,我们这样想,这个数字与前面的合数gcd不是1,与前面的质数gcd也不是1,特鄙视与质数gcd也不是1,那么其必定是前面所有质数的最小公倍数的若干倍,也就是前面所有质数的乘积!!那么前面的合数呢?合数就是两个质数的积!!,质数满足合数一定满足!
所以我们只需要预处理出n范围内全部质数,求出质数前缀积,每个位置也就有了方案数,乘法原理搞一搞,排斥一下即可
代码请在CF C++20版本下提交
#include <bits/stdc++.h>
# define mod 998244353
using namespace std;typedef __int128 ll;ll n,m;
ll dp[300000+10];int prime[300000+10],not_prime[300000+10],len;void init()
{for(int i=2;i<=300000;i++){if(!not_prime[i]){len++;prime[len]=i;}for(int j=1;j<=len&&prime[j]*i<=300000;j++){not_prime[i*prime[j]]=1;if(i%prime[j]==0)break;}}
}
ll x[300000+10];__int128 read(){__int128 x=0,f=1;char ch=getchar();while(!isdigit(ch)&&ch!='-')ch=getchar();if(ch=='-')f=-1,ch=getchar();while(isdigit(ch))x=x*10+ch-'0',ch=getchar();return f*x;
}
void print(__int128 x){if(x<0)putchar('-'),x=-x;if(x>9)print(x/10);putchar(x%10+'0');
}
int main()
{n=read();m=read();init();ll sum=0,now=1;ll tempm=m%mod;for(int i=1;i<=n;i++){now=(now*m)%mod;now%=mod;sum=(sum+now)%mod;}x[0]=1;x[1]=1;for(int i=1;i<=n;i++){if(!not_prime[i]){x[i]=x[i-1]*i;}else{x[i]=x[i-1];}}ll temp=1;for(int i=1;i<=n;i++){dp[i]=m/x[i];temp*=dp[i];temp%=mod;sum=((sum-temp)%mod+mod)%mod;}print(sum);return 0;
}
Educational Codeforces Round 138 (Rated for Div. 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)= ...
- Educational Codeforces Round 138 (Rated for Div. 2) A~D
比赛链接:Dashboard - Educational Codeforces Round 138 (Rated for Div. 2) - Codeforces 目录 A. Cowardly Roo ...
- 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 ...
- Educational Codeforces Round 138 (Rated for Div. 2)
文章目录 一.A. Cowardly Rooks 二.B - Death's Blessing 三.C - Number Game 四.D - Counting Arrays 四.E - Cactus ...
- Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...
- Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...
- Educational Codeforces Round 37 (Rated for Div. 2) 1
Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...
- 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这个时候两 ...
- 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, ...
最新文章
- 朴素贝叶斯分类器详解及中文文本舆情分析(附代码实践)
- 用行为级描述方式实现一个加法器电路(基于ISE的设计)(2输入1位全加器电路)
- android 重绘如何能不闪一下屏幕_浏览器渲染机制——重绘重排
- 转:性能测试中的性能测试指标与用户体验分析
- HotSpot 自动内存管理笔记与实战
- 中怎样载入选区_【平面设计教学】Photoshop基本教学-第3章 选区与填色
- 牛客网专题 概率dp
- linux下添加apt-get命令,Ubuntu Linux系统下apt-get命令整理
- android8.0更新手机,安卓微信8.0.6正式更新:可发1G大文件、表情互动等多项更新!...
- 引用和可触及性的强度
- 快速排序——三种划分方式
- JS键盘KEYCODE值参考
- TensorFlow实战minist数据集 softmax回归分类(一)
- pycharm汉化包使用后无法打开设置选项问题
- 工程造价步骤_史上最全造价工作流程,全了
- 雅虎搜索架构_雅虎! 想要推动您的网站搜索
- 探索 TDengine在《图码联侦》项目中的应用可行性及实践研究(new)
- nginx多域名重定向到不同的二级域名
- 如何涉足游戏业 樊一鹏
- 数据中台应用实战-数据中台建设四步方法论:采、存、通、用
热门文章
- centos7.2 搭建BugFree
- ElementUI自定义组件之地区三级联动
- matlab 矿相分析,相平面分析matlab程序
- windows安装 node-sass sass-loader
- 基于ADAU1761-ADC与DSP的接口链路设计
- stm32f103——串口UART
- php维语,关于维语书写 - 维吾尔语 | Uyghur | ئۇيغۇرچە - 声同小语种论坛 - Powered by phpwind...
- inotifywait+rsync同步
- Android 学习(四)——Android Studio 页面跳转
- 现场总线快速讲解之一