1 toad
1.1 题目描述
  有 n 个石子, A B 两人博弈, A 先手。 A 首先取若干个石子(至少一个,不能取完),然后B和A 再轮流取石子,每次取的石子不能超过 axb x 表示上次取的石子数, a, b 是两个正整数参数),且至少取一个,无法操作的人输。求 n 满足什么条件时先手必胜。
1.2 输入格式
  第一行三个正整数 T, a, b T 表示数据组数, a, b 意义见题。
  接下来 T 行,每行一个正整数 n
1.3 输出格式
  对于每个 n ,输出 A 或 B ,表示此时 A 必胜还是 B 必胜。
1.4 样例输入
  3 1 1
  1

  2

  3
1.5 样例输出
  B

  B

  A
1.6 数据范围
  对于 10% 的数据,满足 a = 1, b = 1
  对于 10% 的数据,满足 a = 2, b = 1
  对于另外 10% 的数据,满足 1 n 103
  对于 60% 的数据,满足 1 n 108
  对于 100% 的数据,满足 1 a, b 10, 1 T 105, 1 n 1018

 From r_64

 #include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstring>
#include <cassert>
#if __cplusplus > 201103L
#include <initializer_list>
#include <unordered_map>
#include <unordered_set>
#endif using namespace std; #ifndef ONLINE_JUDGE
#define DEBUG
#endif #define oo 0x3F3F3F3F
#ifdef DEBUG
#define cvar(x) cerr << "<" << #x << ": " << x << ">"
#define evar(x) cvar (x) << endl
template<class T> void DISP(const char *s, T x, int n) {cerr << "[" << s << ": "; for (int i = ; i < n; ++i) cerr << x[i] << " "; cerr << "]" << endl;}
#define disp(x,n) DISP(#x " to " #n, x, n)
#else
#define cvar(...) ({})
#define evar(...) ({})
#define disp(...) ({})
#endif
#define car first
#define cdr second
#define PB push_back
#define SZ(x) (int)((x).size())
#define ALL(x) (x).begin(), (x).end()
#define FOR(i, a, b) for (int _end_ = (b), i = (a); i <= _end_; ++i)
#define ROF(i, a, b) for (int _end_ = (b), i = (a); i >= _end_; --i) typedef unsigned int uint;
typedef long long int64;
typedef unsigned long long uint64;
typedef long double real; int64 fpm(int64 b, int64 e, int64 m) { int64 t = ; for (; e; e >>= , b = b * b % m) e & ? t = t * b % m : ; return t; }
template<class T> inline bool chkmin(T &a, T b) {return a > b ? a = b, true : false;}
template<class T> inline bool chkmax(T &a, T b) {return a < b ? a = b, true : false;}
template<class T> inline T sqr(T x) {return x * x;}
template <typename T> T gcd(T x, T y) {for (T t; x; t = x, x = y % x, y = t); return y; } template<class edge> struct Graph
{
vector<vector<edge> > adj;
Graph(int n) {adj.clear (); adj.resize (n + );}
Graph() {adj.clear (); }
void resize(int n) {adj.resize (n + ); }
void add(int s, edge e){adj[s].push_back (e);}
void del(int s, edge e) {adj[s].erase (find (iter (adj[s]), e)); }
vector<edge>& operator [](int t) {return adj[t];}
}; const int maxn = ;
const int64 lmt = 1e18; struct segment {
int64 L, R, d;
}; segment H[maxn];
int a, b; int64 f(int64 x)
{
double ret = a * pow((double)x, b);
if (ret > lmt) return lmt;
return a * fpm(x, b, lmt);
} int main(int argc, char **argv)
{
#ifndef ONLINE_JUDGE
freopen("toad.in" , "r", stdin);
freopen("toad.out", "w", stdout);
#endif
ios_base::sync_with_stdio(false); int T; cin >> T >> a >> b; int j = , n;
int64 Hi = , Hj = ;
// H[1] = (segment){1, 1, 1};
for (n = ; ; ) {
int64 Ri = Hi + (f(Hj) - Hi) / Hj * Hj;
H[++n] = (segment){Hi, Ri, Hj};
Hi = Ri + Hj;
if (Hi > lmt) break;
for (; j <= n && Hj > H[j].R; ++j);
if (j <= n) Hj += H[j].d;
else Hj = Hi;
}
cerr << n << endl; for (int64 x; T--; ) {
cin >> x;
int l = , r = n, m;
for (; m = (l + r + ) >> , l < r; )
H[m].L <= x ? (l = m) : (r = m - );
// assert(H[m].L <= x && H[m + 1].L > x);
bool ans = (x - H[m].L) % H[m].d == ;
cout << (ans ? 'B' : 'A') << endl;
}
return ;
}

