set与split

所以说不要以为前一天考了什么后一天就不会考这类的东西了

出题人总是能竭尽所能

打破你的下限qaq

naive

split 详解blog来自ljz大佬:http://blog.csdn.net/ljz_2016/article/details/54986358

然后set的话

我本来是以为昨天已经考过一道大家什么都没学的数学题

这事儿就这么完了

可惜没有qwq

解释一部分来自题解 一部分来自自己

写写划划试几个小的数据应该有助于理解

对 以后写题的时候也一定要记得 不管是什么样的题目 空想往往让人又迟钝又烦闷

不如来点实在的 对吧

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<string>
 7 #define ll long long
 8 #define maxn 100100
 9 using namespace std;
10 const int mod=(1000000000+7);
11 ll jc[maxn];
12 ll qpow(ll x,ll y){
13     ll ans=1;
14     for (;y;y>>=1,x*=x){x%=mod;  if (y&1) ans*=x; ans%=mod;}
15     return ans;
16 }
17 ll inv(ll a){
18     return qpow(a,mod-2);
19 }
20 int main(){
21     //freopen ("set.in","r",stdin);
22     //freopen ("set1.out","w",stdout);
23     int n;
24     scanf ("%d",&n);
25     jc[0]=1;
26     /*设最后都收束为p,显然f(p)=p。
27     设有L个f(x)=p,除了p还要任选L-1个,
28     剩下n-L个都要在这L-1个位置中任取。枚举L,
29     复杂度O(n)   f(n-L) -> L-1种值*/
30     for (int i=1;i<=n;++i) jc[i]=(jc[i-1]*i)%mod;
31     ll ans=0;
32     for (int l=1;l<=n;++l){
33         //n-1里选l-1个数u
34         ll as=jc[n-1]*inv(jc[l-1])%mod*inv(jc[n-l])%mod;
35         //把n-l个数放进l-1个位置里
36         ll am=qpow(l-1,n-l);
37         ans=(as*am%mod)+ans;
38         ans%=mod;
39     }
40     ans=ans*n%mod;
41     cout<<ans;
42     return 0;
43   }

