A. There Are Two Types Of Burgers

题意:

给一些面包,鸡肉,牛肉,你可以做成鸡肉汉堡或者牛肉汉堡并卖掉

一个鸡肉汉堡需要两个面包和一个鸡肉,牛肉汉堡需要两个面包和一个牛肉

求能得到的最多的钱

直接贪心,哪个比较贵就选哪个做,剩下的材料再做另一个

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=2e5+;
int T,n,a,b,va,vb;
int main()
{
T=read();
while(T--)
{
n=read(),a=read(),b=read();
va=read(),vb=read();
if(va>vb) { int t=min(a,n/); printf("%d\n",va*t+vb*min(b,(n-t*)/)); }
else { int t=min(b,n/); printf("%d\n",vb*t+va*min(a,(n-t*)/)); }
}
return ;
}

B. Square Filling

题意:

给一个矩阵,求把一个空矩阵进行一些操作后能否得到给定矩阵

操作为选择一个 $2*2$ 的子矩阵并把里面的数全部变成 $1$,不要求最少次数,如果能则输出具体操作

显然枚举所有左上角看看能不能操作,能的话就尽量操作

最后判断一下是否得到给定矩阵就行了

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=;
int n,m,a[N][N],b[N][N];
vector <int> X,Y;
int main()
{
n=read(),m=read();
for(int i=;i<=n;i++)
for(int j=;j<=m;j++) a[i][j]=read();
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
if(a[i][j]&&a[i+][j]&&a[i][j+]&&a[i+][j+])
{
X.push_back(i); Y.push_back(j);
b[i][j]=b[i+][j]=b[i][j+]=b[i+][j+]=;
}
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++) if(a[i][j]&&!b[i][j]) { printf("-1\n"); return ; }
int ans=X.size(); printf("%d\n",ans);
for(int i=;i<ans;i++) printf("%d %d\n",X[i],Y[i]);
return ;
}

C. Gas Pipeline

题意:

铺水管,需要支柱和管道,各有价格,从 $0$ 铺到 $n$ 求最小花费

管道高度可以为 $1$ 或 $2$,高度为 $1$ 时只要一个支柱,为 $2$ 时要两个,管道高度变化的时候要格外一个管道

某些位置强制管道高度为 $2$

显然考虑 $dp$,设 $f[i][0/1]$ 当前铺到位置 $i$ ,高度为 $1,2$ 时的最小花费,转移显然,具体看代码,注意$long\ long$

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=2e5+;
const ll INF=1e18;
int T,n,va,vb;
char s[N];
ll f[N][];
int main()
{
T=read();
while(T--)
{
n=read(),va=read(),vb=read();
scanf("%s",s+);
f[][]=vb; f[][]=INF;//初始高度必须为1
for(int i=;i<=n;i++)
{
f[i][]=min(f[i-][]+va+vb,f[i-][]+va*+vb);
f[i][]=min(f[i-][]+va*+vb*,f[i-][]+va+vb*);
if(s[i]==''||s[i+]=='') f[i][]=INF;
}
printf("%lld\n",f[n][]);
}
return ;
}

D. Number Of Permutations

题意:

给一个数列 $a$ ,求合法排列方案数,不合法指 $a$ 的某一排列中某一维单调不减

见计数想容斥

先考虑一个很 $naive$ 的东西,给一个数列求单调不减的排列数,值同样的数也看成不同的

显然每个值互相之间不能交换,只能同一个值之间乱换,同一个值的贡献就是 这个值的所有数全排列,整个数列的答案就是每个值贡献乘法原理乘起来

回到原问题,数列变成两维了,感觉合法不好求,考虑求出不合法的方案

显然答案就是:全排列方案数 减 强制一个不合法方案数 加 两个都不合法方案数,然后就变成求单调不减的排列数了

