/*
枚举每个部分的总和,利用前缀和进行检验。
如果能分成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清北刷题班的更多相关文章

  1. 清北刷题班day3 morning

    P99zhx: 竞赛时间:???? 年?? 月?? 日??:??-??:??题目名称 a b c名称 a b c输入 a.in b.in c.in输出 a.out b.out c.out每个测试点时限 ...

  2. 2017-10-4 清北刷题冲刺班p.m

    P102zhx a [问题描述]你是能看到第一题的 friends 呢.——hja两种操作:1.加入一个数.2.询问有多少个数是?的倍数.[输入格式]第一行一个整数?,代表操作数量.接下来?行,每行两 ...

  3. 2017-10-4 清北刷题冲刺班a.m

    P101zhx a [问题描述]你是能看到第一题的 friends 呢.——hjaHja 拥有一套时光穿梭技术,能把字符串以超越光速的速度传播,但是唯一的问题是可能会 GG.在传输的过程中,可能有四种 ...

  4. 2017-10-3 清北刷题冲刺班p.m

    a [问题描述]你是能看到第一题的 friends 呢.——hja给你一个只有小括号和中括号和大括号的括号序列,问该序列是否合法.[输入格式]一行一个括号序列.[输出格式]如果合法,输出 OK,否则输 ...

  5. 2017-10-3 清北刷题冲刺班a.m

    P99zhx a [问题描述]你是能看到第一题的 friends 呢.——hja怎么快速记单词呢?也许把单词分类再记单词是个不错的选择.何大爷给出了一种分单词的方法,何大爷认为两个单词是同一类的当这两 ...

  6. 2017-10-2 清北刷题冲刺班a.m

    一道图论神题 (god) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...

  7. 2017-10-2 清北刷题冲刺班p.m

    最大值 (max) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一本书,上面有很多有趣的OI问题.今天LYK看到了这么一道题目: 这里有一个长度为n ...

  8. 2017-10-1 清北刷题冲刺班p.m

    一道图论好题 (graph) Time Limit:1000ms   Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图 ...

  9. 2017-10-7 清北刷题冲刺班p.m

    测试 A 同花顺 文件名 输入文件 输出文件 时间限制 空间限制card.cpp/c/pas card.in card.out 1s 512MB题目描述所谓同花顺,就是指一些扑克牌,它们花色相同,并且 ...

随机推荐

  1. 圆角计算 Shader

    圆角的计算 在Shader中,我们使用UV坐标来计算需要显示的部分和不需要显示的部分,使用透明来处理显示与不显示.UV坐标如下图1,我们将坐标平移到图2位置,面片的UV坐标原点在面片中心,UV坐标范围 ...

  2. ProxySQL Tutorial : setup in a MySQL replication topology

    ProxySQL Tutorial : setup in a MySQL replication topology 时间 2015-09-15 05:23:20 ORACLE数据库技术文刊 原文  h ...

  3. php.ini中date.timezone设置分析

    date.timezone设置php5默认date.timezone为utc,改为date.timezone = PRC即可解决时间相差八小时的问题,但我在php的官方文档中看了半天也没找到这个参数啊 ...

  4. 开发辅助网站---programcreek

    开发中让我们事半功倍的工具网站,开发中经常遇到api如何使用,很好的解决这个问题.java代码api案例网,提供最简单的demo,很不错分享一下,大家可以用用. http://www.programc ...

  5. 可并堆试水--BZOJ1367: [Baltic2004]sequence

    n<=1e6个数,把他们修改成递增序列需把每个数增加或减少的总量最小是多少? 方法一:可以证明最后修改的每个数一定是原序列中的数!于是$n^2$DP(逃) 方法二:把$A_i$改成$A_i-i$ ...

  6. Thinkphp5.0 的视图view的模板布局

    Thinkphp5.0 的视图view的模板布局 使用include,文件包含: <!-- 头部 --> <div class="header"> {inc ...

  7. 289. Game of Live

    According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...

  8. POJ 1804 逆序对数量 / 归并排序

    Brainman Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 12175   Accepted: 6147 Descrip ...

  9. DOM节点是啥玩意?

    在 HTML DOM 中,所有事物都是节点.DOM 是被视为节点树的 HTML. DOM 节点 根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点: 整个文档是一个文档节点 ...

  10. 文件I/O和标准I/O

    转载:https://blog.csdn.net/kyang_823/article/details/79496561 一.文件I/O和标准I/O文件I/O:文件I/O也称为不带缓冲的I/O(unbu ...