传送门

## $T1$

一道结论题,设原来A队能力最大的是x,那么A队的选择方案就是$2^{x-1}$,B队的选择方案就是$(2^{n-x}-1)$种,因为不能不选。其中$1\leq x\leq n$,那么根据乘法原理,最后的答案就是 $\sum\limits^{n-1}_{x=1}2^{x-1}*(2^{n-x}-1)$,化简可得 $ans=n*2^{n-1}-(2^{n}-1)$,然后一个快速幂就行了。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #define int long long
  5.  
  6. using namespace std;
  7. const int mod = 1e9+;
  8. typedef long long LL;
  9.  
  10. int n;
  11.  
  12. int fast_pow(int x,int y){
  13. int ret=;
  14. for(;y;y>>=){
  15. if(y&) ret=(LL)ret*x%mod;
  16. x=(LL)x*x%mod;
  17. }
  18. return ret;
  19. }
  20.  
  21. signed main(){
  22. scanf("%lld",&n);
  23. int ans=(n*fast_pow(,n-)%mod-(fast_pow(,n)-)%mod+mod)%mod;
  24. cout<<ans<<endl;
  25. return ;
  26. }

## $T2$

一道比较套路的题吧,首先肯定是先按每个物品的消失时间排序,然后就可以跑背包了,$f[i][j]$表示到了第$i$个物品,时间为$j$的最大收益,时间复杂度$O(n*MAX\_D)$。输出方案考试时候想了挺久。。。其实就是倒着走回去。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<algorithm>
  6.  
  7. using namespace std;
  8. const int MAXN = ;
  9.  
  10. inline int rd(){
  11. int x=,f=;char ch=getchar();
  12. while(!isdigit(ch)) {f=ch=='-'?:;ch=getchar();}
  13. while(isdigit(ch)) {x=(x<<)+(x<<)+ch-'';ch=getchar();}
  14. return f?x:-x;
  15. }
  16.  
  17. int n,ans,lx,ly,all[MAXN],cnt;
  18. int f[MAXN][];
  19.  
  20. struct Node{
  21. int t,w,d,id;
  22. }data[MAXN];
  23.  
  24. inline bool cmp(Node A,Node B){
  25. return A.d<B.d;
  26. }
  27.  
  28. int main(){
  29. // freopen("T2.out","w",stdout);
  30. n=rd();
  31. for(int i=;i<=n;i++)
  32. data[i].t=rd(),data[i].d=rd(),data[i].w=rd(),data[i].id=i;
  33. sort(data+,data++n,cmp);
  34. for(int i=;i<=n;i++)
  35. for(int j=;j<data[i].d;j++){
  36. f[i][j]=f[i-][j];
  37. if(j>=data[i].t)
  38. f[i][j]=max(f[i][j],f[i-][j-data[i].t]+data[i].w);
  39. }
  40. for(int i=;i<=data[n].d;i++)
  41. if(f[n][i]>ans) {
  42. ans=f[n][i];
  43. ly=i;
  44. }
  45. lx=n;cout<<ans<<endl;
  46. for(int i=n;i;i--)
  47. for(int j=ly;j>=;j--)
  48. if(f[i][j]==ans) {
  49. if(f[i-][j]!=f[i][j]) ans-=data[i].w,all[++cnt]=data[i].id;
  50. ly=j;break;
  51. }
  52. printf("%d\n",cnt);
  53. for(int i=cnt;i;i--) printf("%d ",all[i]);
  54. return ;
  55. }

## $T3$

