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)-赛后总结相关推荐

  1. 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)= ...

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

    比赛链接:Dashboard - Educational Codeforces Round 138 (Rated for Div. 2) - Codeforces 目录 A. Cowardly Roo ...

  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. 朴素贝叶斯分类器详解及中文文本舆情分析(附代码实践)
  2. 用行为级描述方式实现一个加法器电路(基于ISE的设计)(2输入1位全加器电路)
  3. android 重绘如何能不闪一下屏幕_浏览器渲染机制——重绘重排
  4. 转:性能测试中的性能测试指标与用户体验分析
  5. HotSpot 自动内存管理笔记与实战
  6. 中怎样载入选区_【平面设计教学】Photoshop基本教学-第3章 选区与填色
  7. 牛客网专题 概率dp
  8. linux下添加apt-get命令,Ubuntu Linux系统下apt-get命令整理
  9. android8.0更新手机,安卓微信8.0.6正式更新:可发1G大文件、表情互动等多项更新!...
  10. 引用和可触及性的强度
  11. 快速排序——三种划分方式
  12. JS键盘KEYCODE值参考
  13. TensorFlow实战minist数据集 softmax回归分类(一)
  14. pycharm汉化包使用后无法打开设置选项问题
  15. 工程造价步骤_史上最全造价工作流程,全了
  16. 雅虎搜索架构_雅虎! 想要推动您的网站搜索
  17. 探索 TDengine在《图码联侦》项目中的应用可行性及实践研究(new)
  18. nginx多域名重定向到不同的二级域名
  19. 如何涉足游戏业 樊一鹏
  20. 数据中台应用实战-数据中台建设四步方法论:采、存、通、用

热门文章

  1. centos7.2 搭建BugFree
  2. ElementUI自定义组件之地区三级联动
  3. matlab 矿相分析,相平面分析matlab程序
  4. windows安装 node-sass sass-loader
  5. 基于ADAU1761-ADC与DSP的接口链路设计
  6. stm32f103——串口UART
  7. php维语,关于维语书写 - 维吾尔语 | Uyghur | ئۇيغۇرچە - 声同小语种论坛 - Powered by phpwind...
  8. inotifywait+rsync同步
  9. Android 学习(四)——Android Studio 页面跳转
  10. 现场总线快速讲解之一