noip赛后分析 噫
来源:互联网 发布:致命id人物解析知乎 编辑:程序博客网 时间:2024/06/09 16:40
虽然noip渣的要死咸鱼但是赛后分析还是要做的噫ʕ •ᴥ•ʔ
第一道不说 乍一看以为无限背包尴尬
第二道代码不贴出来 其实就是枚举两头的年份然后判断年份倒过来合不合法
我似乎是不会说我第二题并没有AC
很尴尬的是我下面两道题都没有拿到分哦
第三题
小K是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客。
小K对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只情况;对于第i艘到达的船,他记录了这艘船到达的时间ti (单位:秒),船上的乘客数星ki,以及每名乘客的国籍 x(i,1), x(i,2),…,x(i,k);。
小K统计了n艘船的信息,希望你帮忙计算出以每一艘船到达时间为止的24小时(24小时=86400秒)内所有乘船到达的乘客来自多少个不同的国家。
形式化地讲,你需要计算n条信息。对于输出的第i条信息,你需要统计满足 ti - 86400 < tp <= ti的船只p,在所有的x(p,j)中,总共有多少个不同的数。
正解到底是线段树还是分块orz
都不是,就是一个巨大的哈希(; ̄ェ ̄)
先贴代码 洛谷AC
#include<iostream>
#include<vector>
using namespace std;
int n,t[100100],c[100100],k[100100];//c[0] O(1) 维护C[0]
vector <int> v[100100];
int main()
{
scanf("%d",&n);
int tmp,pre=0;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&t[i],&k[i]);
for(int j=1;j<=k[i];j++)
{
scanf("%d",&tmp);
v[i].push_back(tmp);
if(c[tmp]==0)c[0]++;//以前没有现在有了 c[0]++
c[tmp]++;
}
for(pre;pre<i;pre++)//去掉guoshide
{
if(t[pre]+86400-1>=t[i]) break;
for(int x=0;x<v[pre].size();x++)
{
c[v[pre][x]]--;
if(c[v[pre][x]]==0) c[0]--;//去掉就没了 C[0]--
}
}
printf("%d\n",c[0]); //输出维护c[0]
}
return 0;
}
才知道可以开这么大 汗。。。
嗯好第四题 噫 微笑
#include<iostream>
using namespace std;
int n,d[41000],m,a[16000],ss1[16000],ss2[16000],ps1[16000],ps2[16000];
int ans[16000][5];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d",&d[i]);
a[d[i]]++;
}
for(int L=(n+8)/9;L>=1;L--)
{
for(int i=n-L;i>=1;i--)
ss1[i]=a[i]*a[i+L];
for(int i=n-L;i>=1;i--)
ss2[i]=ss2[i+1]+ss1[i];
for(int i=1+2*L;i<=n;i++)
ps1[i]=a[i]*a[i-2*L];
for(int i=1+2*L;i<=n;i++)
ps2[i]=ps2[i-1]+ps1[i];
for(int i=1;i<=n;i++)
{
if(i+8*L+1<=n)
ans[i][1]+=a[i+2*L]*ss2[i+8*L+1];
if(i-2*L>=1 && i+6*L+1<=n)
ans[i][2]+=a[i-2*L]*ss2[i+6*L+1];
if(i+L<=n && i-6*L-1>=1)
ans[i][3]+=a[i+L]*ps2[i-6*L-1];
if(i-7*L-1>=1)
ans[i][4]+=a[i-L]*ps2[i-7*L-1];
}
}
for(int i=1;i<=m;i++)
{
printf("%d %d %d %d\n",ans[d[i]][1],ans[d[i]][2],ans[d[i]][3],ans[d[i]][4]);
}
return 0;
}
好吧我只好说这道洛谷并没有AC 最后一个点TLE 反正思想其实是对的诶
六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量。
大魔法师有m个魔法物品,编号分别为1,2,...,m。每个物品具有一个魔法值,我们用Xi表示编号为i的物品的魔法值。每个魔法值Xi是不超过n的正整数,可能有多个物品的魔法值相同。
大魔法师认为,当且仅当四个编号为a,b,c,d的魔法物品满足xa<xb<xc<xd,Xb-Xa=2(Xd-Xc),并且xb-xa<(xc-xb)/3时,这四个魔法物品形成了一个魔法阵,他称这四个魔法物品分别为这个魔法阵的A物品,B物品,C物品,D物品。
现在,大魔法师想要知道,对于每个魔法物品,作为某个魔法阵的A物品出现的次数,作为B物品的次数,作为C物品的次数,和作为D物品的次数
a b c d
2t >3t t
设cd的差是t 就是说ab的差是2t,bc的差大于3t,但是枚举的是从3t+1开始,并不是4t
第一道不说 乍一看以为无限背包尴尬
第二道代码不贴出来 其实就是枚举两头的年份然后判断年份倒过来合不合法
我似乎是不会说我第二题并没有AC
很尴尬的是我下面两道题都没有拿到分哦
第三题
小K是一个海港的海关工作人员,每天都有许多船只到达海港,船上通常有很多来自不同国家的乘客。
小K对这些到达海港的船只非常感兴趣,他按照时间记录下了到达海港的每一艘船只情况;对于第i艘到达的船,他记录了这艘船到达的时间ti (单位:秒),船上的乘客数星ki,以及每名乘客的国籍 x(i,1), x(i,2),…,x(i,k);。
小K统计了n艘船的信息,希望你帮忙计算出以每一艘船到达时间为止的24小时(24小时=86400秒)内所有乘船到达的乘客来自多少个不同的国家。
形式化地讲,你需要计算n条信息。对于输出的第i条信息,你需要统计满足 ti - 86400 < tp <= ti的船只p,在所有的x(p,j)中,总共有多少个不同的数。
正解到底是线段树还是分块orz
都不是,就是一个巨大的哈希(; ̄ェ ̄)
先贴代码 洛谷AC
#include<iostream>
#include<vector>
using namespace std;
int n,t[100100],c[100100],k[100100];//c[0] O(1) 维护C[0]
vector <int> v[100100];
int main()
{
scanf("%d",&n);
int tmp,pre=0;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&t[i],&k[i]);
for(int j=1;j<=k[i];j++)
{
scanf("%d",&tmp);
v[i].push_back(tmp);
if(c[tmp]==0)c[0]++;//以前没有现在有了 c[0]++
c[tmp]++;
}
for(pre;pre<i;pre++)//去掉guoshide
{
if(t[pre]+86400-1>=t[i]) break;
for(int x=0;x<v[pre].size();x++)
{
c[v[pre][x]]--;
if(c[v[pre][x]]==0) c[0]--;//去掉就没了 C[0]--
}
}
printf("%d\n",c[0]); //输出维护c[0]
}
return 0;
}
才知道可以开这么大 汗。。。
嗯好第四题 噫 微笑
#include<iostream>
using namespace std;
int n,d[41000],m,a[16000],ss1[16000],ss2[16000],ps1[16000],ps2[16000];
int ans[16000][5];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d",&d[i]);
a[d[i]]++;
}
for(int L=(n+8)/9;L>=1;L--)
{
for(int i=n-L;i>=1;i--)
ss1[i]=a[i]*a[i+L];
for(int i=n-L;i>=1;i--)
ss2[i]=ss2[i+1]+ss1[i];
for(int i=1+2*L;i<=n;i++)
ps1[i]=a[i]*a[i-2*L];
for(int i=1+2*L;i<=n;i++)
ps2[i]=ps2[i-1]+ps1[i];
for(int i=1;i<=n;i++)
{
if(i+8*L+1<=n)
ans[i][1]+=a[i+2*L]*ss2[i+8*L+1];
if(i-2*L>=1 && i+6*L+1<=n)
ans[i][2]+=a[i-2*L]*ss2[i+6*L+1];
if(i+L<=n && i-6*L-1>=1)
ans[i][3]+=a[i+L]*ps2[i-6*L-1];
if(i-7*L-1>=1)
ans[i][4]+=a[i-L]*ps2[i-7*L-1];
}
}
for(int i=1;i<=m;i++)
{
printf("%d %d %d %d\n",ans[d[i]][1],ans[d[i]][2],ans[d[i]][3],ans[d[i]][4]);
}
return 0;
}
好吧我只好说这道洛谷并没有AC 最后一个点TLE 反正思想其实是对的诶
六十年一次的魔法战争就要开始了,大魔法师准备从附近的魔法场中汲取魔法能量。
大魔法师有m个魔法物品,编号分别为1,2,...,m。每个物品具有一个魔法值,我们用Xi表示编号为i的物品的魔法值。每个魔法值Xi是不超过n的正整数,可能有多个物品的魔法值相同。
大魔法师认为,当且仅当四个编号为a,b,c,d的魔法物品满足xa<xb<xc<xd,Xb-Xa=2(Xd-Xc),并且xb-xa<(xc-xb)/3时,这四个魔法物品形成了一个魔法阵,他称这四个魔法物品分别为这个魔法阵的A物品,B物品,C物品,D物品。
现在,大魔法师想要知道,对于每个魔法物品,作为某个魔法阵的A物品出现的次数,作为B物品的次数,作为C物品的次数,和作为D物品的次数
a b c d
2t >3t t
设cd的差是t 就是说ab的差是2t,bc的差大于3t,但是枚举的是从3t+1开始,并不是4t
0 0
- noip赛后分析 噫
- noip赛后【微笑】
- NOIP普及组赛后总结
- 2017.3.11 NOIP训练赛赛后总结
- 2017.3.18 NOIP训练赛赛后总结
- 2017.3.18 NOIP训练赛赛后总结
- 2017.3.11 NOIP训练赛赛后总结(伪)
- 【2015.12.25】圣诞节欢乐赛赛后分析
- noip 近年分析
- NOIP历年题目分析
- 省赛后
- 赛后感想
- 省赛后
- 赛后反思
- 区域赛后
- 赛后感想
- NOIP普及组,试题分析教案准备
- NOIP 2015提高组 题解+分析
- 存储过程详解
- vsftpd配置文件详解
- c#完全获取全部Cookie
- 不使用软件及硬件,电脑启动wifi,解决移动端通过电脑绑定host,无法访问服务器问题
- JavaScript——下拉刷新
- noip赛后分析 噫
- PHP算法
- 设计模式
- 欢迎使用CSDN-markdown编辑器
- 1015. Reversible Primes (20)/YHF/2016.12.1
- WebStorm下配置supervisor热部署NodeJS
- CMakeList配置之编译多个.cpp文件
- Java 多线程 并发编程
- 自定义view绘制时钟