A - Beginning

这个年份恐怕需要+2

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define MAXN 80005
#define eps 1e-10
//#define ivorysi
using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 + c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
int num[10];
void Solve() {
for(int i = 1 ; i <= 4 ; ++i) read(num[i]);
sort(num + 1,num + 5);
if(num[1] == 1 && num[2] == 4 && num[3] == 7 && num[4] == 9) {puts("YES");}
else puts("NO");
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}

B - KEYENCE String

……

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define MAXN 80005
#define eps 1e-10
//#define ivorysi
using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 + c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
string s;
string tar = "keyence";
void Solve() {
cin >> s;
int p = 0;
while(s[p] == tar[p]) ++p;
int q = 0;
while(s[s.length() - 1 - q] == tar[tar.length() - 1 - q]) ++q;
if(p + q >= tar.length()) puts("YES");
else puts("NO");
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}

C - Exam and Wizard

就是先用一遍A的总和恢复出B,如果不足就是-1,然后贪心每次恢复最少可以回到原来的大小

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define MAXN 100005
#define eps 1e-10
//#define ivorysi
using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 + c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
int N;
int64 A[MAXN],B[MAXN],all,C[MAXN];
multiset<int64> S;
void Solve() {
read(N);
for(int i = 1 ; i <= N ; ++i) {
read(A[i]);all += A[i];
}
for(int i = 1 ; i <= N ; ++i) {
read(B[i]);all -= B[i];
if(A[i] - B[i] >= 0) S.insert(A[i] - B[i]);
}
if(all < 0) {puts("-1");return;}
int cnt = 0;
while(!S.empty()) {
int64 p = *S.begin();
S.erase(S.begin());
if(all >= p) {all -= p;++cnt;}
else break;
}
out(N - cnt);enter;
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}

D - Double Landscape

感觉这题so interesting 啊,还可以往高维拓展

从大到小往里面塞数,记录一下每次能用的行和列,如果这个数必须在某一行或某一列,两个都固定就乘上1,一个固定,比如行固定,就乘上能用的列数

如果这个数位置没被固定,就是乘上当前能用的行列数的乘积,减去比它大的数

为什么呢。。因为一个数能填的位置,要么和前面比它大的数都没有交集,要么前面比它大的数能填的集合是它的一个真子集

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define MAXN 1005
#define eps 1e-10
//#define ivorysi
using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 + c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
const int MOD = 1000000007;
int N,M;
bool col[MAXN * MAXN],row[MAXN * MAXN];
int inc(int a,int b) {
return a + b >= MOD ? a + b - MOD : a + b;
}
int mul(int a,int b) {
return 1LL * a * b % MOD;
}
void Solve() {
read(N);read(M);
int a;
for(int i = 1 ; i <= N ; ++i) {
read(a);
if(row[a]) {puts("0");return;}
row[a] = 1;
}
for(int i = 1 ; i <= M ; ++i) {
read(a);
if(col[a]) {puts("0");return;}
col[a] = 1;
}
int ans = 1;
int c = 0,r = 0;
for(int i = N * M ; i >= 1 ; --i) {
int tc = c,tr = r;
if(col[i]) {tc = 1;++c;}
if(row[i]) {tr = 1;++r;}
if(col[i] || row[i]) ans = mul(ans,tc * tr);
else ans = mul(ans,tc * tr - (N * M - i));
}
out(ans);enter;
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}

E - Connecting Cities

外国人真是瞧不起中国人的数据结构水平

随手写了个线段树就过了

就是拆式子,分\(-i * D + A_i\)和\(i * D + A_i\)

