EXAM-2018-8-9

B

水题 注意理解题意 有坑

G

博弈 观察发现 总是会进行到最后两个,或者先手取完全部,再特判一下只有一张牌的情况

H

九连环 通过找规律 我们可以得出递推式:

F[n]=F[n-1]+2*F[n-2]+1

而这个递推式可以通过构造矩阵,然后矩阵快速幂解决:

|F[n-1],F[n-2],1| * A = |F[n],F[n-1],1|

A=
1 1 0
2 0 0
1 0 1

初始矩阵为|2 1 1|

package hgf;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;
import java.util.StringTokenizer;
class InputReader {
BufferedReader buf;
StringTokenizer tok;
InputReader() {
buf = new BufferedReader(new InputStreamReader(System.in));
}
boolean hasNext() {
while (tok == null || !tok.hasMoreElements()) {
try {
tok = new StringTokenizer(buf.readLine());
} catch (Exception e) {
return false;
}
}
return true;
}
String next() {
if (hasNext())
return tok.nextToken();
return null;
}
int nextInt() {
return Integer.parseInt(next());
}
long nextLong() {
return Long.parseLong(next());
}
double nextDouble() {
return Double.parseDouble(next());
}
BigInteger nextBigInteger() {
return new BigInteger(next());
}
BigDecimal nextBigDecimal() {
return new BigDecimal(next());
}
} public class Main {
static InputReader cin=new InputReader();
static PrintWriter cout=new PrintWriter(System.out);
public static void main(String[] args) {
int time,k;
time=cin.nextInt();
BigInteger arr[]=new BigInteger [3];
BigInteger f[][]=new BigInteger [3][3];
for(int z=1;z<=time;z++){
k=cin.nextInt();
if(k==1){
System.out.println(1);
continue;
}
if(k==2){
System.out.println(2);
continue;
}
arr[0]=B(2);arr[1]=B(1);
arr[2]=B(1);
f[0][0]=B(1);f[0][1]=B(1);f[0][2]=B(0);
f[1][0]=B(2);f[1][1]=B(0);f[1][2]=B(0);
f[2][0]=B(1);f[2][1]=B(0);f[2][2]=B(1);
k=k-2;
BigInteger c[]=new BigInteger [3];
BigInteger d[][]=new BigInteger [3][3];
for(;k!=0;k>>=1){
if(k%2==1){
Arrays.fill(c, B(0));
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
c[i] = c[i].add(arr[j].multiply(f[j][i]));
}
}
for(int i = 0; i < 3; i++) { arr[i] = c[i];
} }
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
d[i][j]=B(0);
}
}
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
for(int p = 0; p < 3; p++) {
d[i][j] = d[i][j].add(f[i][p].multiply(f[p][j])) ;
}
}
}
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
f[i][j] = d[i][j];
}
}
}
System.out.println(arr[0]); }
cout.close();
}
static BigInteger B(int x) {
return BigInteger.valueOf(x);
} }

BigInteger 申请1e5会超时

M

最讨厌看到有两个因素影响的题.....

题意是有l件衣服,m件洗衣机,n件烘干机,然后每件每次只能工作一件。然后这题是贪心做,最慢洗的配最快烘干的,然后肯定这几个机器是同时工作的,用d[i]维护一下。

单调队列的写法,注意一下。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+7;
const int maxm=1e6+7;
ll l,n,m,w[maxn],d[maxn],t[maxm];
template<class T>
void read(T &res)
{
res = 0;
char c = getchar();
T f = 1;
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)
{
putchar('-');
x = -x;
}
if(x >= 10)
{
out(x / 10);
}
putchar('0' + x % 10);
}
struct node{ll id;ll t;}u,v;
bool operator<(node a,node b){return a.t>b.t;}
priority_queue<node>x,h;
int main()
{
read(l);
read(n);
read(m);
for(int i=1;i<=n;i++){
read(w[i]);
u.id=i;
u.t=w[i];
x.push(u);
}
for(int i=1;i<=m;i++){
read(d[i]);
v.id=i;
v.t=d[i];
h.push(v);
}
for(int i=1;i<=l;i++){
node q=x.top();
x.pop();
t[i]=q.t;
ll ab=q.id;
u.t=q.t+w[ab];
u.id=q.id;
x.push(u);
}
ll ans=0;
for(int i=l;i>=0;i--){
node q=h.top();
h.pop();
t[i]+=q.t;
ll ab=q.id;
v.t=q.t+d[ab];
v.id=q.id;
h.push(v);
ans=max(ans,t[i]);
}
out(ans);
return 0;
}

