*注意:这套题目应版权方要求,不得公示题面。

  表示十分怀疑出题人水平,C题数据和标程都是错的。有原题,差评。

Problem A XOR

题目大意

  最小异或生成树

  出门左拐Codeforces 888G。

Code

 #include <iostream>
#include <cstdlib>
#include <cstdio>
#include <vector>
#ifndef WIN32
#define Auto "%lld"
#else
#define Auto "%I64d"
#endif
using namespace std;
typedef bool boolean;
#define ll long long const int Mask = << ;
const signed int inf = (signed) (~0u >> ); typedef class TrieNode {
public:
TrieNode* ch[];
}TrieNode; TrieNode pool[];
TrieNode* top; TrieNode* newnode() {
top->ch[] = top->ch[] = NULL;
return top++;
} typedef class Trie {
public:
TrieNode* rt; void reset() {
top = pool;
rt = newnode();
} void insert(int x) {
TrieNode* p = rt;
int mask = Mask;
while (mask) {
int c = ((x & mask) ? () : ());
if (!p->ch[c])
p->ch[c] = newnode();
p = p->ch[c], mask >>= ;
}
} int query(int x) {
TrieNode* p = rt;
int mask = Mask, rt = ;
while (mask) {
int c = ((x & mask) ? () : ());
if (p->ch[c])
p = p->ch[c];
else
p = p->ch[c ^ ], rt += mask;
mask >>= ;
}
return rt;
}
}Trie; int n;
int* ar;
Trie tr; inline void init() {
scanf("%d", &n);
ar = new int[(n + )];
for (int i = ; i <= n; i++)
scanf("%d", ar + i);
} ll dividing(int tem, vector<int>& vs) {
if (!tem)
return ;
vector<int> v0, v1;
for (int i = ; i < (signed) vs.size(); i++)
if (vs[i] & tem)
v1.push_back(vs[i]);
else
v0.push_back(vs[i]);
if (!v0.size())
return dividing(tem >> , v1);
if (!v1.size())
return dividing(tem >> , v0);
tr.reset();
for (int i = ; i < (signed) v0.size(); i++)
tr.insert(v0[i]);
int rt = inf;
for (int i = , cmp; i < (signed) v1.size(); i++) {
cmp = tr.query(v1[i]);
rt = min(cmp, rt);
}
return rt * 1ll + dividing(tem >> , v0) + dividing(tem >> , v1);
} inline void solve() {
vector<int> vs;
for (int i = ; i <= n; i++)
vs.push_back(ar[i]);
printf(Auto, dividing(Mask, vs));
} int main() {
freopen("A.in", "r", stdin);
freopen("A.out", "w", stdout);
init();
solve();
return ;
}

Problem A

Problem B GCD

题目大意

  最小gcd生成树,点权1~n。

  加速Kruskal的过程。边排序的时候把编号也作为关键字。

Code

 #include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std;
typedef bool boolean; int n; inline void init() {
scanf("%d", &n);
} int *uf; int find(int x) {
return (uf[x] == x) ? (x) : (uf[x] = find(uf[x]));
} long long res = ;
inline void solve() {
uf = new int[(n + )];
for (int i = ; i <= n; i++)
uf[i] = i;
for (int i = n >> ; i; i--) {
for (int j = i << ; j <= n; j += i) {
if (find(i) != find(j)) {
res += i;
uf[find(i)] = find(j);
}
}
}
cout << res << endl;
} int main() {
freopen("B.in", "r", stdin);
freopen("B.out", "w", stdout);
init();
solve();
return ;
}

Problem B

Problem C SEG

题目大意

  平面的三角剖分。问边数的奇偶性。

  mmp,最开始理解错题意了。是说咋觉得不可做。

  可以求出凸包,设凸包上的点数和边数均为$m$。然后设顶点总数为$V$,边数为$E$,分割成的三角形的个数为$x$。

  则根据欧拉公式有:$x + 1 + V - \frac{3x + m}{2} = 2$

  解得:$x = 2n - m - 2$,由此得到边数。

  另外这道题数据似乎对极角序不是很友好。

Code

 #include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#ifndef WIN32
#define Auto "%lld"
#else
#define Auto "%I64d"
#endif
using namespace std;
typedef bool boolean; #define ll long long typedef class Point {
public:
ll x, y; Point(ll x = 0.0, ll y = 0.0):x(x), y(y) { } boolean operator < (Point b) const {
if (x ^ b.x)
return x < b.x;
return y < b.y;
}
}Point, Vector; Point operator - (Point a, Point b) {
return Point(a.x - b.x, a.y - b.y);
} ll cross(Point a, Point b) {
return a.x * b.y - a.y * b.x;
} int n, m;
Point* ps; inline void init() {
scanf("%d", &n);
ps = new Point[(n + )];
for (int i = ; i <= n; i++)
scanf(Auto""Auto, &ps[i].x, &ps[i].y);
} int st;
Point* tp; inline void solve() {
tp = new Point[(n + )];
sort(ps + , ps + n + );
for (int i = ; i <= n; i++) {
while (st > && cross(tp[st] - tp[st - ], ps[i] - tp[st]) <= )
st--;
tp[++st] = ps[i];
}
m += st - , st = ;
for (int i = n; i; i--) {
while (st > && cross(tp[st] - tp[st - ], ps[i] - tp[st]) <= )
st--;
tp[++st] = ps[i];
}
m += st; int A = ((n << ) - m) - ;
int E = ( * A + m) >> ;
if (E & )
puts("Alice");
else
puts("Bob");
} int main() {
init();
solve();
return ;
}