2 hasher
2.1 题目描述
  对于 m, P ,我们定义一个串 S 的 hash 值为:
    hash(S) =∑|S|−1i=0 Simi mod P

  请构造出两个不同的长为不超过 1500 的 0/1   串,使得他们的 hash 值相同。
2.2 输入格式
  一行两个数 m, P
2.3 输出格式
  两行,每行一个串。要求这两个串长度相同。输出任意一组解即可。
2.4 样例输入
  3 10
2.5 样例输出
  10000
  00001
2.6 数据范围
  对于 20% 的数据,满足 P 106
  对于 80% 的数据,满足 P 1014
  对于另外 20% 的数据,满足 P = 262

 #include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstring>
#include <cassert>
#if __cplusplus > 201103L
#include <initializer_list>
#include <unordered_map>
#include <unordered_set>
#endif using namespace std; #ifndef ONLINE_JUDGE
#define DEBUG
#endif #define oo 0x3F3F3F3F
#ifdef DEBUG
#define cvar(x) cerr << "<" << #x << ": " << x << ">"
#define evar(x) cvar (x) << endl
template<class T> void DISP(const char *s, T x, int n) {cerr << "[" << s << ": "; for (int i = ; i < n; ++i) cerr << x[i] << " "; cerr << "]" << endl;}
#define disp(x,n) DISP(#x " to " #n, x, n)
#else
#define cvar(...) ({})
#define evar(...) ({})
#define disp(...) ({})
#endif
#define car first
#define cdr second
#define PB push_back
#define SZ(x) (int)((x).size())
#define ALL(x) (x).begin(), (x).end()
#define FOR(i, a, b) for (int _end_ = (b), i = (a); i <= _end_; ++i)
#define ROF(i, a, b) for (int _end_ = (b), i = (a); i >= _end_; --i) typedef unsigned int uint;
typedef long long int64;
typedef unsigned long long uint64;
typedef long double real; int64 fpm(int64 b, int64 e, int64 m) { int64 t = ; for (; e; e >>= , b = b * b % m) e & ? t = t * b % m : ; return t; }
template<class T> inline bool chkmin(T &a, T b) {return a > b ? a = b, true : false;}
template<class T> inline bool chkmax(T &a, T b) {return a < b ? a = b, true : false;}
template<class T> inline T sqr(T x) {return x * x;}
template <typename T> T gcd(T x, T y) {for (T t; x; t = x, x = y % x, y = t); return y; } template<class edge> struct Graph
{
vector<vector<edge> > adj;
Graph(int n) {adj.clear (); adj.resize (n + );}
Graph() {adj.clear (); }
void resize(int n) {adj.resize (n + ); }
void add(int s, edge e){adj[s].push_back (e);}
void del(int s, edge e) {adj[s].erase (find (iter (adj[s]), e)); }
vector<edge>& operator [](int t) {return adj[t];}
}; const int maxn = ; int lnk[maxn];
struct my_list {
int head, tail;
}; my_list operator +(const my_list &a, const my_list &b)
{
if (a.head == -) return b; if (b.head == -) return a;
lnk[a.tail] = b.head;
return (my_list){a.head, b.tail};
} struct node {
int64 h;
my_list x, y;
}; vector<node> z;
int64 m, mod; node operator - (const node &a, const node &b)
{
node c = a;
c.h -= b.h;
return (node){a.h - b.h, a.x + b.y, a.y + b.x};
} bool operator < (const node &a, const node &b)
{
return a.h < b.h;
} int64 mul(int64 x, int64 y)
{
int64 t = ;
for (; x; x >>= , (y <<= ) %= mod)
x & ? (t += y) : ;
return t % mod;
} void output(int x)
{
vector<int> b();
for (; x != -; x = lnk[x]) b[x] = true;
// reverse(ALL(b));
for (vector <int> :: iterator wyh = b.begin(); wyh != b.end(); wyh++)
cout << *wyh;
cout << endl;
} string inv(string x)
{
string y;
for (int wyh = ; wyh != x.length(); wyh++)
y += (char)((x[wyh]) ^ );
return y;
} int main(int argc, char **argv)
{
freopen("hasher.in" , "r", stdin);
freopen("hasher.out", "w", stdout);
ios_base::sync_with_stdio(false);
cin >> m >> mod; if ((mod & (mod - )) == ) {
if (m & ) {
string s = "";
FOR (i, , )
s += inv(s);
cout << s << endl
<< inv(s) << endl;
} else {
string s = "";
FOR (i, , ) s += '';
cout << s << "" << endl
<< s << "" << endl;
}
return ;
} memset(lnk, -, sizeof(lnk));
int64 v = ;
FOR (i, , - ) {
node x;
x.h = v;
x.x = (my_list){i, i};
x.y = (my_list){-, -}; z.push_back(x);
v = mul(v, m);
}
sort(ALL(z)); bool flag = false;
for (; ; ) {
// cerr << SZ(z) << endl;
// assert(~SZ(z) & 1);
if (z[].h == ) {
flag = true;
break;
}
assert(SZ(z) != );
vector<node> q; int n = SZ(z), m = n - ;
node r = z[m + ] - z[m];
z.pop_back();
z.pop_back();
z.push_back(r); ROF (i, n - , ) if (z[i] < z[i - ]) swap(z[i], z[i - ]);
} cerr << z[SZ(z) - ].h << endl;
assert(flag);
output(z[].x.head);
output(z[].y.head);
return ;
}

