累惹。

B. Harvest of Apples

题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6333

题意:求∑(i=0,m) C(n,m)。

分析:定义S(n,m)=∑(i=0,m) C(n,m)。可以知道:

S(n,m)=S(n,m-1)+C(n,m),S(n-m)=S(n-1,m-1)+S(n-1,m)=2*S(n-1,m-1)+C(n-1,m)。

由此可以推导出,由S(n,m)到S(n-1,m),S(n+1,m),S(n,m-1),S(n,m+1)的式子为:

S(n-1,m)=(S(n,m)+C(n-1,m))/2

S(n+1,m)=2*S(n,m)-C(n,m)

S(n,m-1)=S(n,m)-C(n,m)

S(n,m+1)=S(n,m)+C(n,m+1)

得到了四个方向的状态转移式,因此,可以用莫队离线处理。

 #include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+;
const int mod=1e9+;
typedef long long ll;
struct point{
int n,m,block,id;
}q[maxn];
ll fac[maxn],inv[maxn],ans[maxn];
int res,Block;
void init(){
inv[]=inv[]=;
for (int i=;i<maxn;i++)
inv[i]=(mod-mod/i)*inv[mod%i]%mod;
}
int comp(point p,point q){
return p.block<q.block || p.block==q.block && p.m<q.m;
} int main(){
init();
int t;
cin >> t;
Block=(int)(sqrt(t));
for (int i=;i<t;i++){
cin >> q[i].n >> q[i].m;
q[i].id=i;
q[i].block=q[i].n/Block;
}
sort(q,q+t,comp);
ll n=,m=,nc=,res=;
for (int i=;i<t;i++){
int nn=q[i].n,nm=q[i].m;
while (nn<n){
nc=nc*(n-m)%mod*inv[n]%mod;
res=(res+nc)%mod*inv[]%mod;
n--;
}
while (nn>n){
res=(res*%mod-nc+mod)%mod;
nc=nc*(n+)%mod*inv[n+-m]%mod;
n++;
}
while (nm<m){
res=(res-nc+mod)%mod;
nc=nc*m%mod*inv[n-m+]%mod;
m--; }
while (nm>m){
nc=nc*(n-m)%mod*inv[m+]%mod;
res=(res+nc)%mod;
m++;
}
ans[q[i].id]=res;
}
for (int i=;i<t;i++) cout << ans[i] << endl;
return ;
}

hdoj6333

D. Nothing is Impossible

题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6335

题意:有若干道题,每题有1个正确选项,b个错误选项,问一个最优决策使得winner得分最大。

分析:如果仅有 1 道题,至少有一个人做对这题需要有 错误答案个数 + 1 个人。那么容易发现在每道题正确答案只有一个的情况下,如果 nn 道题中存在 ss 道题,使得学生人数 mm 不少于每道题 错误答案个数 + 1 相乘的结果,那么一定有人能够得到 ss 分。故我们将题目按错误答案个数从小到大排序,找到最大的 pp 满足就是答案。

 #include<bits/stdc++.h>
using namespace std;
const int N=;
struct node{int a,b,num;}a[N];
bool cmp(node a,node b){return a.num<b.num;}
int main(){
int t,n,m;scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d%d",&a[i].a,&a[i].b),a[i].num=a[i].a+a[i].b;
sort(a+,a+n+,cmp);
int tmp=m;int cnt=-;
for(int i=;i<=n;i++){
int num=a[i].num;
int nn=tmp/num;
tmp=nn*a[i].a;
if(tmp<) break;
cnt=i;
}
printf("%d\n",cnt);
}
return ;
}

hdoj6335

E. Matrix from Arrays

题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6336

题意:根据题意构造一个矩阵,求子矩阵和。

分析:打表发现矩阵有循环节。n为奇数时循环节为n*n,n为偶数时循环节为2*n*2*n。求出循环节二维前缀和,再扩展到普通矩阵求和即可。

 #include<iostream>
