Codeforces Round #420 (Div. 2)
/******************************************************************************************************************
因为发现不敲题会变蠢...所以没事还是做两道题吧....
很久没做过题然后发现C和E全都是因为没用LL给卡住了...... 我真的是太蠢了
*******************************************************************************************************************/
A. Okabe and Future Gadget Laboratory
暴力判断就行了
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int Map[][];
int main()
{
int n;
scanf("%d",&n);
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
scanf("%d",&Map[i][j]);
int Ans=;
for(int i=;i<=n;++i)
for(int j=;j<=n;++j)
if(Map[i][j]!=)
{
int flag=;
for(int k=;k<=n;++k)
if(k!=i&&!flag)
for(int q=;q<=n;++q)
if(q!=j&&Map[i][q]+Map[k][j]==Map[i][j]&&!flag)
flag=;
if(!flag)
Ans=;
}
printf("%s\n",Ans?"Yes":"No");
return ;
}
B. Okabe and Banana Trees
发现高度会很小,所以直接遍历高度,然后就是一个等差数列求前缀和了
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#define LL long long
LL Sum[];
int main()
{
int m,b;
scanf("%d%d",&m,&b);
for(int i=;i<=m*b;++i)
Sum[i]=Sum[i-]+i;
LL Ans=;
for(LL i=;i<=b;++i)
{
LL x=m*(b-i);
LL tmp=;
tmp+=(i+)*Sum[x];
tmp+=(i*(i+))*(x+)/;
Ans=max(Ans,tmp);
}
printf("%lld\n",Ans);
return ;
}
C. Okabe and Boxes
这道题比较巧妙
暴力解法:(当然是不行滴
1.如果刚好能拿走就拿走
2.不能拿走我就排序
题目说肯定存在一个答案能满足条件,就说明在第i次remove的时候i一定在序列里
所以我们在remove的时候栈顶只有两种情况
1.刚好是我们需要的
2.是我们不需要的值(这时候就直接排序
然后我们考虑之前说过的条件,remove时候i一定在序列里,然后我们考虑把所有排过序的数字给标记一下(并不排序,只是标记一下
就有了第三种情况
3.遇到了我们标记过的值
这时候因为i一定在序列里,然后考虑比i小的全都remove走了,所以如果遇到了标记的说明这时候直接把i拿走就好了,因为这时候栈里面肯定全都是排好序的
然后我们就发现了栈的相对顺序是不变的,所以每次排序我们只需要标记栈顶的那个元素
然后说是要取i,其实就是假装i取取走了,其实还是在栈里
总的来说就是当delete的时候
1.如果刚好能拿走就拿走
2.不能拿走我就标记一下栈顶(假装排序
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#define LL long long
#define maxn 500005
int stac[maxn];
char str[];
int main()
{
int n;
int st=,ed=;
scanf("%d",&n);
int pos=,Ans=;
for(int i=;i<=n*;++i)
{
scanf("%s",str);
if(str[]=='a')
{
int x;
scanf("%d",&x);
stac[ed++]=x;
}
else
{
pos++;
if(stac[ed-]==pos)
{
ed--;
continue;
}
else if(stac[ed-]==)
{
continue;
}
else
{
Ans++;
stac[ed-]=;
}
}
}
printf("%d\n",Ans);
return ;
}
D. Okabe and City
待补
E. Okabe and El Psy Kongroo
这道题第一眼递推,然后发现k有点大.然后发现n特别小,所以就很明显的按阶段来跑矩阵快速幂
f[i+1][j]=f[i][j-1] + f[i][j] + f[i][j+1]然后判断一下会不会溢出就好了,中间用个数组存放中间值,主要是害怕用到本来应该溢出的值
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<queue>
#include<stack>
#include<string>
#include<vector>
#include<map>
#include<set>
using namespace std;
#define lowbit(x) (x&(-x))
typedef long long LL;
const int maxn = ;
const int inf=(<<)-;
#define Matrix_Size 20
LL MOD=;
int Size;
struct Matrix
{
LL mat[Matrix_Size][Matrix_Size];
void clear()
{
memset(mat,,sizeof(mat));
}
void output()
{
for(int i = ;i < Size;i++)
{
for(int j = ;j < Size;j++)
printf("%d ",mat[i][j]);
printf("\n");
}
}
Matrix operator *(const Matrix &b)const
{
Matrix ret;
for(int i = ;i < Size;i++)
for(int j = ;j < Size;j++)
{
ret.mat[i][j] = ;
for(int k = ;k < Size;k++)
{
long long tmp = (long long)mat[i][k]*b.mat[k][j]%MOD;
ret.mat[i][j] = (ret.mat[i][j]+tmp);
if(ret.mat[i][j]>=MOD)
ret.mat[i][j] -= MOD; }
}
return ret;
}
};
Matrix pow_M(Matrix a,long long n)
{
Matrix ret;
ret.clear();
for(int i = ;i < Size;i++)
ret.mat[i][i] = ;
Matrix tmp = a;
while(n)
{
if(n&)ret = ret*tmp;
tmp = tmp*tmp;
n>>=;
}
return ret;
}
int S[];
int main()
{
Matrix A,B;
S[]=;
LL n,k;
scanf("%lld%lld",&n,&k);
for(int i=;i<=n;++i)
{
LL st,ed,h;
scanf("%lld%lld%lld",&st,&ed,&h);
if(i==n)
ed=k; Size=h+; B.clear();
for(int j=;j<=h;++j)
{
B.mat[][j]=S[j];
} A.clear();
for(int j=;j<=h;++j)
{
if(j>)
A.mat[j-][j]=;
A.mat[j][j]=;
if(j<h)
A.mat[j+][j]=;
} A=pow_M(A,ed-st);
B=B*A; for(int j=;j<;++j)
S[j]=; for(int j=;j<=h;++j)
S[j]=B.mat[][j]; }
printf("%d\n",B.mat[][]);
return ;
}
Codeforces Round #420 (Div. 2)的更多相关文章
- 【Codeforces Round #420 (Div. 2) C】Okabe and Boxes
[题目链接]:http://codeforces.com/contest/821/problem/C [题意] 给你2*n个操作; 包括把1..n中的某一个数压入栈顶,以及把栈顶元素弹出; 保证压入和 ...
- 【Codeforces Round #420 (Div. 2) B】Okabe and Banana Trees
[题目链接]:http://codeforces.com/contest/821/problem/B [题意] 当(x,y)这个坐标中,x和y都为整数的时候; 这个坐标上会有x+y根香蕉; 然后给你一 ...
- 【Codeforces Round #420 (Div. 2) A】Okabe and Future Gadget Laboratory
[题目链接]:http://codeforces.com/contest/821/problem/A [题意] 给你一个n*n的数组; 然后问你,是不是每个位置(x,y); 都能找到一个同一行的元素q ...
- Codeforces Round #420 (Div. 2) - C
题目链接:http://codeforces.com/contest/821/problem/C 题意:起初有一个栈,给定2*n个命令,其中n个命令是往栈加入元素,另外n个命令是从栈中取出元素.你可以 ...
- Codeforces Round #420 (Div. 2) - E
题目链接:http://codeforces.com/contest/821/problem/E 题意:起初在(0,0),现在要求走到(k,0),问你存在多少种走法. 其中有n条线段,每条线段为(a, ...
- Codeforces Round #420 (Div. 2) - B
题目链接:http://codeforces.com/contest/821/problem/B 题意:二维每个整点坐标(x,y)拥有的香蕉数量为x+y,现在给你一个直线方程的m和b参数,让你找一个位 ...
- Codeforces Round #420 (Div. 2) - A
题目链接:http://codeforces.com/contest/821/problem/A 题意:给定一个n*n的矩阵. 问你这个矩阵是否满足矩阵里的元素除了1以外,其他元素都可以在该元素的行和 ...
- Codeforces Round #420 (Div. 2) A,B,C
A. Okabe and Future Gadget Laboratory time limit per test 2 seconds memory limit per test 256 megaby ...
- Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo 矩阵快速幂优化dp
E. Okabe and El Psy Kongroo time limit per test 2 seconds memory limit per test 256 megabytes input ...
随机推荐
- 车牌识别OCR—易泊时代智慧城市解决方案模块
牌识别(License Plate Recognition,LPR) 是视频图像识别技术在智能交通领域中的一个模块.车牌识别运用OCR技术,将视频流或图片中的汽车牌照从复杂的应用场景中提取并识别出来, ...
- .net基础第一天
.net基础 <head>+控制类标签 +<head> 1 <body>+网页要显示的内容+</body> <body +空格+bgcolor= ...
- Log4j配置详解及不同的包(package)下的日志写入到不同的日志文件下
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt262 以下都是log4j.properties要写入的内容: 一:参数介绍: ...
- Linux系统下C语言如何调用scalapack中的函数
在并行计算中经常需要调用scalapck(并行化的lapack)函数库里面的函数进行编程,这里简单介绍在C语言如何调用scalapck中的矩阵向量乘的函数. 注意:scalapack中的函数是用for ...
- Spring mvc 转发、重定向
spring控制器最后返回一个ModelAndView(urlName),其中urNamel可以是一个视图名称,由视图解析器负责解析后将响应流写回客户端;也可以通过redirect/forward:u ...
- JSON与String之间互转
一,String转json 这个JSON.parse()与eval()都可以实现,但是它们是有区别的, JSON.parse对json字符串要求比eval()更为严格,key名称(例如name)全部必 ...
- 201521123107 《Java程序设计》第13周学习总结
第13周-网络 1.本周学习总结 2.书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同? ...
- 【Beta】 第五次Daily Scrum Meeting
一.本次会议为第五次meeting会议 二.时间:10:00AM-10:20AM 地点:陆大楼 三.会议站立式照片 四.今日任务安排 成员 昨日任务 今日任务 林晓芳 帮助完善登录界面 对目前完成的模 ...
- 201521123038 《Java程序设计》 第六周学习总结
201521123038 <Java程序设计> 第六周学习总结 1. 本周学习总结 2. 书面作业 1.clone方法 1.1 Object对象中的 clone 方法是被protected ...
- 201521123032 《Java程序设计》第3周学习总结
1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 2. 书面作 ...