如果最大值比剩余两个加起来的总和+1还大,就是NO,否则是YES

#include<bits/stdc++.h>
using namespace std;
int main(){
int T;
cin>>T;
while(T--){
vector<int> a(3);
for(int i=0;i<3;i++)
cin>>a[i];
sort(a.begin(),a.end());
if(a[2]>a[0]+a[1]+1) puts("No");
else puts("Yes");
}
}

  

先不要去考虑跳过的问题,就让他一直向前走,并且一直减,并且记录途中遇到的礼物最大值,这样有两种情况

case1:直接走完,答案就是0

case2:停在某一个位置,我们一定会选择所有可能跳过的礼物中最大的,因为必须要放弃一个,肯定要放弃其中最大的

#include<bits/stdc++.h>

using namespace std;

int main(){
int T;
scanf("%d",&T);
while(T--){
int n,sum;
scanf("%d%d",&n,&sum);
vector<int> a(n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
int pos=0;
int i;
for(i=0;i<n;i++){
if(sum>=a[i]) {
sum-=a[i];
}
else {
if(a[pos]<a[i]) pos=i;
break;
}
if(a[pos]<a[i]) pos=i;
}
if(i==n) printf("0\n");
else{
printf("%d\n",pos+1);
}
}
}

  

对于被拿出来的,不需要去管他究竟是按什么放回去的,但是可以肯定的是必然有一种方案是最优的,使得如果不取更深的礼物的话花费一定是1

#include<bits/stdc++.h>

using namespace std;

const int maxn=1e5+5;

int a[maxn],b[maxn],pos[maxn];

int main(){
int T;
scanf("%d",&T);
while(T--){
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
scanf("%d",&a[i]),pos[a[i]]=n-i;
for(int i=0;i<m;i++)
scanf("%d",&b[i]);
int in=n,out=0;
long long ans=0;
for(int i=0;i<m;i++){
if(pos[b[i]]<=in) {
ans+=2*(in-pos[b[i]]+out)+1;
in=pos[b[i]]-1;
out=n-i-1-in;
}
else ans++,out--;
}
printf("%lld\n",ans);
}
}

  

遍历每一个礼物,很容易算出每一个礼物被选中的概率,然后考虑有多少个人需要这个礼物,假设为cnt,这个可以预处理出来,选中这些人的概率为cnt/n

两个相乘即可,所有的情况加起来即可

#include<bits/stdc++.h>

using namespace std;

const int maxn=1e6+5;
const int P=998244353; int add(int a,int b){
int ans=a+b;
if(ans>=P) ans-=P;
return ans;
} int mul(int a,int b){
return 1ll*a*b%P;
} int qpow(int a,int n){
int ans=1;
for(;n;n>>=1,a=1ll*a*a%P)
if(n&1) ans=1ll*ans*a%P;
return ans;
} vector<int> a[maxn]; int inv[maxn]; int main(){
int n;
scanf("%d",&n);
vector<int> cnt(maxn,0);
for(int i=0;i<n;i++){
int x;
scanf("%d",&x);
a[i].resize(x);
for(int j=0;j<x;j++)
scanf("%d",&a[i][j]);
for(int j=0;j<x;j++)
cnt[a[i][j]]++;
}
for(int i=0;i<maxn;i++)
inv[i]=qpow(i,P-2);
int ans=0;
for(int i=0;i<n;i++){
for(int j=0;j<a[i].size();j++){
ans=add(ans,mul(mul(inv[n],inv[a[i].size()]),mul(inv[n],cnt[a[i][j]])));
}
}
printf("%d\n",ans);
}

  

Educational Codeforces Round 79 (Rated for Div. 2) Finished (A-D)的更多相关文章

  1. Educational Codeforces Round 81 (Rated for Div. 2)E(线段树)

    预处理把左集划分为大小为1~i-1时,把全部元素都移动到右集的代价,记作sum[i]. 然后枚举终态时左集的大小,更新把元素i 留在/移动到 左集的代价. 树状数组/线段树处理区间修改/区间查询 #d ...

  2. Educational Codeforces Round 77 (Rated for Div. 2)D(二分+贪心)

    这题二分下界是0,所以二分写法和以往略有不同,注意考虑所有区间,并且不要死循环... #define HAVE_STRUCT_TIMESPEC #include<bits/stdc++.h> ...

  3. Educational Codeforces Round 79 (Rated for Div. 2) - D. Santa's Bot(数论)

    题意:有$n$个孩子,第$i$个孩子有$k[i]$件想要的礼物,第$j$个礼物为$a[i][j]$,现在随机挑一个孩子,从他想要的礼物里面随机挑一个,然后送给另一个孩子$($这个孩子可以和第一个孩子是 ...

  4. CF codeforces A. New Year Garland【Educational Codeforces Round 79 (Rated for Div. 2)】

    A. New Year Garland time limit per test 1 second memory limit per test 256 megabytes input standard ...

  5. Educational Codeforces Round 60 (Rated for Div. 2)D(思维,DP,快速幂)

    #include <bits/stdc++.h>using namespace std;const long long mod = 1e9+7;unordered_map<long ...

  6. Educational Codeforces Round 60 (Rated for Div. 2)E(思维,哈希,字符串,交互)

    #include <bits/stdc++.h>using namespace std;int main(){ string t; cin>>t; int n=t.size() ...

  7. Educational Codeforces Round 61 (Rated for Div. 2)F(区间DP,思维,枚举)

    #include<bits/stdc++.h>typedef long long ll;const int inf=0x3f3f3f3f;using namespace std;char ...

  8. Educational Codeforces Round 61 (Rated for Div. 2)D(二分,模拟,思维)

    #include<bits/stdc++.h>using namespace std;typedef long long ll;int n,k;ll a[200007],b[200007] ...

  9. Educational Codeforces Round 57 (Rated for Div. 2)D(动态规划)

    #include<bits/stdc++.h>using namespace std;char s[100007];long long a[100007];long long dp[100 ...

随机推荐

  1. HTML5与HTML4的区别-----新增的常用标签

    做前端工程师这么长时间了, 对HTML5的一些标签的用法还不是很熟悉.这篇随笔算是对学过的知识的梳理.常言道,温故而知新  ~哈哈.里面有不正确的地方还望各位大牛们指正,评论. 在做网页时习惯把网页分 ...

  2. 使用Vue.prototype在vue中注册和使用全局变量

    在main.js中添加一个变量到Vue.prototype Vue.prototype.$appName = 'My App' 这样 $appName 就在所有的 Vue 实例中可用了,甚至在实例被创 ...

  3. java循环示例

    用while循环计算100之内的奇数和偶数和 public class Test{ public static void main(String[] args){ int sum=0; int num ...

  4. 并发编程之线程池ThreadPoolExecutor

    前言 在我们平时自己写线程的测试demo时,一般都是用new Thread的方式来创建线程.但是,我们知道创建线程对象,就会在内存中开辟空间,而线程中的任务执行完毕之后,就会销毁. 单个线程的话还好, ...

  5. 一篇文章带你搞定 ElasticSearch 术语

    这篇文章主要介绍 ElasticSearch 的基本概念,学习文档.索引.集群.节点.分片等概念,同时会将 ElasticSearch 和关系型数据库做简单的类比,还会简单介绍 REST API 的使 ...

  6. kms在线激活windows和office

    本激活,只适用vol版本的windows系统和office 激活windows在windows中使用管理员方式打开cmd命令输入slmgr /skms chongking.com切换kms服务器地址为 ...

  7. css3新增边框、阴影、边框、背景、文本、字体

    css3和css有什么区别?简单来讲css3是css(层叠样式表)技术的升级版本,css3新特征有很多,例如圆角效果.图形化边界.块阴影与文字阴影.使用RGBA实现透明效果.渐变效果.使用@Font- ...

  8. App自动化测试环境搭建

    只做记录和注意点,详细内容不做解释 环境:win+appium+夜神模拟器+python 需要用到的工具: 1.java JDK 2. node.js 3. Android SDK 4.Appium- ...

  9. 在pycharm中如何设置代码对齐竖线

    方法:启动pycharm软件,打开一个文件,点 file 菜单,选择 settings,在弹出的setting菜单中依次选择editor-->general-->appearance,然后 ...

  10. System.Text.Json 自定义Converter实现时间转换

    Newtonsoft.Json与System.Text.Json区别 在 Newtonsoft.Json中可以使用例如 .AddJsonOptions(options => { options. ...