考试的时候没有做出来,后来经过$G \color{red} {hostCai}$神犇的指点,才知道用网络流做,开一个超级源点$S$和一个超级汇点$T$,然后将每个点拆成左部点和右部点,$S$向左部点连流量为$a[i]$的点,表示每个点至多能向其他点给出$a[i]$的能量,左部点向能到达的右部点连流量为$inf$的边(注意要连自己),右部点向汇点连流量为$b[i]$的边,表示最多收到$b[i]$的能量,然后跑一个最大流,看所有右部点到汇点的边是否满流,不满说明无解。再看每个左部点到所有右部点的反边的流量即为答案。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<queue>
  6. #define czq namespace
  7.  
  8. using czq std;
  9. const int MAXN = ;
  10. const int MAXM = ;
  11. const int inf = 0x3f3f3f3f;
  12.  
  13. inline int rd(){
  14. int x=,f=;char ch=getchar();
  15. while(!isdigit(ch)) {f=ch=='-'?:;ch=getchar();}
  16. while(isdigit(ch)) {x=(x<<)+(x<<)+ch-'';ch=getchar();}
  17. return f?x:-x;
  18. }
  19.  
  20. int n,m,head[MAXN],to[MAXM],val[MAXM],nxt[MAXM];
  21. int cnt=,a[MAXN],b[MAXN],S,T,cur[MAXN],d[MAXN],ans[MAXN][MAXN];
  22. queue<int> Q;
  23.  
  24. inline void add(int bg,int ed,int w){
  25. to[++cnt]=ed,nxt[cnt]=head[bg],val[cnt]=w,head[bg]=cnt;
  26. to[++cnt]=bg,nxt[cnt]=head[ed],val[cnt]=,head[ed]=cnt;
  27. }
  28.  
  29. bool bfs(){
  30. memset(d,,sizeof(d));
  31. while(Q.size()) Q.pop();
  32. Q.push(S);d[S]=;
  33. while(Q.size()){
  34. int x=Q.front();Q.pop();
  35. for(register int i=head[x];i;i=nxt[i]){
  36. int u=to[i];
  37. if(!d[u] && val[i]){
  38. d[u]=d[x]+;
  39. if(u==T) return true;
  40. Q.push(u);
  41. }
  42. }
  43. }
  44. return false;
  45. }
  46.  
  47. int dinic(int x,int flow){
  48. if(x==T) return flow;
  49. int res=flow,k;
  50. for(register int &i=cur[x];i && res;i=nxt[i]){
  51. int u=to[i];
  52. if(val[i] && d[u]==d[x]+){
  53. k=dinic(u,min(res,val[i]));
  54. if(!k) d[u]=;
  55. val[i]-=k;res-=k;val[i^]+=k;
  56. // cout<<k<<endl;
  57. }
  58. }
  59. return flow-res;
  60. }
  61.  
  62. int main(){
  63. n=rd(),m=rd();int x,y;S=*n+,T=*n+;
  64. for(int i=;i<=n;i++) a[i]=rd(),add(S,i,a[i]),add(i,i+n,inf);
  65. for(int i=;i<=n;i++) b[i]=rd(),add(i+n,T,b[i]);
  66. for(int i=;i<=m;i++){
  67. x=rd(),y=rd();
  68. add(x,y+n,inf);
  69. add(y,x+n,inf);
  70. }
  71. while(bfs()) {memcpy(cur,head,sizeof(head));dinic(S,inf);}
  72. for(register int i=head[T];i;i=nxt[i])
  73. if(val[i^]) {puts("NO");return ;}
  74. puts("YES");
  75. for(register int i=;i<=n;i++)
  76. for(register int j=head[i];j;j=nxt[j]){
  77. int u=to[j];
  78. ans[i][u-n]+=val[j^];
  79. }
  80. for(register int i=;i<=n;i++){
  81. for(register int j=;j<=n;j++)
  82. printf("%d ",ans[i][j]);
  83. putchar('\n');
  84. }
  85. return ;
  86. }