3 casket

3.1 题目描述
Magic Land 上的时间过了若干世纪。
现在,人们谈论着一个传说:从前,他们的祖先来到了一个位于东方的岛屿,那里简直就是另
外一个世界。善于分析与构造的 Magic Land 上的人们总是不明白那里的人们是如何不借助精确的
实验与计算驱动和操纵魔法。偶然地,一个魔法使( Magician)来到了 Magic Land,在临走的时候
留下了一个神奇的盒子,叫做星之器( Casket of star)。虽然不知道这个盒子是做什么的,但是经过
了大量的实验和计算后,人们已经清楚它的一些事实:
1. 星之器之中有 N × M 个区域,可看作分成 N 行和 M 列的格子,每个区域之中有若干单位的
称为“星”的对象,这个对象的最小单位已经被确定,所以,这个数量总是整数。
2. 魔法使可以驱动星之器中位于同一行或同一列的不相邻(有公共边的区域称为相邻的)两个
区域中各 1 单位的“星”,使得它们分别向中心移动  格。
3. 每一次使用 2 中的方法驱动“星”,将会产生魔力,魔法使会得到这一部分魔力。魔力的量等
于这个两个区域之间所间隔的区域数。
这样,我们可以用 N × M 个数表来表示星之器的状态,比如 N = 2, M = 3 时:
2 0 1
5 1 4
1 2 0
5 1 4
当星之器为上图的状态时,通过操纵第一行的第 1 和 3 个区域中的“星”,变为下图所示的状
态,同时,将产生 1 单位的魔力(因为这两个区域之间恰好隔了 1 个区域)。
在经过了进一步的研究之后,人们知道了这个星之器最初的状态( Ini)以及最终被他们得到时
的状态( Fin)。
你希望知道,星之器最多帮助它的拥有者提供了多少的魔力。即:经过一系列上述操作由初态
( Ini)变为终态( Fin),至多产生多少魔力。
需要注意的是,显然操作过程中每个区域内“星”的数量不能是负的,即:如果那个区域已经
没有“星”了,当然就不能继续操作了。
3.2 输入格式
  第一行包含两个正整数 N, M 表示星之器的大小。
  接下来的 N 行,每行包含 M 个自然数: Inii,j ,描绘了初态( Ini)。
  在一个空行后的 N 行,每行包含 M 个自然数: F ini,j ,描绘了终态( Fin)。

