清北刷题冲刺 11-01 a.m
2024-08-29 19:38:50
立方体
/*
输入数据中的p的位置是没有用的,而题目本质上是求C(n,k)
*/
#include<iostream>
#include<cstdio>
#define mod 1000000007
#define maxn 1000001
using namespace std;
int n,k,x;
long long fac[maxn]={,},inv[maxn]={,},f[maxn]={,};
long long C(long long a,long long b){
return fac[a]*inv[b]%mod*inv[a-b]%mod;
}
void prepare(){
for(int i=;i<maxn;i++){
fac[i]=fac[i-]*i%mod;
f[i]=(mod-mod/i)*f[mod%i]%mod;
inv[i]=inv[i-]*f[i]%mod;
}
}
int main(){
freopen("cube.in","r",stdin);freopen("cube.out","w",stdout);
scanf("%d%d",&n,&k);
prepare();
for(int i=;i<=n;i++)scanf("%d",&x);
cout<<C(n,k);
return ;
}
100分 组合数
仓库
/*
跑一遍最大生成树,把边权存下来,然后排个序
每次询问只需要找小于w的辺权的个数加一即可
查找的时候用二分
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#define maxn 100010
using namespace std;
int n,m,q,a[maxn],cnt,fa[maxn];
struct Node{
int x,y,v;
}E[maxn];
int query(int x){
int l=,r=n-,res=;
while(l<=r){
int mid=(l+r)>>;
if(a[mid]<x)res=mid,l=mid+;
else r=mid-;
}
return res;
}
bool cmp(Node x,Node y){return x.v>y.v;}
int find(int x){
if(x==fa[x])return x;
return fa[x]=find(fa[x]);
}
int main(){
// freopen("Cola.txt","r",stdin);
freopen("warehouse.in","r",stdin);freopen("warehouse.out","w",stdout);
scanf("%d%d%d",&n,&m,&q);
for(int i=;i<=n;i++)fa[i]=i;
int x,y;
for(int i=;i<=m;i++)scanf("%d%d%d",&E[i].x,&E[i].y,&E[i].v);
sort(E+,E+m+,cmp);
for(int i=;i<=m;i++){
int f1=find(E[i].x),f2=find(E[i].y);
if(f1==f2)continue;
fa[f1]=f2;
a[++cnt]=E[i].v;
if(cnt==n-)break;
}
sort(a+,a+cnt+);
while(q--){
scanf("%d",&x);
int pos=query(x);
pos+=;
printf("%d\n",pos);
}
return ;
}
100分 生成树
单词
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#define maxn 1010
using namespace std;
int n,q,len[maxn],L;
string s[maxn];
map<string,bool>vis;
int main(){
freopen("word.in","r",stdin);freopen("word.out","w",stdout);
// freopen("Cola.txt","r",stdin);
scanf("%d%d",&n,&q);
for(int i=;i<=n;i++){
cin>>s[i];
len[i]=s[i].length();
}
while(q--){
scanf("%d",&L);
vis.clear();
long long ans=;
for(int i=;i<=n;i++){
if(len[i]==L){
ans++;
vis[s[i]]=;
}
}
for(int i=;i<=n;i++){
for(int j=;j<=n;j++){
if(len[i]+len[j]<L)continue;
string snow="";
for(int l1=max(,L-len[j]);l1<=min(len[i],L-);l1++){//枚举用第一个字符串的多长
snow="";int l2=L-l1;
snow+=s[i].substr(,l1);
snow+=s[j].substr(len[j]-l2,l2);
if(!vis[snow]){
vis[snow]=;
ans++;
}
}
}
}
printf("%d\n",ans);
}
}
0分 暴力stl
预计得分100++
实际得分100++
今天的T1T2特别简单,T3一开始以为是Trie树,但是后来不太会做,就直接写的暴力,复杂度很高,map常熟又特别大,所以估分为0
今天早上迟到了,心情比较焦躁,但是T1特别简单,所以没有耽误很多时间
小结
最新文章
- WCF开发指南之构建服务
- unity3d magnitude的意义
- Log4j使用详解(log4j.properties格式)
- 兼容sdk7&;iOS7的issue解决小片段总结
- Mysql MyISAM数据库批量转换表引擎为Innodb
- WPF之给使用了模板的MenuItem添加快捷操作
- t
- css 权威指南笔记(三)结合css和XHTML
- [LeetCode]题解(python):134-Gas Station
- ubuntu快捷键设置,查看系统
- OleDbCommand cmd.Parameters.AddWithValue 添加参数时需要按照存储过程参数的顺序加入
- for惠普2013实习生
- awk 用法小结
- C++之默认参数
- firefox镜像 和geckodriver驱动大全
- 自制基于HMM的python中文分词器
- git 命令行下浏览器tig使用记录
- fedora安装视频播放器
- IBM WebSphere MQ介绍安装以及配置服务详解(转)
- linux crontab 实现每秒执行的实例
热门文章
- 多线程、方便扩展的Windows服务程序框架
- poj3585 Accumulation Degree[树形DP换根]
- VC++6.0注释快捷键的添加使用
- [转]HTTP Header 详解
- CSS:word-wrap/overflow/transition
- bzoj 2406 矩阵 —— 有源汇上下界可行流
- asp.net分页asp.net无刷新分页高效率分页
- 办公软件-Excel:Microsoft Office Excel 2003百科
- AI设计的若干规则阐述
- 自定义echart tooltip格式