2018 11.1 PION 模拟赛
期望:250 100+100+50
实际:210 80+100+30
期望:100 实际:80
最后;两个点T了。可能是求逆元的方法太慢了,也可能是闲的又加了一个快速乘的原因。
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define mod 1000000007
using namespace std;
int n,m;
long long ans;
int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
long long qmul(long long x,long long m){
long long ret=;
while(m){
if(m&)
ret=(ret+x)%mod;
x=(x+x)%mod;
m>>=;
}
return ret;
}
long long ksm(long long a,long long n){
long long ret=;
while(n){
if(n&)
ret=qmul(ret,a)%mod;
a=qmul(a,a)%mod;
n>>=;
}
return ret;
}
long long ex_gcd(long long a,long long b,long long &x,long long &y,long long &d){
if(!b){ x=;y=;d=a; }
else{
ex_gcd(b,a%b,y,x,d);
y-=(a/b)*x;
}
}
long long inv(long long t,long long p){
long long d,x,y;
ex_gcd(t,p,x,y,d);
return d==?(x%p+p)%p:-;
}
int main(){
//freopen("lpp.in","r",stdin);
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
n=read();m=read();
for(int i=;i<=n;i++){
if(i==){ ans+=m;ans%=mod; }
else{
long long tmp=(ksm(i,m)-)*inv((i-),mod);
ans=ans+qmul(tmp,i);
ans%=mod;
}
}
cout<<ans;
}
80TLE
后来明确了,就是因为在快速幂里套了一个快速乘,所以T了两个点。
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define mod 1000000007
using namespace std;
int n,m;
long long ans;
int inv[];
int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
long long qmul(long long x,long long m){
long long ret=;
while(m){
if(m&)
ret=(ret+x)%mod;
x=(x+x)%mod;
m>>=;
}
return ret;
}
long long fastpow(long long a,long long b){
long long s=;
for(;b;b>>=){
if(b&) s=s*a%mod;
a=a*a%mod;
}
return s;
}
int main(){
//freopen("lpp.in","r",stdin);
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
n=read();m=read();
inv[]=;
for(int i=;i<=;i++)
inv[i]=(mod-mod/i)*1ll*inv[mod%i]%mod;
for(int i=;i<=n;i++){
if(i==){ ans+=m;ans%=mod; }
else{
ans=ans+((fastpow(i,m)-)*i)%mod*inv[i-];
ans%=mod;
}
}
cout<<ans;
}
AC
大佬们推公式的思路都好清奇 瑟瑟发抖ing
期望的分:100 实际得分:100
发现大家都用的求最长路,就我思路清奇写了个DP吗?(*^__^*)
/*
期望的分:100
思路:树形dp
*/
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 50010
using namespace std;
int n,tot;
int dad[MAXN],sum[MAXN],bns[MAXN],size[MAXN],dp[MAXN];
int to[MAXN*],cap[MAXN*],net[MAXN*],head[MAXN];
int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
void add(int u,int v,int w){
to[++tot]=v;cap[tot]=w;net[tot]=head[u];head[u]=tot;
}
void dfs(int now){
size[now]=;
for(int i=head[now];i;i=net[i])
if(dad[now]!=to[i]){
dad[to[i]]=now;
dfs(to[i]);
sum[now]+=sum[to[i]]+cap[i];
size[now]+=size[to[i]];
}
}
void pre(int now){
if(size[now]==) dp[now]=;
for(int i=head[now];i;i=net[i])
if(dad[now]!=to[i])
pre(to[i]);
}
void work(int now){
int x;
for(int i=head[now];i;i=net[i])
if(dad[now]!=to[i]){
work(to[i]);
dp[now]=min(dp[to[i]]+cap[i]+(sum[now]-sum[to[i]]-cap[i])*,dp[now]);
}
}
int main(){
//freopen("lpp.in","r",stdin);
freopen("tour.in","r",stdin);
freopen("tour.out","w",stdout);
n=read();
for(int i=;i<n;i++){
int u=read();
int v=read();
int w=read();
add(u,v,w);add(v,u,w);
}
memset(dp,0x7f,sizeof(dp));
dfs();
pre();
work();
cout<<dp[];
}
/*
9
1 2 2
2 4 2
2 3 3
1 5 1
5 6 2
5 7 6
6 8 4
6 9 5
*/
AC
期望:50 实际 :30
读错题目了QwQ想成了只有4和7是幸运数字。
这样竟然还有30分。。良心的出题人给你 笔芯❤❤❤
/*
期望的分:50
思路:暴力dfs
*/
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define mod 1000000007
using namespace std;
int n,k;
long long ans;
int a[],num[],vis[];
bool vis1[];
int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
bool judge(){
memset(vis,,sizeof(vis));
for(int i=;i<=k;i++) vis[num[i]]++;
for(int i=;i<=k;i++)
if(vis[num[i]]>=&&vis1[num[i]]) return false;
return true;
}
void dfs(int now,int tot){
if(tot==k){
if(judge()){
ans++;
ans%=mod;
}
return ;
}
if(now>n) return ;
num[tot+]=a[now];dfs(now+,tot+);
dfs(now+,tot);
}
int main(){
//freopen("lpp.in","r",stdin);
freopen("lucky.in","r",stdin);
freopen("lucky.out","w",stdout);
n=read();k=read();
for(int i=;i<=n;i++){
a[i]=read();
int x=a[i],fl=;
while(x){
if(x%!=&&x%!=) fl=;
x/=;
}
if(fl==) vis1[a[i]]=;
else vis1[a[i]]=;
}
dfs(,);
printf("%I64d",ans);
}
50分暴力
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <vector>
#include <map> using std::min;
using std::max; typedef long long i64;
const i64 modulo = i64(1e9) + ;
const int MaxN = ;
const int MaxM = ; i64 power(i64 base, i64 k) {
i64 res = ;
for ( ; k; k >>= ) {
if (k & ) res = (res * base) % modulo;
base = (base * base) % modulo;
}
return res;
} i64 inv(i64 k) {
return power(k, modulo - );
} std::vector<i64> gen_lucky(i64 upper) {
std::vector<i64> res; res.clear();
std::vector<i64> a; a.clear(); a.push_back();
for (int i = ; i < ; ++i) {
std::vector<i64> b; b.clear();
for (size_t j = ; j < a.size(); ++j) {
b.push_back(a[j] * + );
b.push_back(a[j] * + );
}
if (b[] < upper) {
res.insert(res.end(), b.begin(), b.end());
a = b;
} else {
return res;
}
}
return res;
} std::vector<i64> lucky;
std::map<i64, int> lucky2idx;
int n, m, unlucky, k, a[MaxN], cnt[MaxM];
i64 dp[MaxM][MaxM];
i64 f[MaxN]; i64 bincoef(int a, int b) {
i64 tmp = f[a];
tmp = tmp * inv(f[b]) % modulo;
tmp = tmp * inv(f[a-b]) % modulo;
return tmp;
} int main(void)
{ freopen("lucky.in","r",stdin);
freopen("lucky.out","w",stdout);
lucky = gen_lucky(1e9);
m = lucky.size();
for (int i = ; i < m; ++i) {
lucky2idx[lucky[i]] = i;
} scanf("%d%d", &n, &k);
unlucky = n;
for (int i = ; i < n; ++i) {
scanf("%d", a+i);
std::map<i64, int>::iterator it = lucky2idx.find(a[i]);
if (it != lucky2idx.end()) ++cnt[it->second], --unlucky;
} dp[][] = ;
for (int i = ; i < m; ++i) {
for (int j = ; j <= i; ++j) {
dp[i+][j] = (dp[i+][j] + dp[i][j]) % modulo;
dp[i+][j+] += (dp[i+][j+] + (dp[i][j] * cnt[i] % modulo)) % modulo;
}
} f[] = ;
for (int i = ; i <= n; ++i) {
f[i] = f[i-] * i % modulo;
} i64 ans = ;
int st = max(, k-m);
int ed = min(k, unlucky);
for (int i = st; i <= ed; ++i) {
ans += dp[m][k-i] * bincoef(unlucky, i) % modulo;
ans %= modulo;
} printf("%d\n", (int) ans);
fclose(stdin);
fclose(stdout); return ;
}
std
2018 11.1 PION 模拟赛的更多相关文章
- 2018.11.7 PION 模拟赛
期望:100 + 80 + 75 = 255 实际:0 + 80 + 60 = 140 唉~一天比一天犯的错误智障,感觉noip要凉啊... 吓得我赶紧吃几颗药补补脑子. 奶一下大佬: lgj AK ...
- 2018.11.6 PION 模拟赛
期望:100 + 40 + 50 = 190 实际:60 + 10 + 50 = 120 考得好炸啊!!T1数组开小了炸掉40,T2用 int 读入 long long ,int存储 long lon ...
- 2018.11.5 PION模拟赛
期望:30 + 40 + 50 = 120 实际:30 + 50 + 40 = 120 ‘’ 思路:最重要的是发现 是完全没有用的,然后这个题目就可以转成DP来做. /* 期望的分:30 */ #in ...
- 2018.11.3 PION模拟赛
期望:100 实际:100 #include<cstdio> #include<cstring> #include<iostream> #include< ...
- 2018 11.2 PION模拟赛
期望:100 + 50 + 30 = 180 实际:0 + 50 + 30 =80 期望:100 实际:0 数值有负数,边界应该设为-0x7f 此处 gg /* 期望的分:50+ */ ...
- 11.7 NOIP模拟赛
目录 2018.11.7 NOIP模拟 A 序列sequence(two pointers) B 锁lock(思路) C 正方形square(埃氏筛) 考试代码 B C 2018.11.7 NOIP模 ...
- 11/1 NOIP 模拟赛
11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...
- EZ 2018 06 17 NOIP2018 模拟赛(十九)
这次的题目难得的水,但是由于许多哲学的原因,第二题题意表述很迷. 然后是真的猜题意了搞了. 不过这样都可以涨Rating我也是服了. Upt:链接莫名又消失了 A. 「NOIP2017模拟赛11.03 ...
- EZ 2018 06 10 NOIP2018 模拟赛(十八)
好久没写blog&&比赛题解了,最近补一下 这次还是很狗的,T3想了很久最后竟然连并查集都忘写了,然后T2map莫名爆炸. Rating爆减......链接不解释 好了我们开始看题. ...
随机推荐
- HTML5应用 + Cordova = 平台相关的混合应用
Jerry之前的一篇文章 SAP Fiori应用的三种部署方式 曾经提到SAP Fiori应用的三种部署方式: On Premise环境下以ABAP BSP应用作为Fiori应用部署和运行的载体 部署 ...
- oracle插入中文乱码
执行sql: select userenv('language') from dual; -- AMERICAN_AMERICA.ZHS16GBK select * from v$nls ...
- Java中的代理--proxy
讲到代理,好像在之前的springMVC,还是spring中或者是hibernate中学习过,并没有特别在意,这次好好理解一下.(原来是在spring中的AOP,面向切面 Aspect Oriente ...
- java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap Map主要用于存储健值对,根 ...
- Ahoi2014&Jsoi2014 支线剧情
题目描述 题解: 每条边至少经过一次,说明经过下界为$1$. 然后套有源汇上下界最小费用可行流板子. 口胡一下. 此类问题的建图通式为: 1.假设原来的边流量上下界为$[l,r]$,那么在新图中建流量 ...
- MySQL丨03丨基本语句
MySQL语句都是以 ; 号结尾的 看库(刘大婶直接面对的是各种档案袋) show databases; 建库(新弄了一个档案袋) create database database_name; 删库( ...
- java中的编译时与运行时
----?基础知识 -- 编译时 编译器将源代码翻译成机器能够读懂的代码,如java中就是翻译成jvm能够读懂的字节码文件.简单说,编译时就是机器帮我们检查代码是否有出现语法错误,关键字写错之类的 ...
- redis:哨兵集群配置
最少配置1主2从3哨兵 一.引言 上一篇文章我们详细的讲解了Redis的主从集群模式,其实这个集群模式配置很简单,只需要在Slave的节点上进行配置,Master主节点的配置不需要做任何更改,但是有一 ...
- JavaScript:对Object对象的一些常用操作总结
JavaScript对Object对象的一些常用操作总结. 一.Object.assign() 1.可以用作对象的复制 var obj = { a: 1 }; var copy = Object.as ...
- 痛苦的版本对齐(3) cygwin下的路径引用(sed解决篇)
上次问题(见http://www.cnblogs.com/yvivid/p/3546649.html),.depend信息路径错误的问题. 主要尝试了,在(虚拟机下构建)linux下编译,确实没有问题 ...