3.3 输出格式
  输出一个正整数,表示至多产生的魔力。
3.4 样例输入
5 5
1 0 0 0 1
0 0 0 0 0
0 0 0 0 0
0 1 0 1 1
1 0 0 0 0
0 0 0 0 0
0 0 0 0 1
2 0 0 0 1
0 0 2 0 0
0 0 0 0 0
3.5 样例输出
  7
3.6 数据范围
  30% 的数据中 N 2 ,如样例 2;
  100% 的数据中 1 N, M 200, Inii,j, F ini,j 1000 。
  所有数据保证了至少存在一个操作方法使得星之器由初态变为终态,同时保证了初态与终态不是完全相同的。

 #include <cstdio>
using namespace std;
int N,M;
void outLL(long long a,FILE *fout){
if (a>=)outLL(a/,fout);
fprintf(fout,"%d",(int)(a%));
}
int main()
{
FILE *fin=fopen("casket.in","r"),*fout=fopen("casket.out","w");
fscanf(fin,"%d%d",&N,&M);
long long ret=;
for (int i=;i<N;i++)
for (int j=;j<M;j++){
int x;
fscanf(fin,"%d",&x);
ret+=((long long)x*(long long)i*(long long)i);
ret+=((long long)x*(long long)j*(long long)j);
}
for (int i=;i<N;i++)
for (int j=;j<M;j++){
int x;
fscanf(fin,"%d",&x);
ret-=((long long)x*(long long)i*(long long)i);
ret-=((long long)x*(long long)j*(long long)j);
}
outLL(ret>>,fout);
fprintf(fout,"\n");
fclose(fin);fclose(fout);
return ;
}

以上题解By R_64

这两天get30+30+30+20+100+100

