EXAM-2018-8-9
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的更多相关文章
- 2018 ACM-ICPC青岛现场赛 B题 Kawa Exam 题解 ZOJ 4059
题意:BaoBao正在进行在线考试(都是选择题),每个题都有唯一的一个正确答案,但是考试系统有m个bug(就是有m个限制),每个bug表示为第u个问题和第v个问题你必须选择相同的选项,题目问你,如果你 ...
- CSU 2018年12月月赛 A 2213: Physics Exam
Description 高中物理老师总认为给学生文本形式的问题比给纯计算形式的问题要求更高.毕竟,学生首先得阅读和理解问题. 因此,他们描述一个问题不像”U=10V,I=5A,P=?”,而是”有一个含 ...
- 2018 HDU多校第四场赛后补题
2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...
- 20101010 exam
目录 2018 10.10 exam 解题报告 T1:LOJ #10078 新年好 题目描述(原题来自:CQOI 2005): 输入格式: 输出格式: 样例输入: 样例输出: 数据范围与提示: 思路: ...
- 【LeetCode】855. Exam Room 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/exam-roo ...
- Linux学习之Exam系统发布
配置时间:2015年11月27日 配置人:撰写人:微冷的雨 Happy 01.Linux安装图 欢迎页面 桌面 02.Linux命令之文件目录操作 给北大青鸟五道口校区创建三个机房(L4,L5,L ...
- 2018. The Debut Album
http://acm.timus.ru/problem.aspx?space=1&num=2018 真心爱过,怎么能彻底忘掉 题目大意: 长度为n的串,由1和2组成,连续的1不能超过a个,连续 ...
- Math.abs(~2018),掌握规律即可!
Math.abs(~2018) 某前端群的入门问题长姿势了,一个简单的入门问题却引发了我的思考,深深的体会到自己在学习前端技术的同时忽略遗忘了一些计算机的基础知识. 对于 JS Math对象没什么可说 ...
- CF534A Exam 构造
An exam for n students will take place in a long and narrow room, so the students will sit in a line ...
- CF Exam (数学)
Exam time limit per test 1 second memory limit per test 256 megabytes input standard input output s ...
随机推荐
- JZOJ823PJ-C, TG-B
分身打两场比赛 PJ - C 翻车 T1 原题, 考虑蚂蚁相撞时其实不用管. 然后写个取左右max, 左右min的即可 翻车: 注释freopen后JZOJ不会提示!(大翻车--丢了300分) T2 ...
- (转)绝对路径${pageContext.request.contextPath}用法及其与web.xml中Servlet的url-pattern匹配过程
以系统的一个“添加商品”的功能为例加以说明,系统页面为add.jsp,如图一所示: 图一 添加商品界面 系统的代码目录结构及add.jsp代码如图二所示: 图二 系统的代码目录结构及add.js ...
- linux-文件系统和目录
linux目录说明 /:系统根目录 /usr:用户的程序 /home:默认创建用户在此目录下创建用户主目录 /etc:存放系统配置文件.服务脚本,一些程序配置文件 /bin:常用命令 /sbin:常用 ...
- Django2.0——请求与响应(下)
上篇讲完了请求,这篇接着讲下响应,django响应类型大致有以下几种 HttpResponse:返回简单的字符串 render:渲染模板 redirect:重定向 JsonResponse:返回jso ...
- [Python]h5py/__init__.py:36:
个人博客地址:https://www.bearoom.xyz/2019/08/24/python-devolop-env-hdf5-problem/ 安装tensorflow之后,在导入tensorf ...
- 爬虫之xpath解析库
xpath语法: 1.常用规则: 1. nodename: 节点名定位 2. //: 从当前节点选取子孙节点 3. /: 从当前节点选取直接子节点 4. node ...
- 前端Json 增加,删除,修改元素(包含json数组处理)
一:基础JSON对象 二:JSON数组数据 以下为增删修改方法: <!DOCTYPE html> <html lang="en"> <head> ...
- Java中String常用方法总结
package cn.zhang.Array; /** * String类的一些常用方法 * @author 张涛 * */ public class TestString { public stat ...
- 长沙中考2019数学T25讲解
好久没更Blog了... 为了应付完成寒假作业,还是更一下(再不更都庚子年了) Upd:2020.1.22 题目 第一问 还是比较水友好的 给顶点就相当于多给了对称轴-\(\frac{b}{2a}\) ...
- Vue 项目中应用
Vue使用 一.vue生命周期 # main.js import Vue from 'vue' import App from './App.vue' import router from './ro ...