然后跑prim,两个线段树取最小的就行

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define MAXN 200005
#define eps 1e-10
//#define ivorysi
using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 + c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
int N;int64 D;
int64 A[MAXN];
struct seg_tr {
struct node {
int L,R;
int64 cov;
pair<int64,int> val[2];
}tr[MAXN * 4];
void update(int u) {
tr[u].val[1] = mp(1e16,0);
if(tr[u].L != tr[u].R) {
tr[u].val[0] = min(tr[u << 1].val[0],tr[u << 1 | 1].val[0]);
tr[u].val[1] = min(tr[u << 1].val[1],tr[u << 1 | 1].val[1]);
}
tr[u].val[1] = min(tr[u].val[1],mp(tr[u].cov + tr[u].val[0].fi,tr[u].val[0].se));
}
void build(int u,int l,int r,int on) {
tr[u].L = l;tr[u].R = r;tr[u].cov = 1e16;
if(l == r) {
tr[u].val[0] = mp(A[l] + on * l * D,l);
update(u);
return;
}
int mid = (l + r) >> 1;
build(u << 1,l,mid,on);build(u << 1 | 1,mid + 1,r,on);
update(u);
}
void Change(int u,int l,int r,int64 v) {
if(l > r) return;
if(tr[u].L == l && tr[u].R == r) {
tr[u].cov = min(tr[u].cov,v);
update(u);
return;
}
int mid = (tr[u].L + tr[u].R) >> 1;
if(r <= mid) Change(u << 1,l,r,v);
else if(l > mid) Change(u << 1 | 1,l,r,v);
else {Change(u << 1,l,mid,v);Change(u << 1 | 1,mid + 1,r,v);}
update(u);
}
void Change_pos(int u,int p) {
if(tr[u].L == tr[u].R) {
tr[u].val[0] = mp(1e16,tr[u].L);
update(u);return;
}
int mid = (tr[u].L + tr[u].R) >> 1;
if(p <= mid) Change_pos(u << 1,p);
else Change_pos(u << 1 | 1,p);
update(u);
}
}s[2]; void Solve() {
read(N);read(D);
for(int i = 1 ; i <= N ; ++i) read(A[i]);
s[0].build(1,1,N,1);
s[1].build(1,1,N,-1);
s[0].Change_pos(1,1);s[1].Change_pos(1,1);
s[0].Change(1,2,N,A[1] - D);
int cnt = N - 1;
int64 ans = 0;
while(cnt--) {
pair<int64,int> t[2];
t[0] = s[0].tr[1].val[1],t[1] = s[1].tr[1].val[1];
if(t[0] > t[1]) swap(t[0],t[1]);
ans += t[0].fi;
int u = t[0].se;
s[0].Change_pos(1,u);s[1].Change_pos(1,u);
s[1].Change(1,1,u - 1,1LL * u * D + A[u]);
s[0].Change(1,u + 1,N,-1LL * u * D + A[u]);
}
out(ans);enter;
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}

F - Paper Cutting

怎么又是计数转期望……输了……水平不行,从前遇见期望只会转计数。。。直到atc用一堆计数转期望把我吊着打

就是考虑一个左下角为\((i,j)\)的方形,当这个点作为左下角后,每切一刀都会被统计一次,为了方便我们姑且只讨论\(i > 0\)且\(j > 0\)的情况

这个矩形第一次存在的概率是

\(\frac{\binom{K}{2}}{\binom{N}{2}}\)

就是考虑选\(i,j\)(无序)我们需要它是\(\binom{N}{2}\)中\(\binom{K}{2}\)对中的一个

之后被再次算的概率是,就是,我又拿了一个,左下角为\(i,j\)的就又被算了一次

\(\frac{\binom{K}{3}}{\binom{N}{3}}\cdot \frac{1}{3}\)我需要最后一个选的点在最后,这样的概率有\(\frac{1}{3}\)

这样的点得集合有\(N - 2\)种,所以最后的期望是

\(\frac{\binom{K}{2}}{\binom{N}{2}} + \frac{\binom{K}{3}}{\binom{N}{3}} \cdot \frac{1}{3} \cdot (N - 2)\)

