前四题比较水,E我看出是欧拉函数傻逼题,但我傻逼不会,百度了下开始学,最后在加时的时候A掉了

AC:ABCDE Rank:182 Rating:2193+34->2227 终于橙了,不知道能待几天

A.A Serial Killer

题目大意:一开始给你两个字符串,每次给你当前两个串中的一个和一个新的串,用新的串换掉旧的,每次输出当前的串。(次数<=1000)

思路:二逼题

#include<iostream>
using namespace std;
int main()
{
string a,b,c,d;int n;
cin>>a>>b>>n;
cout<<a<<' '<<b<<endl;
while(n--)
{
cin>>c>>d;
if(a==c)a=d;else b=d;
cout<<a<<' '<<b<<endl;
}
}

B.Sherlock and his girlfriend

题目大意:给2~n+1染色,要求任意2~n+1中的数,它的质因数(自己除外)和它颜色不同,求最小染色数和方案。(n<=100,000)

思路:质数染成一种,合数染成另一种,特判n<3的情况。

#include<cstdio>
#define MN 100000
int f[MN+];
int main()
{
int n,i,j;
scanf("%d",&n);++n;
for(i=;i*i<=n;++i)if(!f[i])
for(j=i*i;j<=n;j+=i)f[j]=;
puts(n<?"":"");
for(i=;i<=n;++i)printf("%d ",f[i]+);
}

C.Molly's Chemicals

题目大意:给定长度为n的数字序列和一个数k,求序列中有多少子串和为k的次幂。(n<=100,000,1<=|k|<=10)

思路:先预处理出可能用上的k的次幂(要特殊考虑k为±1),把数列前缀和,对于每个si枚举一个k的次幂,求出有多少个j<i满足si-sj=k的次幂,可以用map维护,复杂度O(nlog^2)。

#include<cstdio>
#include<iostream>
#include<map>
#define ll long long
using namespace std;
char B[<<],*S=B,C;int X,F;
inline int read()
{
for(F=;(C=*S++)<''||C>'';)if(C=='-')F=-;
for(X=C-'';(C=*S++)>=''&&C<='';)X=(X<<)+(X<<)+C-'';
return X*F;
}
#define INF 100000000000000LL
map<ll,int> mp;
ll p[];int pn;
int main()
{
fread(B,,<<,stdin);
int n,k,i,j;ll x,ans=;
n=read();k=read();
for(x=;x>=-INF&&x<=INF&&!mp[x];x*=k)p[++pn]=x,mp[x]=;
mp.clear();
for(i=x=;i<n;++i)
{
++mp[x];x+=read();
for(j=;j<=pn;++j)ans+=mp[x-p[j]];
}
cout<<ans;
}

D.The Door Problem

题目大意:N个门,门有初始状态(0/1),M个开关,每个开关可以一次性改变若干的门的开关状态,保证每个门恰被两个开关控制,求是否可能同时打开所有门。(N,M<=100,000)

思路:2-SAT裸题,每个门给对应的两个开关加上一个异或的限制关系,也可以并查集、DFS之类的,总之很水。

#include<cstdio>
char B[<<],*S=B,C;int X;
inline int read()
{
while((C=*S++)<''||C>'');
for(X=C-'';(C=*S++)>=''&&C<='';)X=(X<<)+(X<<)+C-'';
return X;
}
#define MN 100000
#define MV 200000
struct edge{int nx,t;}e[MV*+];
int r[MN+],a[MN+],b[MN+];
int h[MV+],en,l[MV+],d[MV+],cnt,z[MV+],zn,inz[MV+],f[MV+],fn;
inline void ins(int x,int y)
{
e[++en]=(edge){h[x],y};h[x]=en;
e[++en]=(edge){h[y],x};h[y]=en;
}
void tj(int x)
{
l[x]=d[x]=++cnt;inz[z[zn++]=x]=;
for(int i=h[x];i;i=e[i].nx)
{
if(!d[e[i].t])tj(e[i].t);
if(inz[e[i].t]&&l[e[i].t]<l[x])l[x]=l[e[i].t];
}
if(l[x]==d[x])for(++fn;z[zn]!=x;inz[z[zn]]=)f[z[--zn]]=fn;
}
int main()
{
fread(B,,<<,stdin);
int n,m,i,j,k;
n=read();m=read();
for(i=;i<=n;++i)r[i]=read();
for(i=;i<=m;++i)for(j=read();j--;)(a[k=read()]?b[k]:a[k])=i;
for(i=;i<=n;++i)
if(r[i])ins(a[i],b[i]),ins(a[i]+m,b[i]+m);
else ins(a[i],b[i]+m),ins(a[i]+m,b[i]);
for(i=;i<=m<<;++i)if(!d[i])tj(i);
for(i=;i<=m;++i)if(f[i]==f[i+m])return puts("NO"),;
puts("YES");
}

E.The Holmes Children

题目大意:定义f(1)=1,f(n),n>1的值为满足x+y=n且gcd(x,y)=1的(x,y)个数;定义g(n)=Σd|n f(n/d);定义Fk(n)满足k=1时Fk(n)=f(g(n)),k>1且k mod 2=0时Fk(n)=g(Fk-1(n)),k>1且k mod 2=1时Fk(n)=f(Fk-1(n)) 。给出n,k,求Fk(n)mod 1000000007。(1<=n,k<=10^12)