A

应该要特意总结一下的莫队算法。模板题。先分成sqtr(n)块,然后按块排序,而不是单纯先排左端点再排右端点。然后两个指针跳来跳去的看似暴力却不是暴力的算法。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+10;
ll ans[maxn],ant;
int block,m,n,val[maxn],num[maxn],k;
struct node
{
int l,r,id;
inline bool operator <(node cmp) const {
if(l/block!=cmp.l/block)
return l/block<cmp.l/block;
return r/block<cmp.r/block;
}
}a[maxn];
void init()
{
for(int i=1;i<=n;i++){
scanf("%d",&val[i]);
val[i]^=val[i-1];
}
for(int i=1;i<=m;i++){
scanf("%d %d",&a[i].l,&a[i].r);
a[i].l--;
a[i].id=i;
}
}
inline void add(int i)
{
ant+=num[val[i]^k];
num[val[i]]++;
}
inline void remov(int i)
{
num[val[i]]--;
ant-=num[val[i]^k];
}
int main()
{
scanf("%d %d %d",&n,&m,&k);
block=sqrt(n);
init();
sort(a+1,a+n+1);
ll l=1,r=0;
for(int i=1;i<=m;i++){
while(l>a[i].l){
l--;
add(l);
}
while(l<a[i].l){
remov(l);
l++;
}
while(r>a[i].r){
remov(r);
r--;
}
while(r<a[i].r){
r++;
add(r);
}
ans[a[i].id]=ant;
}
for(int i=1;i<=m;i++)
{
printf("%lld\n",ans[i]);
}
return 0;
}

E

北上广深算法?233333

裸模板题

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int mod=1e9+7;
ll g,p,m,a,b,n;
map <ll,ll> mp;
template<class T>
void read(T &res)
{
res = 0;
char c = getchar();
T f = 1;
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)
{
putchar('-');
x = -x;
}
if(x >= 10)
{
out(x / 10);
}
putchar('0' + x % 10);
}
int qpow(ll x,ll k)
{
ll ans=1;
while(k>0)
{
if(k&1)
ans=(ans*x)%p;
x=(x*x)%p;
k>>=1;
}
return ans;
}
ll bsgs(ll x)
{
ll j=0,cnt=1;
for(; j<=m; ++j)
{
if(mp[(cnt*a)%p])
return mp[(cnt*a)%p]-j;
cnt=(cnt*g)%p;
}
return 0;
}
int main()
{
ll i;
read(g);
read(p);
m=ceil(sqrt(p));
ll cnt=qpow(g,m),ans=cnt;
mp[ans]=m;
for(i=2;i<=m;++i)
{
ans=(ans*cnt)%p;
mp[ans]=i*m;
}
read(n);
while(n--)
{
read(a);
read(b);
out(qpow(b,bsgs(a)));
printf("\n");
}
return 0;
}

地址EXAM-2018-8-9

