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/队爷的讲学计划 题解:刚开始理解题意理解了好半天,然后发 ...
随机推荐
- cocos日记
n/2/2015 ADT E:\All Setup\eclipse_past\Eclipse_plugins_ADT 15/2/2015 配置cocos win32 开发环境 链接:htt ...
- 二分图的最大匹配-hdu-3729-I'm Telling the Truth
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3729 题目意思: 有n个学生,老师询问每个学生的排名,每个学生都告诉了一个排名区间,求可能的最多的学 ...
- Codeforces 362D Fools and Foolproof Roads 构造题
题目链接:点击打开链接 题意: 给定n个点 m条边的无向图 须要在图里添加p条边 使得图最后连通分量数为q 问是否可行,不可行输出NO 可行输出YES,并输出加入的p条边. set走起.. #incl ...
- EventBus 事件总线 案例
简介 地址:https://github.com/greenrobot/EventBus EventBus是一个[发布 / 订阅]的事件总线.简单点说,就是两人[约定]好怎么通信,一人发布消息,另外一 ...
- Python 常量与变量
先在lib文件夹中定义一个模块 class _const(object): class ConstError(TypeError):pass def __setattr__(self, name, v ...
- tomcat加载不了spring-webjar终极解决办法
Problems: I included: all Spring libs, Apache Tomcat 7.0 library in Build Path but it still gives er ...
- ant打包命令
学习ant打包命令.发布到以上tomcat还未做集成部署,无法添加到jenkins中. http://blog.csdn.net/telnetor/article/details/7015935 ht ...
- (转)JQuery中$.ajax()方法参数详解
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...
- Warning: World-writable config file '/etc/my.cnf' is ignored
1. 问题描述: 重启mysql服务时出现以下信息: Warning: World-writable config file '/etc/my.cnf' is ignored 出现这种情况的原因是:m ...
- Nginx配置域名转发实例
域名:cps.45wan.com 所在阿里云主机:123.35.9.12 45wan没有在阿里云备案 67wan已经在阿里云备案 阿里云主机(假如123.35.9.12)上原来的nginx配置: ...