CH Round #55 - Streaming #6 (NOIP模拟赛day2)
A.九九归一
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2355%20-%20Streaming%20%236%20(NOIP模拟赛day2)/九九归一
题解:题目意思就是问 a是不是n的一个原根
首先如果 gcd(a,n)!=1 显然不可能 输出0
然后我们有性质
若 gcd(a,n)==1 则 a模n的阶k|phi(n)
所以就可以枚举phi(n)的约数判定了
复杂度题解中说是 q*logn*logn*logn的。。。
代码:
- #include<cstdio>
- #include<cstdlib>
- #include<cmath>
- #include<cstring>
- #include<algorithm>
- #include<iostream>
- #include<vector>
- #include<map>
- #include<set>
- #include<queue>
- #include<string>
- #define inf 1000000000
- #define maxn 100000
- #define maxm 500+100
- #define eps 1e-10
- #define ll long long
- #define pa pair<int,int>
- #define for0(i,n) for(int i=0;i<=(n);i++)
- #define for1(i,n) for(int i=1;i<=(n);i++)
- #define for2(i,x,y) for(int i=(x);i<=(y);i++)
- #define for3(i,x,y) for(int i=(x);i>=(y);i--)
- using namespace std;
- inline int read()
- {
- int x=,f=;char ch=getchar();
- while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
- while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
- return x*f;
- }
- int n,tot,a[maxn];
- int power(int xx,int yy)
- {
- ll t=,x=xx,y=yy;
- for(;y;y>>=,x=(x*x)%n)
- if(y&)t=(t*x)%n;
- return t;
- }
- inline bool check(int m)
- {
- for1(i,tot)if(power(m,a[i])==)return ;
- return ;
- }
- inline int gcd(int x,int y){return y?gcd(y,x%y):x;}
- int main()
- {
- freopen("input.txt","r",stdin);
- freopen("output.txt","w",stdout);
- n=read();
- int x=n,y=n;
- for2(i,,sqrt(n))
- if(x%i==)
- {
- y=(y/i)*(i-);
- while(x%i==)x/=i;
- }
- if(x!=)y=(y/x)*(x-);
- for1(i,y)if(y%i==)a[++tot]=i;tot--;
- int cs=read();
- while(cs--)
- {
- int m=read();
- if(gcd(m,n)!=)printf("");
- else if(check(m))printf("");
- else printf("");
- }
- printf("\n");
- return ;
- }
B.LCA的统计
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2355%20-%20Streaming%20%236%20(NOIP模拟赛day2)/LCA的统计
题解:首先枚举是一定要的,我们枚举 lca(i,j)然后看一下什么样的i,j是我们枚举的这个值。
稍微想想会发现f[x]=w[x]*((s[x]*s[x])-sigma(s[y]*s[y])) y是x 的子树
然后防止爆long long 就行了
代码:
- #include<cstdio>
- #include<cstdlib>
- #include<cmath>
- #include<cstring>
- #include<algorithm>
- #include<iostream>
- #include<vector>
- #include<map>
- #include<set>
- #include<queue>
- #include<string>
- #define inf 1000000000
- #define maxn 1500000
- #define maxm 500+100
- #define eps 1e-10
- #define ll long long
- #define pa pair<int,int>
- #define for0(i,n) for(int i=0;i<=(n);i++)
- #define for1(i,n) for(int i=1;i<=(n);i++)
- #define for2(i,x,y) for(int i=(x);i<=(y);i++)
- #define for3(i,x,y) for(int i=(x);i>=(y);i--)
- #define mod 1000000007
- using namespace std;
- inline int read()
- {
- int x=,f=;char ch=getchar();
- while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
- while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
- return x*f;
- }
- struct edga{int go,next;}e[maxn];
- int n,tot,head[maxn];
- ll s[maxn],f[maxn],w[maxn];
- inline void insert(int x,int y)
- {
- e[++tot].go=y;e[tot].next=head[x];head[x]=tot;
- }
- void dfs(int x)
- {
- f[x]=;s[x]=w[x];
- for(int i=head[x],y;i;i=e[i].next)
- {
- dfs(y=e[i].go);
- f[x]=((f[x]-w[x]*(s[y]*s[y]%mod))%mod+mod)%mod;
- s[x]=(s[x]+s[y])%mod;
- }
- f[x]=(f[x]+w[x]*(s[x]*s[x]%mod))%mod;
- }
- int main()
- {
- freopen("input.txt","r",stdin);
- freopen("output.txt","w",stdout);
- n=read();w[]=read()%mod;
- for2(i,,n)insert(read(),i),w[i]=read()%mod;
- dfs();
- ll ans=;
- for1(i,n)ans=(ans+f[i])%mod;
- printf("%lld\n",ans);
- return ;
- }
C.四驱兄弟
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2355%20-%20Streaming%20%236%20(NOIP模拟赛day2)/四驱兄弟
题解:猜想大概是MST,然后发现不会证,就打了弃疗了。结果A了。。。
出题人是这样说的:
考虑图连通的情况,那么假设最小生成树不是第k小边最小生成树,就可以把两个树各取一点变成一个更小的生成树,就矛盾了
没想到我用map+cin居然没T
代码:
- #include<cstdio>
- #include<cstdlib>
- #include<cmath>
- #include<cstring>
- #include<algorithm>
- #include<iostream>
- #include<vector>
- #include<map>
- #include<set>
- #include<queue>
- #include<string>
- #define inf 1100000000
- #define maxn 200000+1000
- #define maxm 500+100
- #define eps 1e-10
- #define ll long long
- #define pa pair<int,int>
- #define for0(i,n) for(int i=0;i<=(n);i++)
- #define for1(i,n) for(int i=1;i<=(n);i++)
- #define for2(i,x,y) for(int i=(x);i<=(y);i++)
- #define for3(i,x,y) for(int i=(x);i>=(y);i--)
- #define mod 1000000007
- using namespace std;
- typedef map<string,int>::const_iterator cit;
- typedef map<string,int>::value_type vt;
- inline int read()
- {
- int x=,f=;char ch=getchar();
- while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
- while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
- return x*f;
- }
- map<string,int>mp;
- struct rec{int u,v,w;}e[maxn];
- int n,m,tot,a[maxn],fa[maxn];
- string s;
- inline bool cmp(rec a,rec b)
- {
- return a.w<b.w;
- }
- inline int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
- int main()
- {
- freopen("input.txt","r",stdin);
- freopen("output.txt","w",stdout);
- n=read();m=read();
- for1(i,m)
- {
- e[i].w=read();
- cin>>s;
- cit j=mp.find(s);
- if(j!=mp.end())e[i].u=j->second;
- else
- {
- mp.insert(mp.begin(),vt(s,++tot));
- e[i].u=tot;
- }
- cin>>s;
- j=mp.find(s);
- if(j!=mp.end())e[i].v=j->second;
- else
- {
- mp.insert(mp.begin(),vt(s,++tot));
- e[i].v=tot;
- }
- }
- sort(e+,e+m+,cmp);
- for1(i,tot)fa[i]=i;
- int j=;
- for1(i,n)
- {
- while(j<=m&&find(e[j].u)==find(e[j].v))j++;
- if(j>m)a[i]=inf;
- else
- {
- a[i]=e[j].w;
- fa[find(e[j].u)]=find(e[j].v);
- }
- j++;
- }
- for1(i,n)
- if(a[i]==inf)printf("INF\n");else printf("%d\n",a[i]);
- return ;
- }
AK了好高兴,不过还是运气比较好的原因。jiry半小时AK实在不能再orz
CH Round #55 - Streaming #6 (NOIP模拟赛day2)的更多相关文章
- CH Round #55 - Streaming #6 (NOIP模拟赛day2)解题报告
T1九九归一 描述 萌蛋在练习模n意义下的乘法时发现,总有一些数,在自乘若干次以后,会变成1.例如n=7,那么5×5 mod 7=4,4×5 mod 7=6,6×5 mod 7=2,2×5 mod 7 ...
- CH Round #55 - Streaming #6 (NOIP模拟赛day2)(被虐哭)
http://ch.ezoj.tk/contest/CH%20Round%20%2355%20-%20Streaming%20%236%20%28NOIP%E6%A8%A1%E6%8B%9F%E8%B ...
- CH Round #49 - Streaming #4 (NOIP模拟赛Day2)
A.二叉树的的根 题目:http://www.contesthunter.org/contest/CH%20Round%20%2349%20-%20Streaming%20%234%20(NOIP 模 ...
- CH Round #58 - OrzCC杯noip模拟赛day2
A:颜色问题 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2358%20-%20OrzCC杯noip模拟赛day2/颜色问题 题解:算一下每个仆人到它的目的地 ...
- CH Round #48 - Streaming #3 (NOIP模拟赛Day1)
A.数三角形 题目:http://www.contesthunter.org/contest/CH%20Round%20%2348%20-%20Streaming%20%233%20(NOIP模拟赛D ...
- CH Round #54 - Streaming #5 (NOIP模拟赛Day1)
A.珠 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2354%20-%20Streaming%20%235%20(NOIP模拟赛Day1)/珠 题解:sb题, ...
- CH Round #54 - Streaming #5 (NOIP模拟赛Day1)解题报告
最近参加了很多CH上的比赛呢~Rating--了..题目各种跪烂.各种膜拜大神OTZZZ T1珠 描述 萌蛋有n颗珠子,每一颗珠子都写有一个数字.萌蛋把它们用线串成了环.我们称一个数字串是有趣的,当且 ...
- CH Round #54 - Streaming #5 (NOIP模拟赛Day1)(被虐瞎)
http://ch.ezoj.tk/contest/CH%20Round%20%2354%20-%20Streaming%20%235%20%28NOIP%E6%A8%A1%E6%8B%9F%E8%B ...
- 队爷的讲学计划 CH Round #59 - OrzCC杯NOIP模拟赛day1
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2359%20-%20OrzCC杯NOIP模拟赛day1/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
随机推荐
- sql server 扩展存储过程
C# 代码 using Microsoft.SqlServer.Server; using System; using System.Collections.Generic; using System ...
- ListView的优化
1. ListView须要设置adapter,它的item是通过adapter的方法getView(int position, View convertView, ViewGroup parent)获 ...
- Swift开发语法
Swift开发入门 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 2014 年,在 Apple WWDC 发布 历史 2010 年 7 月,苹果开发者 ...
- mysqlbinlog查看 binlog日志报错mysqlbinlog: unknown variable 'default-character-set=utf8mb4'
今天,查看mysql slave节点 binlog日志信息时,执行mysqlbinlog命令报错mysqlbinlog: unknown variable 'default-character-set ...
- 从JPG中获取缩略图
using System; using System.Drawing; using System.Collections; using System.ComponentModel; using Sys ...
- yii2 添加模块过程
本文以Yii2基本应用程序模板为例,介绍下向该框架下加入新模块的过程: 1. 新建模块相关目录与文件 step 1: 新建目录结构 首先在根目录下新建modules目录,然后在该目录下面添加模块目 ...
- 单篇文章JS模拟分页
废话部分 前两天做了一个前台分页插件,支持ajax读取数据绑定前台 和 url带页码参数跳转两种方式.于是稍加改动,做了一个单篇文章js模拟分页的代码,为什么说是模拟分页呢?因为在服务器响应HTML请 ...
- PHP对表单提交特殊字符的过滤和处理
PHP关于表单提交特殊字符的处理方法做个汇总,主要涉及htmlspecialchars/addslashes/stripslashes/strip_tags/mysql_real_escape_str ...
- Nginx环境下常见的开源项目重写汇总
我们做PHP开发的,作者寒冰我觉得大部分时候都在跟开源的系统打交道.比如:Discuz.PHPCMS.ecshop.wordpress等开源系统.一般我们都是在本地搭建测试环境,用的web服务器都是a ...
- start with connect by prior学习
这是oracle中的树查询,查询出来的数据会根据上下级组成树的结构.select * from mw_sys.mwt_pd_deps start with obj_id = '63EBEC8E-E76 ...