清北刷题班day3 morning
P99
zhx
: 竞赛时间:???? 年?? 月?? 日??:??-??:??
题目名称 a b c
名称 a b c
输入 a.in b.in c.in
输出 a.out b.out c.out
每个测试点时限 1s 1s 1s
内存限制 256MB 256MB 256MB
测试点数目 10 10 10
每个测试点分值 10 10 10
是否有部分分 无 无 无
题目类型 传统 传统 传统
注意 事项) (请务必仔细阅读) :
P99 zhxa
a
【问题描述】
你是能看到第一题的 friends 呢。
——hja
怎么快速记单词呢?也许把单词分类再记单词是个不错的选择。何大爷给
出了一种分单词的方法,何大爷认为两个单词是同一类的当这两个单词的各个
字母的个数是一样的,如 dog 和 god。现在何大爷给了你?个单词,问这里总共
有多少类单词。
【输入格式】
第一行一个整数?代表单词的个数。
接下来?行每行一个单词。
【输出格式】
一行一个整数代表答案。
【样例输入】
3
AABAC
CBAAA
AAABB
【样例输出】
2
【数据范围与规定】
70%的数据,1 ≤ ? ≤ 100。
对于100%的数据,1 ≤ ? ≤ 10000,所有单词由大写字母组成。
P99 zhxb
#include<iostream>
#include<cstdio>
#include<cstring>
#include<set>
#include<cstdlib>
#include<algorithm> #define N 10007 using namespace std;
int len,n;
string ch;
set<string>s; int main()
{
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
cin>>n;
for(int k=;k<=n;k++)
{
cin>>ch;len=ch.length();
sort(ch.begin(),ch.end());
s.insert(ch);
}
printf("%d\n",s.size());
fclose(stdin);fclose(stdout);
return ;
}
b
【问题描述】
你是能看到第二题的 friends 呢。
——laekov
长度为?的铁丝,你可以将其分成若干段,并把每段都折成一个三角形。你
还需要保证三角形的边长都是正整数并且三角形两两相似,问有多少种不同的
分法。
【输入格式】
一行一个整数?。
【输出格式】
一行一个整数代表答案对10 9 + 7取模之后的值。
【样例输入 1
6
【样例输出 1】
2
【样例输入 2】
9
【样例输出 2】
6
【样例解释 2】
(1,1,1),(2,2,2);(2,2,2),(1,1,1)算两种方案。
【数据范围与规定】
3。
60%的数据,1 ≤ ? ≤ 1000。
对于100%的数据,1 ≤ ? ≤ 10 6 。
P99 zhxc
/*
首先计算周长为M的三角形有多少个,设为f[M]。设三角形的三边a,b,c满足a<=b<=c,那么分两种情况:
(1)b=c,此时c的上限为(M-1)/2,下限为ceil(M/3)=(M+2)/3,所以此时的三角形个数为(M-1)/2-(M+2)/3+1;
(2)b!=c,那么b<=c-1,因为a+b>c>c-1,因此一般来说有多少个三角形(a,b,c-1)就有多少个三角形(a,b,c),但是此时要减去a+b=c的情况。三角形(a,b,c-1)的个数就是f[M-1]。此时若a+b=c,即M-1=a+b+c-1=c+c-1,即M=2c,因此M必须为偶数。a+b=c=M/2,使得a+b=M/2的有序(a<=b)二元组有M/2/2。
根据这两个可以得到计算f的递推关系。下面我们看怎么得到周长为M且三边满足Gcd(a,b,c)=1的三角形个数?这个可用于筛素数类似的方法得到。那么对于n,将其分成若干份,每份相等,那么不同的分法就是隔板法。
①相似三角形一定可以找到最小的那个,称为这类相似三角形的基。
②剩下就是一包夹杂容斥的递推:
③设w[i]为长度为i的铁丝的分法,一种分法的所有三角形边长除以gcd(a,b,c)得到的三角形都一样,且三边互质,设边长为a',b',c'。?
④若M=a+b+c,M'=a'+b'+c',设k=M/M',那么以a',b',c'为三边的三角形为基,用长度为M的铁丝能做出的方案数为2^(k-1) (杨辉三角第k层数字和公式)。?
⑤设g[i]为长度为i的铁丝分成边长为a,b,c(a<=b<=c)且gcd(a,b,c)=1的三角形的方案数。那么
w[i]=g[p1]*2^(i/p1-1)+g[p2]*2^(i/p2-1)+…+g[pk]*2^(i/pk-1)(p为i的因数)。?
⑥设f[i]为长度为i的铁丝分成边长为a,b,c(a<=b<=c)的三角形的方案数。那么
g[i]=f[i]-f[p1]-f[p2]-…-f[pk](p为i的因数)。(注意此处的f相当于g了,因为是f在刷新自己,因此不会出现因倍数而导致重复情况)
⑦接下来处理三角形三边合法(即f的递推):
1.b==c,c最小为ceil(i/3),最大为floor((i-1)/2) 。?
2.b<=b<=c-1的方案数,为f[i-1]。?
第二种情况还要除去a+b=c的方案数。?
若a+b=c,那么i=a+b+c=2*(a+b),a+b=i/2,
这样的(a,b)有i/2/2对,此时i一定为偶数,所以i为偶数时要考虑这种情况
*/
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=,mod=;
int n,ans,cnt;
int f[N],p[N];
int main()
{
p[]=;
for(int i=; i<=N; i++)p[i]=(p[i-]*)%mod;
f[]=;
for(int i=; i<=N; i++)
{
f[i]=f[i-]+(i-)/-i/+(i%?:);
if(i%==)f[i]-=i/;
f[i]%=mod;
if(f[i]<)f[i]+=mod;
}
for(int i=; i<=N; i++)
for(int j=; i*j<=N; j++)
{
f[i*j]-=f[i];
if(f[i*j]<)f[i*j]+=mod;
}
while(~scanf("%d",&n))
{
ans=;
for(int i=; i*i<=n; i++)
{
if(n%i!=)continue;
ans=(ans+1ll*f[i]*p[n/i])%mod;
if(i*i!=n)ans=(ans+1ll*f[n/i]*p[i])%mod;
}
printf("%d\n",ans);
}
return ;
}
c
【问题描述】
你是能看到第三题的 friends 呢。
——aoao
在小学的时候,我们都学过正视图和左视图。现在何大爷用一些小方块摆了
一个图形,并给出了你这个图形的左视图和正视图。现在何大爷希望知道,在给
定正视图和左视图的情况下,原来的立体图形有多少种可能的情况?
【输入格式】
第一行两个整数?,?,代表在左视图和正视图中分别有多少列。
第二?个整数,代表在左视图中从左至右每一列的高度。
第三行?个整数,代表在正视图中从左至有每一列的高度。
【输出格式】
一行一个整数代表答案对10 9 + 9取模之后的值。
【样例输入 1】
2 2
1 1
1 1
【样例输出 1】
7
【样例输入 2】
4 5
5 2 4 1
5 2 4 0 1
【样例输出 2】
429287
【数据规模与约定】
21 ≤ ?,? ≤ 5,每列的最大高度不超过5。
40%的数据,? + ? ≤ 18。
对于100%的数据,1 ≤ ?,? ≤ 50,每列最
/*
排序
容斥原理
emmmmm
大概就是这么牛逼
大佬的世界
我们不懂
不懂
不懂
就是不懂
嘿嘿嘿
不懂
绝望
就是不懂
很绝望
看不懂
emmmm
*/
#include<cstdio>
#include<algorithm> using namespace std; typedef long long LL; #define N 51
#define H 10001
const int mod=1e9+; int a[H],b[H];
int n,m;
int C[N][N]; void pre(int k)
{
for(int i=; i<=k; i++) C[i][]=;
for(int i=; i<=k; i++)
for(int j=; j<=i; j++)
C[i][j]=(C[i-][j]+C[i-][j-])%mod;
} int pow(int a,int b)
{
int res=;
for(; b; b>>=,a=1ll*a*a%mod)
if(b&) res=1ll*res*a%mod;
return res;
} int cal(int n,int m,int nn,int mm,int h)
{
int res=,tmp;
for(int i=; i<=nn; ++i)
for(int j=; j<=mm; ++j)
{
tmp=1ll*pow(h,n*m-(n-i)*(m-j))*pow(h+,(n-i)*(m-j)-(n-nn)*(m-mm))%mod*C[nn][i]%mod*C[mm][j]%mod;
if((i+j)&) res=((res-tmp)%mod+mod)%mod;
else res+=tmp,res%=mod;
}
return res;
} int main()
{
freopen("c.in","r",stdin);
freopen("c.out","w",stdout);
int x;
scanf("%d%d",&n,&m);
for(int i=; i<=n; ++i) scanf("%d",&x),a[x]++;
for(int i=; i<=m; ++i) scanf("%d",&x),b[x]++;
pre(max(n,m));
LL res=;
int nown=,nowm=;
for(int i=; i>=; i--)
if(a[i] || b[i])
{
nown+=a[i];
nowm+=b[i];
res=1ll*res*cal(nown,nowm,a[i],b[i],i)%mod;
}
printf("%I64d",res);
}
清北刷题班day3 morning的更多相关文章
- 10.27night清北刷题班
/* 枚举每个部分的总和,利用前缀和进行检验. 如果能分成4部分就一定能分成2部分,就筛了一边素数优化.清空数组!!! */ #include<bits/stdc++.h> #define ...
- 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题目描述所谓同花顺,就是指一些扑克牌,它们花色相同,并且 ...
随机推荐
- Go:字符串操作
Package strings:https://golang.google.cn/pkg/strings/ package main import ( "fmt" "st ...
- Extract local angle of attack on wind turbine blades
Extract local angle of attack on wind turbine blades Table of Contents 1. Extract local angle of att ...
- 1.ARM嵌入式体系结构与接口技术(Cortex-A8版)
第1章 嵌入式系统基础知识 ---->1.1嵌入式系统的概述 -------->1.1.1嵌入式系统简介 -------->1.1.2嵌入式系统的特点 -------->1.1 ...
- [bzoj4567][Scoi2016][背单词] (贪心+trie树)
Description Lweb 面对如山的英语单词,陷入了深深的沉思,“我怎么样才能快点学完,然后去玩三国杀呢?”.这时候睿智 的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他的计 ...
- 关于git上传GitHub以及码云(gitee)
如果你是gitee(码云),点击链接跳转 首先,你的有一个GitHub的账号(然后新建项目我就不说了) # Linux的方法 GitHub网站下的,点击settings下的emails,确认自己的邮箱 ...
- Leetcode 135.分糖果
分发糖果 老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分. 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果. 相邻的孩 ...
- Leetcode 89.格雷编码
格雷编码 格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异. 给定一个代表编码总位数的非负整数 n,打印其格雷编码序列.格雷编码序列必须以 0 开头. 示例 1: 输入: 2 ...
- JWT & HMAC-SHA256
JWT JSON Web Tokens https://jwt.io/ https://en.wikipedia.org/wiki/JSON_Web_Token#Structure HMACSHA25 ...
- HDU 1159 LCS最长公共子序列
#include <cstdio> #include <cstring> using namespace std; ; #define max(a,b) a>b?a:b ...
- noip模拟赛 街灯
分析:对于前30%的数据直接暴力模拟即可,对于另外30%的数据,因为每次的p是一样的,所以可以用莫队来维护,先离散化一下,再用一个桶统计次数. 100%的做法和之前做过的一道模拟赛题很像,当模数很小的 ...