2016 icpc ECfinal && codeforcesgym101194
一不小心惨变旅游队,不过上海的风景不错
顺带找其他队交流一下集训经验。。。或许可以成为选拔和集训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 <cstdio>
#include <cstring>
#include <iostream>
#include <set>
#include <vector>
#include <iterator>
using namespace std;
typedef pair<int,int> PII;
const int N=,MAX=;
vector<int> p[MAX];
int a[N],dp[N][N];
bool isok[N][N];
int vis[MAX];
set<PII> ival;
multiset<int> 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<PII>::iterator it=ival.lower_bound(PII(x+,));
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<x) {
ival.insert(PII(a,x-));
q.insert(dp[a][x-]);
}
if (x<b) {
ival.insert(PII(x+,b));
q.insert(dp[x+][b]);
}
} int main()
{
int T,n,i;
scanf("%d",&T);
for (int t=;t<=T;t++) {
scanf("%d",&n);
memset(vis,,sizeof(vis));
for (i=;i<MAX;i++) {
p[i].clear();
}
for (i=;i<=n;i++) {
scanf("%d",&a[i]);
p[a[i]].push_back(i);
}
//从左区间延伸到不可延伸的地方
for (i=;i<=n;i++) {
bool f=true;
for (int j=i;j<=n;j++) {
if (vis[a[j]]==i) {
f=false;
}
vis[a[j]]=i;
isok[i][j]=f;
}
}
//区间DP
for (int len=;len<=n;len++) {
for (int i=;i+len-<=n;i++) {
int j=i+len-;
if (isok[i][j]) {
dp[i][j]=j-i+;
} else {
dp[i][j]=max(dp[i+][j],dp[i][j-]);
}
}
}
int ans=-;
memset(vis,,sizeof(vis));
//vis储存时间戳,比储存bool然后o(n*n)全设假高效
for (i=;i<=n;i++) {
ival.clear();q.clear();
ival.insert(PII(i,n));//根据左区间的限制确定查询区间
q.insert(dp[i][n]);
for (int j=i;j<=n;j++) {
if (vis[a[j]]==i) {
break;
}
vis[a[j]]=i;//根据对应数字所在位置切分区间
for (int k=;k<p[a[j]].size();k++) {
split(p[a[j]][k]);
}
int cur=j-i+;
if (!q.empty()) {
cur+=*q.rbegin();//取出最大
}
ans=max(cur,ans);
}
}
printf("Case #%d: %d\n",t,ans);
}
return ;
}
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 <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std; int n;
long double al[],res;
double k,u;
int main()
{
int t,cas,i,ik,iu;
scanf("%d",&cas);
for(t=;t<=cas;t++)
{
scanf("%d",&n);
for(i=;i<n;i++)
{
scanf("%lf:%lf",&k,&u);
ik=floor(k*),iu=floor(u*);
al[i]=1.0*ik/(ik+iu);
}
sort(al,al+n);
int cnt=;
for(i=,res=;i<n;i++)
{
res+=al[i];
if(res>=)break;
cnt++;
}
printf("Case #%d: %d\n",t,cnt);
}
return ;
}
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<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
#include<stack>
#include<math.h>
#include<vector>
#include<map>
#include<set>
#include<stdlib.h>
#include<cmath>
#include<string>
#include<algorithm>
#include<iostream>
using namespace std;
typedef pair<int,int> pii;
#define X first
#define Y second
typedef __int64 ll;
int max(int a,int b){return a>b?a:b;}
const int MOD=; ll powMod(ll b,ll t,ll m)
{
ll res=;
while(t)
{
if(t&)res=res*b%m;
b=b*b%m;
t>>=;
}
return res;
} int main()
{
int i,cas,n,m,k;
scanf("%d",&cas);
for(int t=;t<=cas;t++)
{
scanf("%d%d%d",&n,&m,&k);
printf("Case #%d: ",t);
ll res=;
if(n== && m==)res++;//只有1个格时填1也是极大值
for(i=;i<=k;i++)//每个数取i时使此数为极大值的方案数
{
res=(powMod(i-,n-+m-,MOD)*powMod(k,(n-)*(m-),MOD)+res)%MOD;
}
res=(res*n*m)%MOD;//每个格子可能变成极大值的方案数乘总格数
res+=powMod(k,n*m,MOD);//没有限制的方案数
printf("%I64d\n",res%MOD);
}
return ;
}
L、每场比赛3种情况,穷举就可以了
2016 icpc ECfinal && codeforcesgym101194的更多相关文章
- 2016上海站EC-final总结!
2016上海站EC-final总结 本想在知乎上发起一个话题:没有半点准备实力菜得抠脚的选手突然有机会参加final是什么体验.不过感觉这样太高调了,于是..... 以上说的就是事实,毫无准备.毫无状 ...
- 2016 ICPC总结
2016 ICPC总结 九月份开学,开始知识点的补充,刚开始的几周都在刷acmsteps,十月开始进行专题性的学习,首先进行的数据结构,给自己定的计划,十一月前看完数据结构,刚开始的时候看的都是以前的 ...
- Codeforces Gym 101194G Pandaria (2016 ACM-ICPC EC-Final G题, 并查集 + 线段树合并)
题目链接 2016 ACM-ICPC EC-Final Problem G 题意 给定一个无向图.每个点有一种颜色. 现在给定$q$个询问,每次询问$x$和$w$,求所有能通过边权值不超过$w$的 ...
- 2016 ICPC Mid-Central USA Region J. Windy Path (贪心)
比赛链接:2016 ICPC Mid-Central USA Region 题目链接:Windy Path Description Consider following along the path ...
- HYNB Round 8: 2016 ICPC Amritapuri Regionals
HYNB Round 8: 2016 ICPC Amritapuri Regionals A - Tim and BSTs 做法 经典的树 DP 问题. \(dp[u][i]\) 表示考虑以 u 为根 ...
- 2016 ICPC青岛站---k题 Finding Hotels(K-D树)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5992 Problem Description There are N hotels all over ...
- 2016 ICPC北京站现场赛总结(再度流水账)
其他的都先不说,北大的未名湖真的美! 虽然感觉北大其他地方都有些破旧之感,但是未名湖附近真的值得称赞. 在去北京之前就听说北京温度很低,不过是干冷,果不其然.北京不冷,就是嘴唇太干了,不喝水真的受不了 ...
- 2015 ACM/ICPC EC-Final
A. Boxes and Balls 二分找到最大的不超过$n$的$\frac{x(x+1)}{2}$形式的数即可. #include <bits/stdc++.h> using name ...
- 2016 ICPC大连站---F题 Detachment
题意:输入一个x,将x拆分成一些小的数(这些数不能相同,即x=a1+a2+...... ai!=aj when i!=j),然后这些数相乘得到一个成积(s=a1*a2*......),求最大的乘积 ...
随机推荐
- Python 类对象去重
注:set 对类对象去重,在于重写__eq__方法和__hash__方法,如果没有重写__hash__会导致People类对象不是可hash的 #!/usr/bin/env python # -*- ...
- SaltStack 数据系统 Grains Pillar
grains 先来一个很好用的命令 # salt '*' grains.items \\基本上输出了所有你想要的信息 192.168.100.138: ---------- SSDs: biosrel ...
- [转]记解决一次“HTTP Error 400. The request URL is invalid”的错误
今天将图片服务切到使用了cdn的机器上面去,然后就部分图片报如下图错误“HTTP Error 400. The request URL is invalid” 看到这种错误信息,一般的开发者心中可能会 ...
- 关于微信分享的一些心得之recommend.js(直接复制就行)
// import $ from 'jquery'import Vue from 'vue'export default function (type,title,con,img,url,) { / ...
- 如何提取cocos iOS应用程序APP与游戏安装包里的资源与文件
平时玩手机,看到iOS app中许多不错的图片素材的时候,有木有很心动,是不是想把其中的图片资源导出来使用,即可以练手,又可以提高自己的审美观0-0,增加app的颜值.当然,请不要作为商业用途.开发软 ...
- cocos2d-x C++ (iOS)集成第三方微信分享
1.新建项目并下载 ShareSDK 1.Cocos2d-x项目环境搭建,不会的童鞋自行面壁哈: 网页链接. 2.ShareSDK iOS版本的 Cocos2d-x 插件是在ShareSDK iOS版 ...
- 启用了不安全的HTTP方法【转】
安全风险: 可能会在Web 服务器上上载.修改或删除Web 页面.脚本和文件. 可能原因: Web 服务器或应用程序服务器是以不安全的方式配置的. 修订建议: 如果 ...
- POJ 2752 Seek the Name,Seek the Fame(KMP,前缀与后缀相等)
Seek the Name,Seek the Fame 过了个年,缓了这么多天终于开始刷题了,好颓废~(-.-)~ 我发现在家真的很难去学习,因为你还要陪父母,干活,做家务等等 但是还是不能浪费时间啊 ...
- Cassandra创建第一个用户
Cassandra配置文件cassandra.yaml 的配置项, 默认是 authenticator: AllowAllAuthenticator 现在想创建Cassandra的用户,但是如果保持以 ...
- 【2017-03-13】Tsql 表连接
笛卡尔积 穷举 在未建立连接的情况下,将car表的name列和brand表的brand_name列进行笛卡尔积查询后,实际是将两列相乘,进行穷举,列举出所有可能性 表连接:将多个表不 ...