EXAM-2018-08-21

自己真的是菜的恐怖

D:Fence Building

欧拉公式:V-E+F=2

在平面中:V为顶点个数,E为边数,F为区域数

在简单几何体中:V为顶点个数,E为边数,F为面数

考虑到区域最多,每个交点最多由两条线构成。 顶点数为C(n,4);边数为C(n,2)+2*C(n,4) 然后减去圆外的.

I: A Possible Tree

  • 题意: 给定一棵带权树的形态, 但是并不知道每天条边的具体权重. 然后给m个信息, 信息格式为u v val, 表示在树上u 到 v 的路径上经过的边的权重的异或和为val, 问前面最多有多少个信息是不冲突的.
  • 题解:从冲不冲突应该想到使用并查集,通过那m次信息构建最小生成树,如果不属于这个集合的就加入集合,属于的就判断是否与之前的最小生成树矛盾。主要是在这个集合内的两点,可以很轻松查询到。(画图理解)val[]记录根节点到该点的距离,然后通过find时路径压缩的操作和add操作更新val[]。这道题写起来很简单,就是难想到。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e5+7;
int fa[maxn],val[maxn];
int n;
template<class T>
void read(T &res){
res=0;
T f=1;
char c=getchar();
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;
}
void init()
{
for(int i=0;i<=n;i++) fa[i]=i;
memset(val,0,sizeof(val));
}
int findd(int u){
if(u!=fa[u]){
int v=fa[u];
fa[u]=findd(v);
val[u]^=val[v];
}
return fa[u];
}
bool add(int u,int v,int w){
int a=findd(u);
int b=findd(v);
if(a!=b){
val[a]=val[v]^val[u]^w;
fa[a]=b;
return true;
}
if((val[u]^val[v])!=w) return false;
else return true;
}
int main(){
int t;
read(t);
int u,v,m,w;
while(t--){
read(n);
read(m);
init();
for(int i=1;i<n;i++){
read(u);
read(v);
}
int flag=0;
for(int i=1;i<=m;i++){
read(u);
read(v);
read(w);
if(!add(u,v,w)&&!flag){
flag=i;
}
}
printf("%d\n",flag-1);
}
return 0;
}

H Count Numbers

cur[n]表示数位和为n的方案数,ans[n]表示前n位的答案。 我们发现,比如说4,方案数等于cur[2]+cur[2],cur[3]+cur[1],cur[4]+cur[0]。通过枚举最后一位就可以得到答案。

cur[i]=SUM cur[i-j];

而和就是前面的位* 10加上与i的差*与i的差的数的方案数。

ans[i]=SUM ans[i-j]*10+j*cur[i-j];

接下来就是矩阵快速幂 枚举18位 构成18*18的矩阵

然后注意写法就好。__int128

#include <bits/stdc++.h>
#define ll long long
using namespace std;
template<class T>
void read(T &res){
res=0;
T f=1;
char c=getchar();
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;
}
struct mac{
ll f[20][20];
mac(){
for(int i=0;i<20;i++){
for(int j=0;j<20;j++){
f[i][j]=0;
}
}
}
void init()
{
for(int i=0;i<20;i++){ f[i][i]=1;
}
}
};
int p;
mac operator*(mac a,mac b)
{
mac c;
for(int i=0;i<18;i++){
for(int j=0;j<18;j++){
if(a.f[i][j])
for(int k=0;k<18;k++){
if(b.f[j][k]){
c.f[i][k]=c.f[i][k]+(a.f[i][j]%p*b.f[j][k]%p)%p;
if(c.f[i][k]>=p) c.f[i][k]-=p;
}
}
}
}
return c;
}
mac qpow(mac a,__int128 k)
{
mac c;
c.init();
while(k>0){
if(k&1) c=c*a;
a=a*a;
k>>=1;
}
return c;
}
ll ans[18],cur[18];
int main()
{
int t;int x,y;
mac a,b;
read(t);
cur[0]=1;
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
cur[i]+=cur[i-j];
ans[i]+=10*ans[i-j]+j*cur[i-j];
}
}
for(int i=0;i<9;i++) a.f[i][0]=10;
for(int i=9;i<18;i++) a.f[i][0]=i-8;
for(int i=1;i<9;i++){
a.f[i-1][i]=1;
}
for(int i=10;i<18;i++){
a.f[i-1][i]=1;
}
for(int i=9;i<18;i++){
a.f[i][9]=1;
}
// for(int i=0;i<18;i++){
// for(int j=0;j<18;j++){
// cout<<setw(3)<<a.f[i][j];
// }
// cout<<endl;
// }
while(t--){
read(x);
read(y);
read(p);
for(int i=0;i<9;i++) b.f[0][i]=ans[9-i]%p;
for(int j=9;j<18;j++) b.f[0][j]=cur[18-j]%p;
// for(int i=0;i<18;i++){
// cout<<b.f[0][i]<<" ";
// }
__int128 k=1;
for(int i=1;i<=y;i++) k*=(__int128)x;
//cout<<k<<endl;
if(k<=9){
printf("%lld\n",ans[k]%p);
}
else{
mac ak=b*qpow(a,k-9);
printf("%lld\n",ak.f[0][0]);
}
}
return 0;
}
/*5
3 2 100000
*/