两个都不合法的方案数也很好求,具体看代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=6e5+,mo=;
int n;
ll fac[N],ans;
struct dat{
int a,b;
}d[N];
inline bool cmp1(const dat &A,const dat &B) { return A.a!=B.a ? A.a<B.a : A.b<B.b; }
inline bool cmp2(const dat &A,const dat &B) { return A.b!=B.b ? A.b<B.b : A.a<B.a; }
int main()
{
n=read();
fac[]=; for(int i=;i<=n;i++) d[i].a=read(),d[i].b=read(),fac[i]=fac[i-]*i%mo;
ans=fac[n];//全排列
sort(d+,d+n+,cmp1); ll t=; int cnt=;
for(int i=;i<=n;i++)
{
if(i==||d[i].a==d[i-].a) cnt++;
else t=t*fac[cnt]%mo,cnt=;
}
t=t*fac[cnt]%mo;
ans-=t;//第一维不合法
sort(d+,d+n+,cmp2); t=; cnt=;
for(int i=;i<=n;i++)
{
if(i==||d[i].b==d[i-].b) cnt++;
else t=t*fac[cnt]%mo,cnt=;
}
t=t*fac[cnt]%mo;
ans-=t;/*第二维不合法*/ t=; cnt=;
for(int i=;i<=n;i++)
{
if(i==||(d[i].a==d[i-].a&&d[i].b==d[i-].b)) cnt++;
else t=t*fac[cnt]%mo,cnt=;
if(i!=&&d[i].a<d[i-].a) t=;//注意可能不存在两维同时不减的情况
}
t=t*fac[cnt]%mo;
ans+=t;//两维都不合法
printf("%lld\n",(ans%mo+mo)%mo);
return ;
}

E. XOR Guessing

人生第一道交互题 $2333$

让你猜一个 $[0,2^{14}-1]$ 的数,你只能询问两次,每次你给出 $100$ 个数,系统会在你给的 $100$ 个数里面随便找一个值 $v$ 并返回答案与 $v$ 的异或值

要如何通过两次询问确定这个答案,询问时你给出的所有数必须互不相同

考虑一下如果能全给出 $0$ ,那么答案很显然,这样问一次就够了

考虑先确定答案二进制下的前半段,那么我们只要给出 $100$ 个二进制下高的 $7$ 位全为 $0$ 的数,不论系统返回什么值,高位的 $7$ 位就一定能确定

然后我们再问低位的 $7$ 位,同样给出 $100$ 个二进制下 低的 $7$ 位全为 $0$ 的数即可

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
int ans;
int main()
{
cout<<"? ";
for(int i=;i<=;i++)cout<<i<<" "; cout<<<<endl;
int t; cin>>t;
ans=t>>;
cout<<"? ";
for(int i=;i<=;i++) cout<<(i<<)<<" "; cout<<(<<)<<endl;
int res; cin>>res;
ans=(ans<<)|(res ^ ((res>>)<<) );
cout<<"! "<<ans<<endl;
return ;
}

F. Remainder Problem

题意:

给一个长度为 $5*10^5$ 的数列,初始全为 $0$,进行不超过 $5*10^5$ 次询问

把某个位置值加上一个数,或者询问所有 位置模 $x$ 意义下等于 $y$ 的位置的数值之和

发现如果 $x$ 一直很大,那么我们直接暴力枚举即可,如果 $x$ 一直很小,我们只要随便开个二维数组维护一下就行

考虑分类讨论一下,把询问分成大的和小的,大的就暴力枚举,小的就从二维数组里面查询

分界点取 $\sqrt {n}$ 或者某个差不多的数即可,复杂度 $O(n \sqrt {n})$

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=5e5,M=;
int n;
ll A[N+],sum[M+][M+];
int main()
{
n=read(); int opt,a,b;
for(int i=;i<=n;i++)
{
opt=read(),a=read(),b=read();
if(opt==)
{
A[a]+=b;
for(int i=;i<=M;i++) sum[i][a%i]+=b;
}
if(opt==)
{
if(a>M)
{
ll ans=;
for(int i=b;i<=N;i+=a) ans+=A[i];
printf("%lld\n",ans);
}
else printf("%lld\n",sum[a][b]);
}
}
return ;
}

G. Indie Album

比赛的时候竟然没看出来 $woc$,[NOI2011]阿狸的打字机 了解一下,差不多的做法

佛了