对于边上的点和角上的一个点也是同理的

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define mp make_pair
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define MAXN 20000005
#define eps 1e-10
//#define ivorysi
using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {
res = 0;T f = 1;char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 + c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
const int MOD = 1000000007;
int H,W,K,N;
int C[2][4],inv[4];
int inc(int a,int b) {
return a + b >= MOD ? a + b - MOD : a + b;
}
int mul(int a,int b) {
return 1LL * a * b % MOD;
}
void update(int &x,int y) {
x = inc(x,y);
}
int fpow(int x,int c) {
int res = 1,t = x;
while(c) {
if(c & 1) res = mul(res,t);
t = mul(t,t);
c >>= 1;
}
return res;
}
void Solve() {
read(H);read(W);read(K);
N = H + W;
inv[1] = 1;inv[2] = (MOD + 1) / 2;inv[3] = (MOD + 1) / 3;
C[0][0] = C[1][0] = 1;
for(int i = 1 ; i <= 3 ; ++i) {
C[0][i] = mul(mul(C[0][i - 1],inv[i]),K - i + 1);
C[1][i] = mul(mul(C[1][i - 1],inv[i]),N - i + 1);
} int ans = K;
int t1 = mul(K,fpow(N,MOD - 2)),t2 = mul(C[0][2],fpow(C[1][2],MOD - 2)),t3 = mul(C[0][3],fpow(C[1][3],MOD - 2));
int s = inc(t1,mul(mul(t2,inv[2]),N - 1));
update(ans,mul(s,H + W));
s = inc(t2,mul(mul(t3,inv[3]),N - 2));
update(ans,mul(s,1LL * H * W % MOD));
for(int i = N ; i >= N - K + 1; --i) {
ans = mul(ans,i);
}
out(ans);enter;
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}

【AtCoder】KEYENCE Programming Contest 2019的更多相关文章

  1. 【AtCoder】AISing Programming Contest 2019

    本来以为是1199rated的..仔细一看发现是1999,所以就做了一下 这场涨分很轻松啊...为啥又没打 等pkuwc考完我一定打一场atcoder(咕咕咕,咕咕咕,咕咕咕咕咕咕咕~) 但是其实我思 ...

  2. 【AtCoder】Yahoo Programming Contest 2019

    A - Anti-Adjacency K <= (N + 1) / 2 #include <bits/stdc++.h> #define fi first #define se se ...

  3. 【AtCoder】Tenka1 Programmer Contest 2019

    Tenka1 Programmer Contest 2019 C - Stones 题面大意:有一个01序列,改变一个位置上的值花费1,问变成没有0在1右边的序列花费最少多少 直接枚举前i个都变成0即 ...

  4. 【AtCoder】M-SOLUTIONS Programming Contest

    M-SOLUTIONS Programming Contest A - Sum of Interior Angles #include <bits/stdc++.h> #define fi ...

  5. 【AtCoder】Dwango Programming Contest V题解

    A - Thumbnail 题意简述:给出N个数,找出N个数中和这N个数平均值绝对值最小的数 根据题意写代码即可= = #include <bits/stdc++.h> #define f ...

  6. KEYENCE Programming Contest 2019 自闭记

    A:签到. #include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> ...

  7. KEYENCE Programming Contest 2019 Solution

    A - Beginning 签到. #include <bits/stdc++.h> using namespace std; int main() { ]; while (scanf(& ...

  8. 【AtCoder】Mujin Programming Challenge 2017

    Mujin Programming Challenge 2017 A - Robot Racing 如果每个数都是一个一个间隔开的,那么答案是\(n!\) 考虑把一个数挪到1,第二个数挪到3,以此类推 ...

  9. 【AtCoder】Tenka1 Programmer Contest

    C - 4/N 列出个方程枚举解一下 #include <bits/stdc++.h> #define fi first #define se second #define pii pai ...

随机推荐

  1. cpu load过高问题排查

    load average的概念 top命令中load average显示的是最近1分钟.5分钟和15分钟的系统平均负载. 系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少 ...

  2. 集大软件工程15级个人作业Week2

    集大软件工程15级个人作业Week2 快速通读教材<构建之法>,并参照提问模板,提出5个问题. 在每个问题后面,请说明哪一章节的什么内容引起了你的提问,提供一些上下文 列出一些事例或资料, ...

  3. C++ error LNK2001

    1.没有函数的实现部分 2.函数的头文件和实现部分不一致 3.缺库LIB.DLL 4.库H文件函数和库体不一致

  4. js 运动框架及实例

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. luogu P4082 [USACO17DEC]Push a Box

    传送门 一个人推箱子,和之前的华容道中的棋子移动有异曲同工之妙,因为每次可以让人走到箱子的其他方向上,或者推一下箱子 所以状态可以设成\(f_{i,j,k}\),即箱子在\((i,j)\),人在\(k ...

  6. POJ1751 Highways【最小生成树】

    题意: 给你N个城市的坐标,城市之间存在公路,但是由于其中一些道路损坏了,需要维修,维修的费用与公路长成正比(公路是直的). 但现有M条公路是完整的,不需要维修,下面有M行,表示不需要维修的道路两端的 ...

  7. 【反射】利用java反射原理将xml文件中的字段封装成对应的Bean

    本例使用的xml解析方式为jdom ... <ROOT> <Consignment> ... </Consignment> </ROOT> 解析xml文 ...

  8. Spring+CXF整合来管理webservice(服务器启动发布webservice)

    Spring+CXF整合来管理webservice    实现步骤:      1. 添加cxf.jar 包(集成了Spring.jar.servlet.jar ),spring.jar包 ,serv ...

  9. Sql Server 2008 数据库18456错误怎么解决?

    可以windows连接,以前都可以,昨天突然就不可以用SQL连接,报18456错误. 1.以windows验证模式进入数据库管理器. 2.右击sa,选择属性: 在常规选项卡中,重新填写密码和确认密码( ...

  10. MR运动静止用户区分

    1.客户端打开菜单[MR]-[MR室内室外判定设置] 设置主小区是室外站且主小区信号比较强时RSRP门限 2.设置"上报数据用户临小区切换次数门限设置"值为15 mysql中t_m ...