#include<cstring>
#define maxn 500
using namespace std;
typedef long long ll;
int mp[maxn][maxn],a[maxn];
int L;
void init(){
int cursor = ;
for (int i = ;i<*L; ++i) {
for (int j = ; j <= i; ++j) {
mp[j][i - j] = a[cursor];
cursor = (cursor + ) % L;
}
}
L*=;
for (int i=;i<L;i++)
for (int j=;j<L;j++){
if (i) mp[i][j]+=mp[i-][j];
if (j) mp[i][j]+=mp[i][j-];
if (i && j) mp[i][j]-=mp[i-][j-];
}
}
ll calc(int x,int y){
if (x< || y<) return ;
ll res=;
res=1ll*mp[L-][L-]*(x/L)*(y/L)+1ll*mp[x%L][L-]*(y/L)+1ll*mp[L-][y%L]*(x/L)+1ll*mp[x%L][y%L];
return res;
}
ll slove(){
int l1,r1,l2,r2;
ll res=;
cin >> l1 >> r1 >> l2 >> r2;
res=calc(l2,r2)-calc(l1-,r2)-calc(l2,r1-)+calc(l1-,r1-);
return res;
}
int main(){
ios::sync_with_stdio(false);
cin.tie();cout.tie();
int t,q;
cin >> t;
while (t--){
cin >> L;
for (int i=;i<L;i++) cin >> a[i];
init();
cin >> q;
while (q--){
ll ans=slove();
cout << ans << endl;
}
}
return ;
}

hdoj6336

K. Expression in Memories

题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6342

题意:在?处填入数字0-9或+,*使得表达式合法。

分析:填入1或+即可。

 #include<bits/stdc++.h>
using namespace std;
bool is1(char c){
return c=='+'||c=='*';
}
int main(){
std::ios::sync_with_stdio(false);
int t;string s;cin>>t;
while(t--){
cin>>s;s='+'+s;int len=s.size();
for(int i=;i<len;i++){
if(s[i]=='?'){
if(s[i-]==''&&(s[i-]=='+'||s[i-]=='*')) s[i]='+';
else s[i]='';
}
}
int flag=;
for(int i=;i<len;i++){
if(is1(s[i])&&is1(s[i-])) flag=;
if(i==len-) break;
if(is1(s[i-])&&s[i]==''&&!is1(s[i+])) flag=;
}
string ans="";
for(int i=;i<len;i++) ans+=s[i];
if(is1(s[len-])) flag=;
if(flag) cout<<ans<<"\n";
else cout<<"IMPOSSIBLE"<<"\n";
}
return ;
}

hdoj6342

L. Graph Theory Homework

题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6343

题意:起点1,终点n,中间可经过任意点。求1-n的最小距离。

分析:容易证明:|sqrt(a)| + |sqrt(b)| > |sqrt(a+b)| ,边权满足三角不等式,故直接从1-n距离最小。

 #include<iostream>
#include<algorithm>
#include<cmath>
#define maxn 100005
using namespace std;
int a[maxn];
int main(){
ios::sync_with_stdio(false);
cin.tie();cout.tie();
int t,n;
cin >> t;
while (t--){
cin >> n;
for (int i=;i<=n;i++) cin >> a[i];
int ans=(int)sqrt(abs(a[]-a[n]));
cout << ans << endl;
}
return ;
}

hdoj6343