EXAM-2018-08-21的更多相关文章

  1. 2018.08.21 bzoj4668: 冷战(并查集+启发式合并)

    传送门 可以发现需要维护连通性和两点连通时间. 前者显然是并查集的常规操作,关键就在于如何维护两点的连通时间. 然后会想到这个时候不能用路径压缩了,因为它会破坏原本树形集合的结构,因此可以启发式按si ...

  2. 2018.08.21 NOIP模拟 xorand(01trie)

    xorand 描述 有q次操作,每次操作是以下两种: 1. 加入一个数到集合中 2. 查询,查询当前数字与集合中的数字的最大异或值,最大and值,最大or值 输入 第一行1个正整数Q表示操作次数 接下 ...

  3. 2018.08.21 NOIP模拟 unlock(模拟+找规律)

    unlock 描述 经济危机席卷全球,L国也收到冲击,大量人员失业. 然而,作为L国的风云人物,X找到了自己的新工作.从下周开始,X将成为一个酒店的助理锁匠,当然,他得先向部门领导展示他的开锁能力. ...

  4. Microsoft Artificial Intelligence Conference(2018.05.21)

    时间:2018.05.21地点:北京嘉丽大酒店

  5. China Intelligent Office Summit(2018.11.21)

    时间:2018.11.21地点:中关村软件园国际会议中心

  6. Intel Digital Innovation Industry Summit(2018.08.17)

    时间:2018.08.17地点:北京金隅喜来登大酒店

  7. Trusted Cloud Summit(2018.08.14)

    时间:2018.08.14地点:北京国际会议中心

  8. (转)新手C#SQL语句的学习2018.08.13

    1.创建数据库(create) CREATE DATABASE database-name 2.删除数据库(drop) drop database dbname 3.备份数据库 --- 创建 备份数据 ...

  9. 新手C#SQLServer在程序里实现语句的学习2018.08.12

    从C#中连接到SQL Server数据库,再通过C#编程实现SQL数据库的增删改查. ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤: 第一,使用SqlConnection对象连接数据 ...

  10. 新手C#SQL Server使用记录2018.08.10

    主键(PrimaryKey):主键就是每个数据行(记录)的唯一标识,不会有重复值的列(字段)才能当做主键.一个表可以没有主键,但是这样会很难处理表,因此一般情况表都要设置主键. 主键有两张选用策略,分 ...

随机推荐

  1. 吴裕雄--天生自然 JAVASCRIPT开发学习:switch 语句

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. 尝试用kotlin做一个app(写在前面)

    学kotlin的目的好像就是做一个app,不一定有什么想做的项目,只是单纯想掌握这一门技术,确切地说只是单纯想学会做app.对于概念的东西,我也没兴趣深究,用得到的学一下,用不到的,就算了.我也不知道 ...

  3. Codeforces 1299A/1300C - Anu Has a Function

    题目大意: 给定一种函数F(x,y)=(x|y)-y,| 即按位或运算 给定一个长度为n的数组a[1],a[2],a[3]...a[n] 可以重新排列数组a,使得 F ( ...... F ( F ( ...

  4. 新发布的廉价版iPhoneXR值得购买吗?

    每年苹果九月份的发布会,都是一场声势浩大的全民狂欢"大趴体".其中最兴奋的,自然就是各路段子手--就指望着苹果发布会来提供一年的笑料呢!而今年苹果发布会召开之后,网上最流行的就是下 ...

  5. Jquery输入框焦点事件及鼠表事件汇总

    对于用户的输入框input,我们常常会用ajax来实现与后台的交互.输入框的内容我们可以用.val()方法获取,对于输入框内的事件,我们常用到焦点,如:input.blur.focus.... inp ...

  6. Spring框架-IOC和AOP

    IOC:它并不是一种技术实现,而是一种设计思想.在任何一个有实际开发意义的程序项目中,我们会使用很多类来描述它们特有的功能,并且通过类与类之间的相互协作来完成特定的业务逻辑.这个时候,每个类都需要负责 ...

  7. [极客大挑战 2019]Secret File

    0x00知识点 没有过滤file 使用php的file伪协议去读取文件 ?file=php://filter/convert.base64-encode/resource=flag.php 0x01解 ...

  8. Maven--Cargo远程部署

    参考:https://www.digitalocean.com/community/questions/how-to-access-tomcat-8-admin-gui-from-different- ...

  9. 更改php.ini配置

    vi /etc/php.ini #编辑修改 @ini_set('memory_limit',        '64M');                                      / ...

  10. 1. 现代 javascript 用法 简介 及 babel

    简介 包含 ECMAScript 基本概念,babel 使用 ,eslint 使用 以及新语法的介绍 和使用经验 ECMAScript 概念 ECMASctipt 是一种由 Ecma (前身为欧洲计算 ...