EXAM-2018-8-9的更多相关文章

  1. 2018 ACM-ICPC青岛现场赛 B题 Kawa Exam 题解 ZOJ 4059

    题意:BaoBao正在进行在线考试(都是选择题),每个题都有唯一的一个正确答案,但是考试系统有m个bug(就是有m个限制),每个bug表示为第u个问题和第v个问题你必须选择相同的选项,题目问你,如果你 ...

  2. CSU 2018年12月月赛 A 2213: Physics Exam

    Description 高中物理老师总认为给学生文本形式的问题比给纯计算形式的问题要求更高.毕竟,学生首先得阅读和理解问题. 因此,他们描述一个问题不像”U=10V,I=5A,P=?”,而是”有一个含 ...

  3. 2018 HDU多校第四场赛后补题

    2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...

  4. 20101010 exam

    目录 2018 10.10 exam 解题报告 T1:LOJ #10078 新年好 题目描述(原题来自:CQOI 2005): 输入格式: 输出格式: 样例输入: 样例输出: 数据范围与提示: 思路: ...

  5. 【LeetCode】855. Exam Room 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/exam-roo ...

  6. Linux学习之Exam系统发布

    配置时间:2015年11月27日 配置人:撰写人:微冷的雨   Happy 01.Linux安装图 欢迎页面 桌面 02.Linux命令之文件目录操作 给北大青鸟五道口校区创建三个机房(L4,L5,L ...

  7. 2018. The Debut Album

    http://acm.timus.ru/problem.aspx?space=1&num=2018 真心爱过,怎么能彻底忘掉 题目大意: 长度为n的串,由1和2组成,连续的1不能超过a个,连续 ...

  8. Math.abs(~2018),掌握规律即可!

    Math.abs(~2018) 某前端群的入门问题长姿势了,一个简单的入门问题却引发了我的思考,深深的体会到自己在学习前端技术的同时忽略遗忘了一些计算机的基础知识. 对于 JS Math对象没什么可说 ...

  9. CF534A Exam 构造

    An exam for n students will take place in a long and narrow room, so the students will sit in a line ...

  10. CF Exam (数学)

     Exam time limit per test 1 second memory limit per test 256 megabytes input standard input output s ...

随机推荐

  1. NRF24L01中断双向传输数据

    NRF24L01是一款比较常见的无线通讯芯片,不过有个缺点就是只能半双工通讯,当涉及到双向通讯时就比较麻烦一些·,特别是想要做无线IAP数据需要一直来回发送,这点无疑然人恶心到想吐,不过还好有数据中断 ...

  2. quartz 集成到Spring中

    记录一下,防止忘记. 需要的jar包,quartz-2.2.3.jar,commons-collection-3.1.jar,spring-context-support-4.3.4.RELEASE. ...

  3. ES6 之 对象的扩展

    1.Object.is() 判断俩个值是否相等 +0 不等于 -0 NaN 等于自身 console.log(Object.is('foo','foo')); // true console.log( ...

  4. ES6 之 字符串扩展

    字符串所有的方法,不会修改字符串本身(字符串是不可变的),操作完成会 返回一个新的字符串. 将一个值转化为字符串,.toString()方法,但是null和undefined值没有这个方法, 1.字符 ...

  5. 教你如何使用JavaScript入门

    JavaScript简介   JavaScript是NetScape公司为Navigator浏览器开发的,是web前端卸载HTML文件中的一种脚本语言,能实现网页内容的交互显示.当用户在客户端显示该网 ...

  6. Dijkstra与Floyd算法

    1. Dijkstra算法 1.1 定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点 ...

  7. JavaScript—瀑布流

    现在网页中需要翻页的列表,好多都已经改为瀑布流了.所以这个思路还是特别重要的 HTML Css 页面 因为每个图片的高度不一样所以她的 top 和left 我们待会通过JS计算 动态生成 js部分 思 ...

  8. 洛谷 P1113 杂务(vector)

    题目传送门 解题思路: 本题说有些杂务是有前提条件的,而有一个特性就是某个杂务的前提一定在这个杂务前面输入,那么,这个题就瞬间沦为了黄题.对于那些有前提条件的杂务,我们只需要找它的前提条件中最晚完成的 ...

  9. 2. 现代 javascript 新语法 及 对象专题

    let , const 和 var javascript 里面的作用域 一个大括号 是一个作用域 {  } var 会 在局部作用定义 被定义时 会提升作用域  如 if 的 {} 就属于 局部作用域 ...

  10. 编程作业3.1:Multi-class classification(One-vs-all)

    题目: 在本次练习中,你将使用逻辑回归和神经网络来识别手写数字(从0到9). 今天,自动手写数字识别被广泛使用,从识别信封上的邮政编码到识别银行支票上的金额.这个练习将向你展示如何将你所学的方法用于此 ...