2018 Multi-University Training Contest 4的更多相关文章

  1. 2018 Nowcoder Multi-University Training Contest 2

    目录 Contest Info Solutions A. run D. monrey G. transform H. travel I. car J. farm Contest Info Practi ...

  2. 2018 Nowcoder Multi-University Training Contest 1

    Practice Link J. Different Integers 题意: 给出\(n\)个数,每次询问\((l_i, r_i)\),表示\(a_1, \cdots, a_i, a_j, \cdo ...

  3. 2018 Nowcoder Multi-University Training Contest 5

    Practice Link A. gpa 题意: 有\(n\)门课程,每门课程的学分为\(s_i\),绩点为\(c_i\),要求最多删除\(k\)门课程,使得gpa最高. gpa计算方式如下: \[ ...

  4. 2018 Nowcoder Multi-University Training Contest 10

    Practice Link J. Rikka with Nickname 题意: 给出\(n\)个字符串,要求依次合并两个串\(s, t\),满足将\(t\)合并到\(s\)中变成\(r\),使得\( ...

  5. HDU 2018 Multi-University Training Contest 3 Problem A. Ascending Rating 【单调队列优化】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6319 Problem A. Ascending Rating Time Limit: 10000/500 ...

  6. 2018 Multi-University Training Contest 2

    题目链接:2018 Multi-University Training Contest 2 6318 Swaps and Inversions 题意:sum=x*逆序个数+交换次数*y,使sum最小 ...

  7. 2018 Multi-University Training Contest 1

    比赛链接:2018 Multi-University Training Contest 1 6301 Distinct Values 题意:输出一个长度为n的序列,要求满足m个区间的数都不相同,并且字 ...

  8. hdu 6301 Distinct Values (2018 Multi-University Training Contest 1 1004)

    Distinct Values Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  9. 2018 Multi-University Training Contest 4 Problem J. Let Sudoku Rotate 【DFS+剪枝+矩阵旋转】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6341 Problem J. Let Sudoku Rotate Time Limit: 2000/100 ...

  10. 2018 Multi-University Training Contest 4 Problem K. Expression in Memories 【模拟】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6342 Problem K. Expression in Memories Time Limit: 200 ...

随机推荐

  1. 讲真的,千万别得罪会PS的人

    传说中有一种软件炒鸡可怕 那就是PS,专业术语是photoshop! 它能让你貌美如花 也能让你瞬间丑得掉渣 更可怕的是网络上大神的出现 简直让我们难以想象的厉害! 下面大家一起来欣赏一下 那些大神帮 ...

  2. OSGi 系列(十)之 Blueprint

    OSGi 系列(十)之 Blueprint blueprint 是 OSGi 的一个规范,类似于 spring 的 IOC,用来处理 OSGi 的动态特性,可以大大简化服务的使用. blueprint ...

  3. centos 6.5 安装mysql

    步骤1: yum -y install mysql-server 步骤2: chkconfig mysqld on 步骤3: service mysqld start mysql -u root se ...

  4. 解决Android启动显示空白界面的问题

    Android程序启动时,第一个看的界面并不是我们的指定的第一个Activity界面,而是显示了一个空白的界面,带标题栏的,但是界面什么内容都没有,这个界面只显示不到1秒左右的时间就会切换到我们的第一 ...

  5. android 蓝牙通讯编程 备忘

    1.启动App后: 判断->蓝牙是否打开(所有功能必须在打牙打开的情况下才能用) 已打开: 启动代码中的蓝牙通讯Service 未打开: 发布 打开蓝牙意图(系统),根据Activity返回进场 ...

  6. Linux服务器部署系列之一—Apache篇(下)

    接上篇 linux服务器部署系列之一—Apache篇(上)    四.管理日志文件 Apache日志分为访问日志和错误日志两种: 1)访问日志 用于记录客户端的访问信息,文件名默认为access_lo ...

  7. int最大值+1为什么是-2147483648最小值-1为什么是2147483647

    今天一个新手学编程就问到这个问题,很多人第一次学编程肯定会遇到这个问题,大部分都知道是溢出之类的,用源码和补码就很容易说明 int i = -2147483648 ;这是不允许的 VS里报的错 err ...

  8. qt编程遇到的东西

    setWindowFlags http://blog.chinaunix.net/uid-23500957-id-3876399.html move()方法,的作用是设置QWidget部件的pos坐标 ...

  9. ArcGIS Desktop python Add-in Python 插件的文件结构

    如上图所示: 插件文件夹在根目录下有一个config.xml文件,这个文件保存有在向导添加的描述该插件的定制信息. 插件还有一个安装文件夹,这个文件夹的主要功能是存放Python脚本. 你可以在安装文 ...

  10. C/C++的Name Mangling

    C语言 函数 1.void __CALLTYPE f();2.int __CALLTYPE f();3.int __CALLTYPE f(int);4.double __CALLTYPE f(int, ...