/*
枚举每个部分的总和,利用前缀和进行检验。
如果能分成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. 如何使用JDK1.6 API

    如何使用JDK1.6 API-------https://jingyan.baidu.com/article/54b6b9c0e39a102d583b47d5.html  

  2. fd最大值和限制

    fd的数量决定了fd的最大值 在Linux下,系统全部能够打开的fd总数为: /proc/sys/fs/file-max,取决于内存 The file-max file /proc/sys/fs/fi ...

  3. 3D模型

    题目描述 一座城市建立在规则的n×m网格上,并且网格均由1×1正方形构成.在每个网格上都可以有一个建筑,建筑由若干个1×1×1的立方体搭建而成(也就是所有建筑的底部都在同一平面上的).几个典型的城市模 ...

  4. 【HDOJ3341】Lost's revenge(AC自动机,DP)

    题意:给出一个n个模式串,一个目标串,问把目标串重新排位最多能产生多少个模式串,可以重叠且所有串只包含A C G T. n<=10,len[i]<=10 len(s)<=40 Cas ...

  5. 「CodePlus 2017 11 月赛」Yazid 的新生舞会

    n<=500000的数字,问有多少个区间的众数出现次数严格大于区间长度的一半. 这么说来一个区间就一个众数了,所以第一反应是枚举数字,对下标进行处理.然后没有第二反应.很好. 在枚举一个数字的时 ...

  6. vue生成包报错error from UglifyJs

    mangle: { keep_fnames: true},

  7. 所有的异常都要使用try catch 语句捕获?

    在开发应用程序过程中必须检测代码可能发生的错误并进行正确的处理,这个在理想的情况下,应用程序中的每行 代码都按照预想的执行,要用到的每种资源总是可以利用,但是在实际的开发过程中,写代码难免会出错,或是 ...

  8. Ubuntu 16.04安装Memcached(单机)

    Ubuntu 16.04安装Memcached,不过不仅限与Ubuntu,可以用CentOS等去安装,只不过测试时使用的是Ubuntu机器.Windows下不建议使用,本机调试可以使用,线上环境除了W ...

  9. Java导出jar并运行

    1. 创建manifest.mf文件 在工程下创建manifest.mf文件.文件内容为: Manifest-version: 1.0 Main-Class: SqlCheckUtil.java 注意 ...

  10. cocos2d-x CCScrollView和CCTableView的使用

    在游戏和应用中常常要实现左右滑动展示游戏帮助.以列表显示内容的UI效果,就像android中的Gallery和ListView. 本文通过CCScrollView和CCTableView分别来实现这两 ...