2018 Multi-University Training Contest 4
累惹。
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的更多相关文章
- 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 ...
- 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 ...
- 2018 Nowcoder Multi-University Training Contest 5
Practice Link A. gpa 题意: 有\(n\)门课程,每门课程的学分为\(s_i\),绩点为\(c_i\),要求最多删除\(k\)门课程,使得gpa最高. gpa计算方式如下: \[ ...
- 2018 Nowcoder Multi-University Training Contest 10
Practice Link J. Rikka with Nickname 题意: 给出\(n\)个字符串,要求依次合并两个串\(s, t\),满足将\(t\)合并到\(s\)中变成\(r\),使得\( ...
- 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 ...
- 2018 Multi-University Training Contest 2
题目链接:2018 Multi-University Training Contest 2 6318 Swaps and Inversions 题意:sum=x*逆序个数+交换次数*y,使sum最小 ...
- 2018 Multi-University Training Contest 1
比赛链接:2018 Multi-University Training Contest 1 6301 Distinct Values 题意:输出一个长度为n的序列,要求满足m个区间的数都不相同,并且字 ...
- 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 ...
- 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 ...
- 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 ...
随机推荐
- 如何在C#中自定义自己的异常
在C#中所有的异常类型都继承自System.Exception,也就是说,System.Exception是所有异常类的基类. 总起来说,其派生类分为两种:1. SystemException类: 所 ...
- C语言跳表(skiplist)实现
一.简介 跳表(skiplist)是一个非常优秀的数据结构,实现简单,插入.删除.查找的复杂度均为O(logN).LevelDB的核心数据结构是用跳表实现的,redis的sorted set数据结构也 ...
- Banner设计的视觉导向原则分析
Banner的布局方式 常见的Banner布局方式有五种,以下分别给出大致样式: 两栏式: 三栏式: 组合式: 一体式: 对角线式: 以上几种布局方式不分好坏,对于不同的主题.素材和文案可以自行选 ...
- socket多文件发送(压缩,解压)
.客户端代码 public static void FileMoveInVirtualMachineForCompressor() { var obj = new object(); string i ...
- centos_x64 6.4 安装jdk1.7
1.行到user目录下新建一个java目录 #cd /usr #mkdir java #cd /usr/java/ 2.下载jdk 先从oracle找到要下载的jdk地址然后 wget http:// ...
- TextView等组件的LayoutParams不能随便用,不然组件不显示
TableLayout.LayoutParams lpRow = new TableLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTEN ...
- 在使用html5的video标签播放视频时为何只有声音却没有图像
在使用html5的video标签播放视频时为何只有声音却没有图像? 答:使用格式化工厂转个编码就行了,MP4有3种编码,mpg4(xdiv),,mpg4(xvid),avc(h264)转换成H264编 ...
- flac3d自定义变量输出云图
定义单元体能量为微单元体的应变比能,即当应力和应变满足线性关系时,微单元体在三向应力状态下的应变比能为: (3.1) 下面代码为用户自定义云图显示变量. Flac3d Code new gen zon ...
- HDU 5956 The Elder (树上斜率DP)
题意:给定上一棵树,然后每条边有一个权值,然后每个点到 1 的距离有两种,第一种是直接回到1,花费是 dist(1, i)^2,还有另一种是先到另一个点 j,然后两从 j 向1走,当然 j 也可以再向 ...
- GitBash入门
转载自:http://www.cnblogs.com/randomsteps/p/5415116.html 作为一个初学者,我是跟着廖学峰老师的官方博客学习,这里只是做个笔记,哈哈,关于git的历史. ...