【HNOI模拟By lyp】Day2的更多相关文章

  1. 【HNOI模拟By lyp】Day1

    1 xlk1.1 题目描述 给定一棵大小为 n 的无根树,求满足以下条件的四元组 (a, b, c, d) 的个数: 1. 1 ≤ a < b ≤ n 2. 1 ≤ c < d ≤ n 3 ...

  2. 3194. 【HNOI模拟题】化学(无标号无根树计数)

    Problem 求\(n\)个点的每个点度数不超过\(4\)的无标号无根树个数. Data constraint \(1\le n\le 500\) Solution 尝试着把问题一般化.我们来考虑一 ...

  3. 【2018暑假集训模拟一】Day2题解

    T1 园艺工人的求助 [题目描述]终于,在一段繁忙的训练之后,到了NOIP 的举办的时候.同学们坐上了大巴车,享受着沿途的风光,讨论着未解决的问题,憧憬着NOIP 赛场上切题的样子.很快,大巴车到了大 ...

  4. 【HNOI模拟By YMD】move

    Description 设P(n)为从(0,0)移动到点(n,0)的不同路径数目,移动的方式有以下三种:(x,y)->(x+1,y-1),(x,y)->(x+1,y),(x+y)-> ...

  5. HNOI模拟 Day3.25 By Yqc

    怕老婆 [问题描述] 有一天hzy9819,来到了一座大城市拥有了属于他自己的一双滑板鞋.但是他还是不满足想要拥有属于自己的一栋楼,他来到了一条宽敞的大道上,一个一个记录着这些楼的层数以方便自己选择. ...

  6. HNOI模拟 Day3.23

    一.拓扑(top)[ 题目描述]:给你一个有向二分图,求他的拓扑序列的个数.[ 输入]:第一行两个数 N,M,表示点数和边数.接下来 M 行每行两个数 a,b,表示 a 向 b 有一条有向边.[ 输出 ...

  7. HNOI模拟 Day3.22

    第一题: 盾盾的打字机 (drdrd) [题目描述] 盾盾有一个非常有意思的打字机,现在盾哥要用这台打字机来打出一段文章. 由于有了上次的经验,盾盾预先准备好了一段模板 A 存在了内存中,并以此为基础 ...

  8. NOIp2017——追求那些我一直追求的

    谨以此祭奠我即将爆炸的NOIP2017. $Mingqi\_H\ \ 2017.09.24$ Day -47 突然发现半年来自己从来没有写对过SPFA,最近几天才发现自己的板子一直是错的...赶紧找个 ...

  9. NOIP提高真题整理(2011-2018)-标签

    加粗的后面应该会有相应的简单解析(如果没咕的话:)). 2011 day1 T1:铺地毯:逆着铺 T2:选择客栈:按颜色分类枚举+二分答案 T3:Mayan游戏:大模拟dfs+剪枝 day2 T1:计 ...

随机推荐

  1. python 获取路径

    获取目录路径和文件路径 import osfor root, dirs, files in os.walk(".", topdown=False): # ‘.’为获取脚本所在路径下 ...

  2. BZOJ 4519 不同的最小割 最小割树

    题面: 把每两个点当成源汇,求N*(N-1)个最小割中不同的有多少个 N<=850 分析: 有这样一个结论:一张无向图不同的最小割最多有n-1个. 那么我们一定可以建出一棵树,使得这棵树中每两个 ...

  3. CSU 2018年12月月赛 B 2214: Sequence Magic

    Description 有一个1到N的自然数序列1,2,3,...,N-1,N. 我们对它进行M次操作,每次操作将其中连续的一段区间 [Ai,Bi][Ai,Bi] (即第Ai个元素到第Bi个元素之间的 ...

  4. 笔试算法题(38):并查集(Union-Find Sets)

    议题:并查集(Union-Find Sets) 分析: 一种树型数据结构,用于处理不相交集合(Disjoint Sets)的合并以及查询:一开始让所有元素独立成树,也就是只有根节点的树:然后根据需要将 ...

  5. mysql You can't specify target table 'sys_org_relation' for update in FROM clause 删除表条件不能直接包含该表

    mysql中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表( ...

  6. Python之微信-微信机器人

    一 简介 二 登录微信 三 微信好友男女比例 四 微信好友地域分布 五 微信聊天机器人 一 简介 wxpy基于itchat,使用了 Web 微信的通讯协议,,通过大量接口优化提升了模块的易用性,并进行 ...

  7. java获取类的全类名----类名.class.getName()的作用是获取这个类的全类名

    类名.class.getName()的作用是获取这个类的全类名

  8. 2016 Multi-University Training Contest 3-1011.Teacher Bo,暴力!

    Teacher Bo                                                         Time Limit: 4000/2000 MS (Java/Ot ...

  9. 開啟活動監視器 (SQL Server Management Studio)

    本主題描述如何開啟 [活動監視器] 來取得有關 SQL Server 處理序以及這些處理序如何影響目前 SQL Server 執行個體的資訊. 此外,本主題也描述如何設定 [活動監視器] 的重新整理間 ...

  10. 【Github】如何删除github上的项目

    1.登录你的githup账户,进入到仓库页面如下图 2.点击setting进入到该仓库的设置界面 3.复制一下仓库的名称,然后下拉到最后,点击delete this repository 4.将刚刚复 ...