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 ...
随机推荐
- Cython的用法以及填坑姿势
因为项目需要,需要优化已有的Python代码.目前Python代码的执行过程是将Python代码转变成一行行指令,然后解释器解释指令的执行,调用到C代码层.如果去掉指令解释这个阶段,直接进入C代码层, ...
- 深入理解 JavaScript 中的 replace 方法(转)
replace方法是属于String对象的,可用于替换字符串. 简单介绍: StringObject.replace(searchValue,replaceValue) StringObject:字符 ...
- Java基础学习 —— 对象的克隆
对象的克隆分为对象的浅克隆和深克隆 一.对象的浅克隆 注意事项: 1.如果一个对象需要调用clone的方法克隆,那么该对象必须要实现Cloneable接口 2.Cloneable对象只是一个标识对象, ...
- 规则集Set与线性表List性能分析
前言 本章节将通过实验,测试规则集与线性表的性能.那么如何进行实验呢?针对不同的集合都进行指定数量元素的添加和删除操作,计算耗费时间进行分析. 那么,前两个章节呢,我们分别讲述了什么时候使用Set以及 ...
- poj 3592 缩点+SPFA
题意:给出一个矩阵,其中#代表墙,不可走,0-9代表权值,*代表可以选择传送.求从0,0点开始出发能获得最大权值. 思路:因为*的出现会有环的情况,先建图连边,将环进行Tarjan缩点,之后再从0,0 ...
- JTemplates + $.Ajax
上篇基础使用后: +AJAX 只需要改列名即可 :<script type="text/template" id="foreach"> 里的循环 ...
- javascript 学习笔记 -- js获取本地文件信息
JavaScript是跑在浏览器中,所以对于JavaScript读取本地文件不想c++ 和 java那样easy.网上有很多关于读取本地文件的方法,许多是用ActiveXObject控件.Active ...
- 201521123038 《Java程序设计》 第七周学习总结
201521123038 <Java程序设计> 第七周学习总结 1. 本周学习总结 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 ...
- 201521123057 《Java程序设计》第4周学习总结
1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 2. 书面作业 注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) 答: 面向对象 ...
- 201521123064 《Java程序设计》第10周学习总结
1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. ① 定义Thread类的子类,覆盖Thread类的run()方法,然后创建该子类的实例(一般不用该方法,开销 ...