Problem C

2018.9.25 NOIP模拟赛的更多相关文章

  1. 2018.9.22 NOIP模拟赛

    *注意:这套题目应版权方要求,不得公示题面. 从这里开始 Problem A 妹子 Problem B 旅程 Problem C 老大 因为业务水平下滑太严重,去和高一考NOIP模拟,sad... P ...

  2. 2018.10.16 NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...

  3. EZ 2018 07 06 NOIP模拟赛

    又是慈溪那边给的题目,这次终于没有像上次那样尴尬了, T1拿到了较高的暴力分,T2没写炸,然后T3写了一个优雅的暴力就203pts,Rank3了. 听说其它学校的分数普遍100+,那我们学校还不是强到 ...

  4. 2018.02.12 noip模拟赛T2

    二兵的赌注 Description游戏中,二兵要进入了一家奇怪的赌场.赌场中有n个庄家,每个庄家都可以猜大猜小,猜一次一元钱.每一次开彩前,你都可以到任意个庄家那里下赌注.如果开彩结果是大,你就可以得 ...

  5. 2017 10.25 NOIP模拟赛

    期望得分:100+40+100=240 实际得分:50+40+20=110 T1 start取了min没有用,w(゚Д゚)w    O(≧口≦)O T3 代码3个bug :数组开小了,一个细节没注意, ...

  6. 2018/3/20 noip模拟赛 5分

    T1 傻逼题,写了cmp没sort,5分. T2 树上差分,写了树剖线段树,超时,0分. T3 树归,0分. 我是个zz

  7. 2018/3/18 noip模拟赛 20分

    T1 dp,特别裸特别简单,我放弃了写了个dfs. T2 树归,特别裸特别简单,我不会写. T3 贪心二分不知道什么玩意儿反正不会写就对了. 我是个智障

  8. 2018.10.03 NOIP+ 模拟赛 解题报告

    得分: \(30+5+0=35\)(考得真不咋滴) \(T1\):奥义商店(点此看题面) 以为很简单,对着这题想了一个多小时,最后果断打了个暴力交了... ... 看完题解发现其实也不是很难. 对于\ ...

  9. 2018.10.30 NOIp模拟赛T2 数字对

    [题目描述] 小 H 是个善于思考的学生,现在她又在思考一个有关序列的问题.        她的面前浮现出一个长度为 n 的序列{ai},她想找出一段区间[L, R](1 <= L <= ...

随机推荐

  1. Linux下的awk文本分析命令实例(二)

    awk实现求和.平均.最大值和最小值的计算操作 准备和数据文件 [finance@master2-dev ~]$ cat data.txt 求和 [finance@master2-dev ~]$ ca ...

  2. 解决Office 2016客户端如何同SharePoint Server2016安装在一起

    前言 Microsoft Office 2016 客户端默认使用新式验证. 在某些配置中,新式验证不受安装有 SharePoint Server 2016 的 Office 2016 客户端的支持,例 ...

  3. iOS - 记住用户登录状态保存用户名密码

    我们在使用APP时常用的一个功能:用户第一次进入APP时自动进入登录注册页,提示用户注册登录,用户登录成功后才进入主页,再次进入APP时,不用再次登录就直接进到主页了,就算杀掉该APP进程再次进入,依 ...

  4. windows系统关闭某个端口的服务(以443端口为例子)

    1.查看443被什么服务占用 netstat -ano | findstr 443 查看到443端口被pid为5140的服务占用了 2.去到任务管理器->任务 找到PID为5140的服务,然后停 ...

  5. POJ - 3279(枚举+暴力)

    Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 14297   Accepted: 5257 Descrip ...

  6. Sring 类的例子

    public class ZongHe {     public static void main(String[] args) {     function1();            funct ...

  7. 微信小程序中显示与隐藏(hidden)

    1.wx.wxml页面部分 <view bindtap='click'>点击</view> //这是显示隐藏的部分 <view hidden="{{hidden ...

  8. MySQL数据库导出

    因为业务需要,把MySQL查询的数据导出成csv文件,操作在Navicat中完成. 首选用SELECT语句查询数据,然后Navicat的导出,然后选csv,选路径,再加上首栏就可以了

  9. Oracle课程档案,第二天

    salary:工资 order by:排序 desc:降序 hire:雇佣 单行函数 一周有七天 一月不一定只有30天 trunc:截取 dual:空表 last:最后 month:月份 round: ...

  10. 20175320 2018-2019-2 《Java程序设计》第3周学习总结

    20175320 2018-2019-2 <Java程序设计>第3周学习总结 教材学习内容总结 本周学习了教材的第四章的内容.在这章中介绍了面向对象编程的概念以及Java编程中的类与对象, ...