洛谷 NOIP提高组模拟赛 Day1的更多相关文章

  1. l洛谷 NOIP提高组模拟赛 Day2

    传送门 ## T1 区间修改+单点查询.差分树状数组. #include<iostream> #include<cstdio> #include<cstring> ...

  2. 【洛谷】NOIP提高组模拟赛Day1【组合数学】【贪心+背包】【网络流判断是否满流以及流量方案】

    U41568 Agent1 题目背景 2018年11月17日,中国香港将会迎来一场XM大战,是世界各地的ENLIGHTENED与RESISTANCE开战的地点,某地 的ENLIGHTENED总部也想派 ...

  3. HGOI2010816 (NOIP 提高组模拟赛 day1)

    Day1 210pts(含T1莫名的-10pts和T3莫名的-30pts) 100+70+40=210 rank 29 这道题第一眼看是字符串匹配问题什么KMP啊,又想KMP不会做啊,那就RK Has ...

  4. [LUOGU] NOIP提高组模拟赛Day1

    题外话:以Ingress为题材出的比赛好评,绿军好评 T1 考虑枚举第\(i\)个人作为左边必选的一个人,那左边剩余\(i-1\)个人,选法就是\(2^{i-1}\),也就是可以任意选或不选,右侧剩余 ...

  5. 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】

    U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...

  6. 计蒜客 2017 NOIP 提高组模拟赛(四)Day1 T2 小X的密室

    https://nanti.jisuanke.com/t/17323 小 X 正困在一个密室里,他希望尽快逃出密室. 密室中有 N 个房间,初始时,小 X 在 1号房间,而出口在 N号房间. 密室的每 ...

  7. 10-18 noip提高组模拟赛(codecomb)T1倍增[未填]

    T1只想到了找环,> <倍增的思想没有学过,所以看题解看得雨里雾里的(最近真的打算学一下! 题目出的挺好的,觉得noip极有可能出现T1T2T3,所以在此mark 刚开始T1以为是模拟,还 ...

  8. 10-18 noip提高组模拟赛(codecomb)T2贪心

    T2:找min:一直找最小的那个,直到a[i]-x+1小于0,就找次小的,以此类推: 求max,也是一样的,一直到最大的那个,直到次大的比之前最大的大,就找次大的: 这个模拟,可以用上priority ...

  9. HGOI20180815 (NOIP 提高组模拟赛 day2)

    Day 2 rank 11 100+35+30=165 本题是一道数论题,求ax+by=c的正整数对(x,y) x>=0并且y>=0 先说下gcd: 求a,b公约数gcd(a,b) 如gc ...

随机推荐

  1. 2019 牛客多校第三场 B Crazy Binary String

    题目链接:https://ac.nowcoder.com/acm/contest/883/B 题目大意   给定一个长度为 N 的 01 字符串,输出最长子串和子序列的长度,满足其中 0 和 1 的个 ...

  2. super 关键字的使用及说明

    super 关键字主要用于访问父类的变量和方法. 代码示例: public class Student { String name; public Student(){ System.out.prin ...

  3. Rabbit MQ 客户端 API 开发

    项目开始 第一步首先需要引入对应的 jar 包 <!-- https://mvnrepository.com/artifact/com.rabbitmq/amqp-client --> & ...

  4. adb shell 查看内存信息

    1.根据包名来查看指定的APP指定数据adb shell "top | grep com.xxx.xxx" 由于这样打印出来的数据没有参数名,可以参考这个命令来看:adb shel ...

  5. c++ socket 出现绑定失败的一个特殊原因。Bind failed Error:10049

    这个问题,客户那边出现这种情况已经将近一年时间, 一直都得不到很好的解决,我提供出去的动态库可以确保没有问题,因为除了这家公司,其他有好几家公司都在用的,都是很正常的,但是这家公司很奇怪,不,应该说这 ...

  6. Docker学习のDocker镜像

    一.列出镜像 命令:docker images [optsions] [repositort] -a 标识列出所有 -f  写过滤条件 --no-trunc  不截断id -q 只显示唯一id rep ...

  7. Django ORM 之基于对象、双下划线查询

    返回ORM目录 Django ORM 内容目录: 一. 基于对象的表查询 二. 基于双下划线的查询 三. 聚合查询 aggregate 四. 分组查询 annotate 一. 基于对象的表查询 1.正 ...

  8. 详解redis服务

    http://mp.weixin.qq.com/s?__biz=MzIyMDA1MzgyNw==&mid=2651968327&idx=1&sn=6e6cb01d334d7ae ...

  9. 使用OCCI操作Oracle数据库写入中文乱码

    解决方法如下: oracle::occi::Environment *pOracleOcciEnv = Environment::createEnvironment(oracle::occi::Env ...

  10. vue 项目 去哪儿

    去哪儿项目 使用vue +vue-router+vuex +axios完成,包括3个部分内容 1.首页演示,包括首页header,首页轮播图,周末去哪儿,热销推荐开发 2.城市列表页面开发 ,包括城市 ...