10.27night清北刷题班
/*
枚举每个部分的总和,利用前缀和进行检验。
如果能分成4部分就一定能分成2部分,就筛了一边素数优化。
清空数组!!!
*/
#include<bits/stdc++.h> #define N 1000001 using namespace std;
int prime[N],no[N]={,},num[N],sum[N];
int n,m,tot,cur,tmp,flag;
char s[N];
bool vis[N]; void pri()
{
for(int i=;i<=N;i++)
{
if(!no[i]) prime[++tot]=i;
for(int j=;j<=tot;j++)
{
if(i*prime[j]>=N)break;
no[i*prime[j]]=;
if(i%prime[j]==) break;
}
}
} int main()
{
freopen("divie.in","r",stdin);
freopen("divide.out","w",stdout);
int T;scanf("%d",&T);
pri();
while(T--)
{
scanf("%s",s+);
n=strlen(s+);int opt=;
memset(num,,sizeof num);
memset(sum,,sizeof sum);
memset(vis,,sizeof vis);
for(int i=;i<=n;i++) num[i]=s[i]-'';
for(int i=;i<=n;i++) sum[i]=sum[i-]+num[i],vis[sum[i]]=;
if(sum[n]==) {printf("YES\n");continue;}
for(int i=;i<=min(n,tot);i++)
{
if(prime[i]>sum[n]) break;
if(sum[n]%prime[i]) continue;
cur=prime[i];tmp=sum[n]/prime[i];
flag=;
for(int j=;j<=cur;j++)
if(!vis[j*tmp]){flag=;break;}
if(!flag) {opt=;printf("YES\n");break;}
}
if(opt) continue;
printf("NO\n");
}
return ;
}
\
/*
dp[n]表示n个点,每个点都和点1相连,且n个点互相连通的图的个数。
S[n]总的个数
g[n]表示n个点,每个点都和点1相连,且不是n个点互相连通的图的个数。
考虑从除了1之外的n-1个点中选出i-1个点,让这i个点互相连通,而剩下的n-i个点和这i个点没有边相连,互相之间随意连接。
这个代码5000要跑1.6s,所以后面90%数据打表23333
100%需要fft优化。
*/
#include<bits/stdc++.h> #define N 50001
#define ll long long
#define M 998244353 using namespace std;
ll fac[N]={,},inv[N]={,},f[N]={,};
ll dp[N],g[N],S[N];
int n; ll C(ll a,ll b)
{
return fac[a]*inv[b]%M*inv[a-b]%M;
} ll kfc(ll x,ll y)
{
x=x%M,y=y%M;
return ((x*y-(ll)(((long double)x*y+0.5)/M)*M)%M+M)%M;
} ll ksm(ll a,ll b)
{
ll res=;
while(b)
{
if(b&) res=kfc(res,a)%M;
b>>=; a=kfc(a,a)%M;
}return res%M;
} void init()
{
for(int i=;i<N;i++)
{
fac[i]=fac[i-]*i%M;
f[i]=(M-M/i)*f[M%i]%M;
inv[i]=inv[i-]*f[i]%M;
}
} int main()
{
freopen("count.in","r",stdin);
freopen("count.out","w",stdout);
cin>>n;init();
dp[]=;g[]=;
for(int i=;i<=;i++) S[i]=ksm(,(i*(i-))/);
for(int i=;i<=;i++)
{
g[i]=;
for(int j=;j<i;j++)
g[i] =(g[i]+(C(i-,j-)*dp[j]%M*S[i-j])%M)%M;
dp[i]=(S[i]-g[i]+M)%M;
}
cout<<dp[n]<<endl;
return ;
}
/*
暴力枚举选哪几条路径
*/
#include<bits/stdc++.h> #define N 100007
#define ll long long using namespace std;
ll n,m,ans,cnt,flag,cur;
ll head[N],deep[N],sum[N],f[N][];
ll vis[N],choose[N],W[N];
struct edge{
ll u,v,net;
}e[N<<];
struct node{
int pos,x,y;
}p[N]; inline ll read()
{
int x=,f=;char c=getchar();
while(c>''||c<''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} inline ll max(ll a,ll b){return a>b?a:b;} inline void add(int u,int v)
{
e[++cnt].v=v;e[cnt].net=head[u];head[u]=cnt;
} void DFS(int u,int fa,int c)
{
f[u][]=fa;deep[u]=c;
for(int i=head[u];i;i=e[i].net)
{
int v=e[i].v;
if(v==fa) continue;
sum[v]+=sum[u];
DFS(v,u,c+);
}
} void get()
{
for(int j=;j<=;j++) for(int i=;i<=n;i++)
f[i][j]=f[f[i][j-]][j-];
} int lca(int a,int b)
{
if(deep[a]<deep[b]) swap(a,b);
int t=deep[a]-deep[b];
for(int i=;i<=;i++)
if(t&(<<i)) a=f[a][i];
if(a==b) return a;
for(int i=;i>=;i--)
if(f[a][i]!=f[b][i]) a=f[a][i],b=f[b][i];
return f[a][];
} ll S(ll a,ll b)
{
int res=lca(a,b);
return sum[a]+sum[b]-*sum[res]+W[res];
} void expand(int i)
{
int x=p[i].x,y=p[i].y,res=lca(x,y);
if(vis[res]) {flag=;return;}
while(x!=res)
{
if(vis[x])
{flag=;break;}
vis[x]=;x=f[x][];
}
while(y!=res){if(vis[y]){vis[y]=;flag=;}else vis[y]=;y=f[y][];}vis[res]=;
} void clear(int i)
{
int x=p[i].x,y=p[i].y,res=lca(x,y);
if(x==res && vis[x]) vis[x]--;
if(y==res && vis[y]) vis[y]--;
while(x!=res){vis[x]=;x=f[x][];}
while(y!=res){if(vis[y])vis[y]--;y=f[y][];}if(x!=res && y!=res)vis[res]--;
} void dfs(int k,int tot,int lim)
{
if(tot==lim)
{
flag=,cur=;
memset(vis,,sizeof vis);
for(int i=;i<=m;i++)
{
if(choose[i])
{
expand(i);
if(flag) return;
else cur+=S(p[i].x,p[i].y);
}
}
ans=max(ans,cur);
return;
}
for(int i=k;i<=m;i++)
{
if(choose[i]) continue;
choose[i]=;dfs(i+,tot+,lim);
choose[i]=;
clear(i);
}
} int main()
{
freopen("ly.in","r",stdin);
int x,y;
n=read();
for(int i=;i<=n;i++) W[i]=sum[i]=read();
for(int i=;i<n;i++)
{
x=read();y=read();
add(x,y);add(y,x);
}
DFS(,,);get();
m=read();
for(int i=;i<=m;i++)
{
p[i].x=read();p[i].y=read();p[i].pos=i;
ans=max(ans,S(p[i].x,p[i].y));
}
for(int i=;i<=n/;i++)
{
memset(choose,,sizeof choose);
memset(vis,,sizeof vis);
dfs(,,i);
}
printf("%lld\n",ans);
return ;
}
/*
10
1 2 3 4 5 6 7 8 9 10
10 6
9 6
3 1
6 7
6 3
3 8
8 5
8 4
2 6
4
2 3
3 4
4 5
9 1 */
30暴力
10.27night清北刷题班的更多相关文章
- 清北刷题班day3 morning
P99zhx: 竞赛时间:???? 年?? 月?? 日??:??-??:??题目名称 a b c名称 a b c输入 a.in b.in c.in输出 a.out b.out c.out每个测试点时限 ...
- 2017-10-4 清北刷题冲刺班p.m
P102zhx a [问题描述]你是能看到第一题的 friends 呢.——hja两种操作:1.加入一个数.2.询问有多少个数是?的倍数.[输入格式]第一行一个整数?,代表操作数量.接下来?行,每行两 ...
- 2017-10-4 清北刷题冲刺班a.m
P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...
- 2017-10-3 清北刷题冲刺班p.m
a [问题描述]你是能看到第一题的 friends 呢.——hja给你一个只有小括号和中括号和大括号的括号序列,问该序列是否合法.[输入格式]一行一个括号序列.[输出格式]如果合法,输出 OK,否则输 ...
- 2017-10-3 清北刷题冲刺班a.m
P99zhx a [问题描述]你是能看到第一题的 friends 呢.——hja怎么快速记单词呢?也许把单词分类再记单词是个不错的选择.何大爷给出了一种分单词的方法,何大爷认为两个单词是同一类的当这两 ...
- 2017-10-2 清北刷题冲刺班a.m
一道图论神题 (god) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...
- 2017-10-2 清北刷题冲刺班p.m
最大值 (max) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...
- 2017-10-1 清北刷题冲刺班p.m
一道图论好题 (graph) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图 ...
- 2017-10-7 清北刷题冲刺班p.m
测试 A 同花顺 文件名 输入文件 输出文件 时间限制 空间限制card.cpp/c/pas card.in card.out 1s 512MB题目描述所谓同花顺,就是指一些扑克牌,它们花色相同,并且 ...
随机推荐
- c网购物车流程图
1. 流程图 2. 流程介绍 1) 客人浏览模式下(未登录状态)加入购物车 这个时候回校验一下商品的可售数量,以及状态等等,校验成功后会保存到cookie和memcache,数据操作校验以memcac ...
- english & utils & tools
english & utils & tools https://openlanguage.com/ https://www.grammarly.com/blog/email-writi ...
- android studio配置so文件路径
将一个项目从eclipse上移植到android studio时,发现总是加载不成功库文件,so库文件放在了main/src/libs下的目录. 参考网上资料,studio默认的库文件路径是main/ ...
- Codeforces915F. Imbalance Value of a Tree
n<=1e6的树问所有路径的极差之和. 被遗忘的套路...以后绝对不会再忘了QAQ 只要算最大值之和即可,最小值同理.数字从大到小排序(反正都是要排序的,如果从大到小不行等会反过来试试),然后逐 ...
- python 安装依赖几个问题---HttpScan
https://blog.csdn.net/chenggong2dm/article/details/61923420 https://www.cnblogs.com/caochuangui/p/59 ...
- json数组显示格式
{“colorAndImg”:[{"颜色":“红色”,"地址":“www.sohu.com”}, {“颜色”:“绿色,“地址”:“www.sohu.com”}] ...
- redhat and centos 系统经常使用命令
查看cpu信息: more /proc/cpuinfo |grep "model name" 通常是至强系统 查看内存信息: grep MemTotal / ...
- 001 Cisco router prewired
Cisco router 预配: Router>en Router#config t Enter configuration commands, one per line. End with ...
- Symantec Backup Exec部署手册
转载 http://xiaxiaoguo.blog.51cto.com/858884/402810 Symantec Backup Exec部署手册 目录 1.Backup Exec 12.5安装. ...
- gcc 5.2.0 编译安装笔记-20151110
**转载请注明出处** by.haunying3 系统版本号 CentOS-6.6-x86_64-minimal 编译器 gcc-4.4.7通过yum安装 rpm -qa | grep gcc gcc ...