然后这次求逆元用的是费马小定理 (其实上次也可以

快速幂打wa+mod 没打括号改了40分钟也是没谁了(仰胁息

考场想出了组合然而那时候也是不会逆元的

也不知道可以quickpow一下 不过现在感觉解释还是讲得满清楚的

一定记得有事没事就膜膜膜

(gouliguojia)

为出题人+1s

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<string>
#define N 100100
#define ll longlong
#define mod 1000000007
usingnamespace std;
ll ni[N],jie[N];
void ex(ll a,ll b,ll & x,ll & y,ll & r){
if(b==0) r=a,x=1,y=0;
else{
		ex(b,a%b,y,x,r);
		y-=x*(a/b);
}
}
ll nii(ll a,ll b){
	ll r,x,y;
	ex(a,b,x,y,r);
return r==1?(x+b)%b:-1;
}
int main(){
//	freopen ("split.in","r",stdin);
//	freopen ("split.out","w",stdout);
	jie[0]=1;
for(int i=1;i<N;++i) jie[i]=(jie[i-1]*i)%mod;
	ni[0]=ni[1]=1;
for(int i=2;i<N;++i) ni[i]=nii(i,mod)%mod;
for(int i=2;i<N;++i) ni[i]=(ni[i-1]*ni[i])%mod;
//	for (int i=2;i<N;++i) cout<<ni[i]<<endl;
	ll n,t,w;
	ll anss=0;
	scanf ("%lld%lld%lld",&n,&t,&w);
for(int i=1;i<=n;++i){
		ll x,y;
		scanf ("%lld%lld",&x,&y);
		ll we=x-t;
if(w<we||w>we+2*t)continue;
if((w-we)%2)continue;
		ll ans=((jie[t]%mod)*(ni[t-(w-we)/2]%mod))%mod;
		ans*=(ni[(w-we)/2]%mod);
		ans%=mod;
		anss+=((ans*y)%mod);
}
	printf ("%lld",anss%mod);
return0;
}
时间: 2024-08-02 06:49:30

set与split的相关文章

SQL Server自定义字符串分割函数——Split

我相信大部分人都碰到过,处理数据的时候,字段的值是以 ',' (逗号)分隔的形式,所以我也不能避免. 然后我才知道,sql 是没有类似于 C# 和 Javascript 这种分割字符串的方法.( Split ) 所以我自己定义了一个 sql 函数(多声明表值函数),代码如下: 1 USE [Test] 2 GO 3 /****** Object: UserDefinedFunction [dbo].[Split] Script Date: 2017/4/14 23:04:08 ******/ 4

C#字符串Split方法的误区

string s = "aaa1bbb2ccc1ddd";        string[] ss = s.Split("12".ToCharArray()); 这句话的意思是1和2每个字符分别是分割关键字,而不是12是分割关键字,一定要弄清晰. 输出值为 aaa bbb ccc ddd

split、rar拆分大文件

split拆分大文件 系统默认自带有 # split -b 2048m aa aa_ -b n[bkm]  b代表512b,k代表1KB,m代表1M 后面aa表示指定文件前缀 结果为:aa_aa aa_ab 合并拆分文件: # cat aa_aa aa_ab > aa rar拆分大文件 # apt-get install rar # rar a -v2048m aa.rar aa 结果为:aa.part1.rar aa.part2.rar 合并并解压: # unrar aa.part1.rar

split 实现(c++ string)

#include <iostream> #include <vector> size_t split(std::string &src, std::vector<std::string> *tokens, std::string sep) { size_t last= 0; size_t index = src.find(sep, last); size_t length = src.size(); while(index != std::string::npo

swift -- 定义空字符串 hasPrefix hasSuffix trim split join range

// 定义空的字符串 var str1 = "" var str2 = String() str1.isEmpty      // 判断字符串是否为空 // 输出字符串中所有的字符 var str3 = "As god name" for c in str3{ println(c) } Int.max   // Int类型的最大值 Int.min   // Int类型的最小值 var arr1 = ["c", "oc", &q

python中的split函数中的参数问题

第一个参数代表的是分割符号,第二个参数表明是split次数. 用下面这个例子测试: str = 'server=mpilgrim&ip=10.10.10.10&port=8080'print str.split('=', 1)[0]print str.split('=', 1)[1]print str.split('=')[0]print str.split('=')[1] 结果是: servermpilgrim&ip=10.10.10.10&port=8080server

[Java]_[初级]_[String的split里的坑]

场景: 1. 有时候需要使用某些字符来作为值的合并存储,比如以@作为分隔符, [email protected]@323232, 用一个属性存储这3个值, 用的时候再拿出来split就可以了. 2. 问题是有时候某个值会缺失,比如第一个值没有的情况, @[email protected]  第2,3个值没有的情况 [email protected]@ ,当然也期望是能返回3个值,只是后边2个值为空字符就行了. 事实上,结果不是这样,即使 2,3个值没有的情况 [email protected]@

guava Splitter 与java 内置的string的split 方法有什么区别.

java内置的会忽略空内容,guava Splitter不会忽略.或者可以自由选择的忽略. /** * {@code Splitter}和{@code Joiner} 这两个对于map的相反的操作,在web框架例如spring mvc中用到过. * * 对于get url后面的参数和pos form中前端参数的连接和后端的拆分都有用到.每个框架的处理思维是一样的. * * @author doctor * * @since 2015年3月14日 下午9:00:17 */ ............

文件的切分split和合并cat

大纲 1.文件的切分和合并工具 2.文件的切分:split 3.语法格式 4.split实战演练 5.合并:cat 6.文件完整性校验 1.文件的切分和合并工具 有时候我们可能遇见这种情况,有时文件比较大,想上传到服务器上,但由于服务器管理员为了安全考虑,把上传空间作了限制,比如只能上传20M的文件,如果我们文件的体积在100M的,有时就是压缩也不能满足服务器上传的限制.这时我们就要考虑切分文件了,把100M的文件,切分成若干份,然后传到服务器上.切分后的每个文件都是原文件的组成部份.如果要获得

HBase的几种调优(GC策略,flush,compact,split)

HBase的几种调优(GC策略,flush,compact,split) 一:GC的调优 1.jvm的内存 新生代:存活时间较短,一般存储刚生成的一些对象 老年代:存活时间较长,主要存储在应用程序中生命周期较长的对象 永久代:一般存储meta和class的信息 2.GC策略 Parrallel New Collector,垃圾回收策略 并行标记回收器(Concurrent Mark-Sweep Collector) 3.Parrallel New Collector 速度快,但是数据量一大,容易