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 ...
随机推荐
- 关于Vue element-ui中诡异问题的解决思路
最近在做Element-ui项目时总是会出现些异步及其一些诡异问题,关于vue 的异步原理就不多说了,感觉大部分的问题都可以用Vue.nextTick来解决,Vue.nextTick是等DOM二次加载 ...
- JavaScript-数据类型和变量
数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...
- rewrite例子集合
在 httpd 中将一个域名转发到另一个域名 虚拟主机世界近期更换了域名,新域名为 www.wbhw.com, 更加简短好记.这时需要将原来的域名 webhosting-world.com, 以及论坛 ...
- 简单vue的监听属性(单位换算)
单位换算 单位换算可以根据实际情况换 <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- 批量导出数据库表(oracle)
批量导出数据库表(oracle) 要求:导出sql文件,包含表结构和数据. 方案一 1:用cmd进入命令行输入:tnsping cmstar就是测试172.18.13.200是否连接成功2:导入与导出 ...
- Django1.11基础视图
Django视图 路由命名与reverse反解析 在项目urls中的include函数,使用namespace参数定义路由命名空间 url(r'^',incude('book.urls',namesp ...
- 2.0 虚拟机linu开启ssh服务与FTP
2.1.1.当本地机器ssh连接过一次虚拟主机.虚拟主机重启过或者配置发生改变 需要重新配对密钥,需要先清除本地缓存的密钥 ssh-keygen -R "ip" 2.1.2. ...
- tar.xz文件
创建或解压tar.xz文件的方法 习惯了 tar czvf 或 tar xzvf 的人可能碰到 tar.xz也会想用单一命令搞定解压或压缩.其实不行 tar里面没有征对xz格式的参数比如 z是针对 g ...
- php开启opcache
OPcache 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销. 一.php.ini配置opchche ...
- 吴裕雄--天生自然TensorFlow2教程:维度变换
图片视图 [b, 28, 28] # 保存b张图片,28行,28列(保存数据一般行优先),图片的数据没有被破坏 [b, 28*28] # 保存b张图片,不考虑图片的行和列,只保存图片的数据,不关注图片 ...