博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2016 icpc ECfinal && codeforcesgym101194
阅读量:7113 次
发布时间:2019-06-28

本文共 3209 字,大约阅读时间需要 10 分钟。

一不小心惨变旅游队,不过上海的风景不错

顺带找其他队交流一下集训经验。。。或许可以成为选拔和集训16级的依据

A、直接模3就可以了,2^(3*n)%7=1

C、Mr. Panda and Strips

由于只求1条或2条,n<=1000,支持o(n2)解法,可以区间DP出单段区间含不重复数字的链

由于包含同数字之间的区间肯定不能用,左区间的最右数字肯定就是筛选目标

可以利用这个性质,枚举左区间,左区间从左到右,之后右区间从左到右

可以在扫描右区间碰到已存在数字时直接换左区间

没有碰到就把区间[1,n]按照最右数字在不同位置的存在情况切区间,把包含右数字的取出,剩下的区间在最后取最大结果

由于不包含某个数字的区间肯定在上一轮被取过,初始放进集合的区间可随左区间缩小,可以防止重复取答案

此代码为virtual judge的某位大侠原创,我只是为了适应vc6.0和改进一个小地方把代码改得不像样而已。。。

#include 
#include
#include
#include
#include
#include
using namespace std;typedef pair
PII;const int N=1005,MAX=100005;vector
p[MAX];int a[N],dp[N][N];bool isok[N][N];int vis[MAX];set
ival;multiset
q;int max(int a,int b){ return a>b?a:b;}void split(int x)//查出x属于的[a,b],把[a,b]切成[a,x-1]和[x+1,b]{ set
::iterator it=ival.lower_bound(PII(x+1,0)); if (it==ival.begin()) return; it--; int a=it->first,b=it->second; ival.erase(it); q.erase(q.find(dp[a][b])); if (a
View Code

 

D、刚开始贪心炸了,后来发现要二分,然而应该是中间处理写崩了。。。

 

E、Bet

题目意思场上没有读出。。。给出每个队的赔率Ai:Bi,按照一定比例投注每个队,要求在尽量投多队的同时,任何投的队赢都能赚(就是这里想不明白!!!为什么没有投的队就一定不会赢)获得金是本金*(ai+bi)/ai

设投在i队的本金是ci,总投注d,则整个题目就是说选出尽可能多的i并且所有的c加起来就是d,而且所有i都满足ci*(ai+bi)/ai>d

那投在i队的比例就是qi=ci/d

本质上就是求使得i集合全部满足qi>ai/(ai+bi),q1+q2+...+qn=1时,i的数量最多

太简单了,把qi等同于ai/(ai+bi),然后排序,从小到大逐一加,加到大于1时停止计数

然鹅----这个算式没有高精度会炸。本来想写一波高精除法,结果看到有人用long double硬杠过去就脱力了。。。

#include 
#include
#include
#include
#include
#include
using namespace std;int n;long double al[105],res;double k,u;int main(){ int t,cas,i,ik,iu; scanf("%d",&cas); for(t=1;t<=cas;t++) { scanf("%d",&n); for(i=0;i
=1)break; cnt++; } printf("Case #%d: %d\n",t,cnt); } return 0;}
View Code

 

H、Great Cells

设gn是同行同列极大值至少有n个的方案数,

答案公式a0+2a1+3a2+...+(n+1)an=(a0+a1+...+an)+1a1+2a2+3a3+...+nan

发现整道题目其实是求所有情况的方案数+这些情况里面极大值的总个数

而极大值的个数可以每个格子单独算,就是每个格子对答案的贡献

然后除了n==1 && m==1这种是里面取啥值都是极大值

其他的不是1才是极大值,而且同行同列都要小于本格

ans=连加(i=2~k)(i-1)^(n-1+m-1)*k^[(n-1)*(m-1)] //前者是与此格同行同列的格子个数,受数字i制约;后者是被划出的可任意填的格子个数

得到单个格子极大值个数

然后k^(n*m)+ans*n*m //所有情况的方案数+所有格子对答案的贡献

#pragma comment(linker, "/STACK:1024000000,1024000000")#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef pair
pii;#define X first#define Y secondtypedef __int64 ll;int max(int a,int b){ return a>b?a:b;}const int MOD=1000000007;ll powMod(ll b,ll t,ll m){ ll res=1; while(t) { if(t&1)res=res*b%m; b=b*b%m; t>>=1; } return res;}int main(){ int i,cas,n,m,k; scanf("%d",&cas); for(int t=1;t<=cas;t++) { scanf("%d%d%d",&n,&m,&k); printf("Case #%d: ",t); ll res=0; if(n==1 && m==1)res++;//只有1个格时填1也是极大值 for(i=2;i<=k;i++)//每个数取i时使此数为极大值的方案数 { res=(powMod(i-1,n-1+m-1,MOD)*powMod(k,(n-1)*(m-1),MOD)+res)%MOD; } res=(res*n*m)%MOD;//每个格子可能变成极大值的方案数乘总格数 res+=powMod(k,n*m,MOD);//没有限制的方案数 printf("%I64d\n",res%MOD); } return 0;}
View Code

 

L、每场比赛3种情况,穷举就可以了

转载于:https://www.cnblogs.com/dgutfly/p/6171396.html

你可能感兴趣的文章
欢迎访问独立私人日志
查看>>
python调用dll
查看>>
数据事物嵌套实验和结论
查看>>
linux LVS
查看>>
LAMP平台部署及应用(二) -- 构建Discuz!论坛服务器
查看>>
反向代理负载均衡模块详述
查看>>
Shell脚本--监控mysql的队列,队列超过300告警
查看>>
HttpClient4.x send request over SSL
查看>>
天益SSL /IPSEC ×××网关设备
查看>>
利用 XNA 实现 Windows Phone 7 上的电流效果
查看>>
phpcms学习
查看>>
Ubuntu13.10更新源
查看>>
我的友情链接
查看>>
java设计模式-工厂方法模式
查看>>
【OAuth2学习之路】Spring Security OAuth官网文档翻译
查看>>
Toad for DB2设置
查看>>
关于音视频的一些知识(demux、filter等)
查看>>
[笔记]改善Java程序的151个建议---第一章 Java开发中通用的方法和准则
查看>>
WindowsPhone7编辑器的设计器不显示Bug
查看>>
自己写JSON编辑器
查看>>