思路:f(n)等同于求满足gcd(x,n-x)=1的x的个数,又因为gcd(x,n-x)=gcd(x,n),所以f(n)就是phi(n)。通过观察发现g(n)=n,所以Fk(n)就是对n做(k+1)/2遍phi。每次n^0.5暴力,n=1时停止就可以了,因为n>2时,phi(n)必为偶数,偶数的phi又必然减少一半,所以复杂度大约是O(n^0.5*logn)。

#include<iostream>
using namespace std;
#define ll long long
#define MX 1000000
ll f[MX+];
ll F(ll x)
{
if(x<=MX)return f[x];
ll i,r=x;
for(i=;i*i<=x;++i)if(x%i==)
{
r=r/i*(i-);
while(x%i==)x/=i;
}
return x>?r/x*(x-):r;
}
int main()
{
ll n,k,i,j;
cin>>n>>k;k=k+>>;
for(i=;i<=MX;++i)f[i]=i;
for(i=;i<=MX;i+=)f[i]>>=;
for(i=;i<=MX;i+=)if(f[i]==i)
for(j=i;j<=MX;j+=i)f[j]=f[j]/i*(i-);
while(n>&&k--)n=F(n);
cout<<n%;
}

ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined)的更多相关文章

  1. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) A map B贪心 C思路前缀

    A. A Serial Killer time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  2. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) A

    Our beloved detective, Sherlock is currently trying to catch a serial killer who kills a person each ...

  3. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) D. The Door Problem 2-SAT

    题目链接:http://codeforces.com/contest/776/problem/D D. The Door Problem time limit per test 2 seconds m ...

  4. 【2-SAT】【并查集】ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) D. The Door Problem

    再来回顾一下2-SAT,把每个点拆点为是和非两个点,如果a能一定推出非b,则a->非b,其他情况同理. 然后跑强连通分量分解,保证a和非a不在同一个分量里面. 这题由于你建完图发现都是双向边,所 ...

  5. 【枚举】【前缀和】【map】ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) C. Molly's Chemicals

    处理出前缀和,枚举k的幂,然后从前往后枚举,把前面的前缀和都塞进map,可以方便的查询对于某个右端点,有多少个左端点满足该段区间的和为待查询的值. #include<cstdio> #in ...

  6. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) D

    Moriarty has trapped n people in n distinct rooms in a hotel. Some rooms are locked, others are unlo ...

  7. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) C

    Molly Hooper has n different kinds of chemicals arranged in a line. Each of the chemicals has an aff ...

  8. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) B

    Sherlock has a new girlfriend (so unlike him!). Valentine's day is coming and he wants to gift her s ...

  9. ICM Technex 2017 and Codeforces Round #400 (Div. 1 + Div. 2, combined) C. Molly's Chemicals

    感觉自己做有关区间的题目方面的思维异常的差...有时简单题都搞半天还完全没思路,,然后别人提示下立马就明白了...=_= 题意:给一个含有n个元素的数组和k,问存在多少个区间的和值为k的次方数. 题解 ...

随机推荐

  1. 201621123057 《Java程序设计》第11周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 源代码阅读:多线程程序BounceThread 1.1 BallR ...

  2. python的项目结构

    项目结构 知识点 创建项目,编写 __init__ 文件 使用 setuptools 模块,编写 setup.py 和 MANIFEST.in 文件 创建源文件的发布版本 项目注册&上传到 P ...

  3. 修改MYSQL的默认连接时长

    show global variables like 'wait_timeout'; 设置成10小时; set global wait_timeout=36000;

  4. day-5 python协程与I/O编程深入浅出

    基于python编程语言环境,重新学习了一遍操作系统IO编程基本知识,同时也学习了什么是协程,通过实际编程,了解进程+协程的优势. 一.python协程编程实现 1.  什么是协程(以下内容来自维基百 ...

  5. NFS PersistentVolume - 每天5分钟玩转 Docker 容器技术(151)

    上一节我们介绍了 PV 和 PVC,本节通过 NFS 实践. 作为准备工作,我们已经在 k8s-master 节点上搭建了一个 NFS 服务器,目录为 /nfsdata: 下面创建一个 PV mypv ...

  6. thinkphp后台向前台传值没有传过去的小问题

    if($listyyarr){ $this->assign('listyyarr',$listyyarr); //$this->assign('nowDated',$endDated); ...

  7. TF中conv2d和kernel_initializer方法

    conv2d中的padding 在使用TF搭建CNN的过程中,卷积的操作如下 convolution = tf.nn.conv2d(X, filters, strides=[1,2,2,1], pad ...

  8. Python内置函数(65)——staticmethod

    英文文档: staticmethod(function) Return a static method for function. A static method does not receive a ...

  9. Python内置函数(60)——compile

    英文文档: compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1) Compile the source i ...

  10. kubernetes入门(05)kubernetes的核心概念(2)

    一.使用 kubectl run 创建 pod(容器) 命令 kubectl run类似于 docker run,可以方便的创建一个容器(实际上创建的是一个由deployment来管理的Pod): 等 ...