Educational Codeforces Round 71 (Rated for Div. 2) Solution的更多相关文章

  1. Educational Codeforces Round 71 (Rated for Div. 2)-F. Remainder Problem-技巧分块

    Educational Codeforces Round 71 (Rated for Div. 2)-F. Remainder Problem-技巧分块 [Problem Description] ​ ...

  2. Educational Codeforces Round 71 (Rated for Div. 2)-E. XOR Guessing-交互题

    Educational Codeforces Round 71 (Rated for Div. 2)-E. XOR Guessing-交互题 [Problem Description] ​ 总共两次询 ...

  3. Educational Codeforces Round 71 (Rated for Div. 2)E. XOR Guessing

    一道容斥题 如果直接做就是找到所有出现过递减的不同排列,当时硬钢到自闭,然后在凯妹毁人不倦的教导下想到可以容斥做,就是:所有的排列设为a,只考虑第一个非递减设为b,第二个非递减设为c+两个都非递减的情 ...

  4. Educational Codeforces Round 71 (Rated for Div. 2) E XOR Guessing (二进制分组,交互)

    E. XOR Guessing time limit per test1 second memory limit per test256 megabytes inputstandard input o ...

  5. [暴力] Educational Codeforces Round 71 (Rated for Div. 2) B. Square Filling (1207B)

    题目:http://codeforces.com/contest/1207/problem/B   B. Square Filling time limit per test 1 second mem ...

  6. [贪心,dp] Educational Codeforces Round 71 (Rated for Div. 2) C. Gas Pipeline (1207C)

    题目:http://codeforces.com/contest/1207/problem/C   C. Gas Pipeline time limit per test 2 seconds memo ...

  7. Educational Codeforces Round 71 (Rated for Div. 2)

    传送门 A.There Are Two Types Of Burgers 签到. B.Square Filling 签到 C.Gas Pipeline 每个位置只有"高.低"两种状 ...

  8. Remainder Problem(分块) Educational Codeforces Round 71 (Rated for Div. 2)

    引用:https://blog.csdn.net/qq_41879343/article/details/100565031 下面代码写错了,注意要上面这种.查:2  800  0,下面代码就错了. ...

  9. XOR Guessing(交互题+思维)Educational Codeforces Round 71 (Rated for Div. 2)

    题意:https://codeforc.es/contest/1207/problem/E 答案guessing(0~2^14-1) 有两次机会,内次必须输出不同的100个数,每次系统会随机挑一个你给 ...

随机推荐

  1. VUE项目开发流程

    前期准备 安装npm 安装webpack\vue-cli(2.9.6版本--版本不同可能会导致以下一些目录结构以及错误解决办法不符合实际情况) 创建项目 初始化创建项目,项目名称.项目描述.拥有者等等 ...

  2. 消息中间件MQ

    消息中间件MQ:为方便预览,将思维导图上传至印象笔记,博客园直接上传图片受限于图片大小 https://app.yinxiang.com/shard/s24/nl/27262531/c3e137a5- ...

  3. ArcGIS超级工具SPTOOLS-数据处理篇

    1. 数据处理 1.1  两个图层按重叠度赋属性 两个面层按重合度赋属性,下图把依据赋数据属性图层,按重合度,赋值给目标.,重合度设置为负值,取面积最大的. 1.2  分区域消除 按区域字段值相同的, ...

  4. x86 linux下如何交叉编译?

    答: 需要首先指定两个环境变量CROSS_COMPILE和ARCH 如交叉编译arm64的程序: export CROSS_COMPILE="aarch64-linux-gnu-" ...

  5. 5G 与 MEC 边缘计算

    目录 文章目录 目录 前言 参考文献 通信网络 核心网演进之路 早古时期 2G 网络架构 3G 网络架构 4G 网络架构 5G 5G 网络的需求 5G 网络架构的设计原则 5G 网络的逻辑架构 5G ...

  6. 19 Flutter仿京东商城项目 商品详情 底部浮动导航布局 商品页面布局

    效果: widget/JdButton.dart import 'package:flutter/material.dart'; import '../services/ScreenAdaper.da ...

  7. PyQt5 调用 View 视图的方法

    一.使用Qt Designer 1. 直接引用ui文件: from PyQt5.uic import loadUi class MainWindow(QDialog): def __init__(se ...

  8. ubuntu 右上角网络图标不见了

    sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service ...

  9. std::replace函数

    需包含头文件#include <algorithm> template <class ForwardIterator, class T> void replace (Forwa ...

  10. jquery清除元素的点击事件

    $("#id").css("pointer-events", "none");