提高组萌新,DAY1DAY2加起来骗分不到300,写写普及组的题目聊以自慰。

(附:洛谷题目链接

T1:https://www.luogu.org/problem/show?pid=1909

T2:https://www.luogu.org/problem/show?pid=2010

T3:https://www.luogu.org/problem/show?pid=2058

T4:https://www.luogu.org/problem/show?pid=2119)

不得不说,亲历了14、15年的普及组,加上今年的题目,T1、T2难度简直爆炸性下滑、、、、、、直接贴下代码吧。(省略输入输出)

T1

#include<iostream>
#include<cstdio>
using namespace std; int n,a[],b[],c[];
int main(){
cin>>n;
for(int i=;i<=;++i){
scanf("%d%d",&a[i],&b[i]);
c[i]=n/a[i]+;
if(n%a[i]==)c[i]--;
c[i]=c[i]*b[i];
}
cout<<min(c[],min(c[],c[])); return ;
}

T2(无数种特殊情况、、、、、、写得非常繁琐,不过肯定有简洁很多的写法,只是这题目写得心烦意乱,懒得改了)

#include<iostream>
#include<cstdio>
using namespace std; int a,b,days[]={,,,,,,,,,,,,};
int main(){
int ans=;
cin>>a>>b;
int year=a/;
int moon=(a/)%;
int date=a%;
int y=b/;
int m=(b/)%;
int d=b%;
if(a==b){
if((a/==a%)&&(a/%==a%/)&&(a/%==a%/)&&(a/%==a%/)){
cout<<;
return ;
}
cout<<;
return ;
} while(*year+*moon+date<=b){
int i=*year+*moon+date;
if((i/==i%)&&(i/%==i%/)&&(i/%==i%/)&&(i/%==i%/)){
ans++;
}
int runnian=;
if(((year%==)&&(year%!=))||(year%==))runnian=;
date=date+;
if((moon==)&&(date==+runnian)){
date=;
moon=;
}
if((moon!=)&&(date==days[moon]+)){
date=;
moon=moon+;
}
if(moon==){
moon=;
year=year+;
}
}
cout<<ans;
}

T3

出于一个蒟蒻的尿性,看到题目先想到去水70分,毕竟实战时时间有限,能骗一分是一分。

看到数据范围先分析,n*x(i,j)=10^10,直接存每艘船的状态肯定拿不了满分,再看ti=10^9,按时间存状态肯定更加惨烈(应该没人这么想吧)。那么注意到Σki=3*10^5,这个地方很奇怪,它给的不是每艘船的人数,而是总人数,那么仔细一算,平均每艘船只有3个人!那么很容易(才怪,我想了半个小时以上,还是在有学长提醒的情况下完成的)就想到:按照每个人存储国际,记录每艘船的人的位置(从第几个人到第几个人),然后模拟一层过。代码如下

#include<iostream>
#include<cstdio>
using namespace std;
struct point{
int country;
int boat; //boat属性其实没用,只是写的时候觉得记录了也不嫌多
};point d[]; //d记录每个人的国籍 int ans,sboat,tot,n,t[],k[],lef[],rig[],col[]; //n,ti,ki意思如题,lefi,rigi记录每艘船上的人在所有人中的位置(lefi到rigi)
int main(){ //coli记录当前时刻及之前86400s每个国籍出现的人数(col=color)
cin>>n;
tot=; //记录第i艘船进入前的总人数,用于计算lefi和rigi
for(int i=;i<=n;++i){
scanf("%d%d",&t[i],&k[i]);
for(int j=;j<=k[i];++j){
int c;
scanf("%d",&c);
d[tot+j].country=c;
}
lef[i]=tot+;
tot+=k[i];
rig[i]=tot;
}
sboat=;ans=; //sboat记录第i艘船进入后统计范围内(86400s)的第1艘船,ans记录第i艘船进入后需要输出的答案,维护ans的值使得这道题不至于O(nx)
for(int i=;i<=n;++i){
for(int j=lef[i];j<=rig[i];j++){
if(col[d[j].country]==)ans++; //如果某个国籍在86400s内没有出现过,ans相比上一艘船+1
col[d[j].country]++;
}
while(t[i]-t[sboat]>=){ //找到当前范围内的第一艘船,并更新各国籍出现人数
for(int j=lef[sboat];j<=rig[sboat];j++){
col[d[j].country]--;
if(col[d[j].country]==)ans--;
}
sboat++;
}
printf("%d\n",ans);
} return ;
}

T4

乍一看DFS可以水到部分分,先打为快,加上各种剪枝,最终结果洛谷评测55分。代码如下

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct magic{
int num;
int power;
}; magic a[]; int x[],ans[][],m,n;
int comp(const magic&a,const magic&b){
return(a.power<b.power);
}
void dfs(int k,int b){
if(k==){
if(a[x[]].power-a[x[]].power==*(a[x[]].power-a[x[]].power)){
ans[a[x[]].num][]++;
ans[a[x[]].num][]++;
ans[a[x[]].num][]++;
ans[a[x[]].num][]++;
}
return;
}
for(int i=b;i<=m;++i){
if((k!=)&&(a[i].power==a[x[k]].power))continue;
x[k+]=i;
if((k==)&&(*(a[x[]].power-a[x[]].power)>=a[x[]].power-a[x[]].power)){
x[k+]=;
continue;
}
if((k==)&&(*(a[m].power-a[x[]].power)<a[x[]].power-a[x[]].power)){
x[k+]=;
break;
}
if((k==)&&(*(a[i+].power-a[x[]].power)>a[x[]].power-a[x[]].power)){
x[k+]=;
continue;
}
dfs(k+,i+);
x[k+]=;
}
return;
}
int main(){
cin>>n>>m;
for(int i=;i<=m;++i){
scanf("%d",&a[i].power);
a[i].num=i;
}
sort(a+,a+m+,comp);
dfs(,);
for(int i=;i<=m;++i){
for(int j=;j<=;++j)printf("%d ",ans[i][j]);
printf("\n");
}
return ;
}

但是55分并没有用,毕竟是在浙江这样高手如云的地区。分析数据,题目中给出了n,这很奇怪,在DFS中并没有用到n。并且看到n=15000,说明这道题要从n着手。

再分析A,B,C,D的关系,设D-C=X,易得: B-A=2X; C-B>6X(注意这里不能取等);综合上述三式,可得A,B,C,D的数学关系:设A=i,则B=i+2X,C=i+8X+Y,

D=i+9X+Y。因此可以想到一个n^2的算法,枚举i和X,而后事实证明K=1/9,N^2可以通过全部的点。(好吧,不得不承认,在做T4的时候,我无耻地翻了题解。

附带链接:http://blog.csdn.net/c20181220_xiang_m_y/article/details/53258693)代码如下

#include<iostream>
#include<cstdio>
using namespace std; int n,m,k[],w[],a[],b[],c[],d[];
int main(){
cin>>n>>m;
for(int i=;i<=m;++i){
scanf("%d",&k[i]);
w[k[i]]++;
} for(int i=;*i<n;++i){
int s=;
for(int xd=*i+;xd<=n;++xd){
s+=w[xd-*i-]*w[xd-*i-];
d[xd]+=w[xd-i]*s;
c[xd-i]+=w[xd]*s;
}
s=;
for(int xa=n-*i-;xa>=;--xa){
s+=w[xa+*i+]*w[xa+*i+];
a[xa]+=w[xa+*i]*s;
b[xa+*i]+=w[xa]*s;
}
} for(int i=;i<=m;++i){
printf("%d %d %d %d\n",a[k[i]],b[k[i]],c[k[i]],d[k[i]]);
}
}

NOIP2016普及组复赛解题报告的更多相关文章

  1. NOIP2018普及组初赛解题报告

    本蒟蒻参加了今年的NOIP2018普及组的初赛 感觉要凉 总而言之,今年的题要说完全没有难度倒也不至于,还有不少拼RP的题,比如第一次问题求解考逻辑推理,第一次完善程序考双链表等 下面我就和大家一起看 ...

  2. NOIP2015 普及组(Junior) 解题报告

    1. 金币 (coin.cpp/c/pas) 国王将金币作为工资,发放给忠诚的骑士.第一天,骑士收到一枚金币:之后两天(第二天和第三天),每天收到两枚金币:之后三天(第四.五.六天),每天收到三枚金币 ...

  3. 牛客NOIP暑期七天营-普及组1 解题报告

    A 对于\(100\%\),直接开个桶统计即可.入门题目. 代码:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41 ...

  4. 【NOIP2016普及组复赛】魔法阵

    题目 分析 设xd-xc为i,那么xb-xa=2i, 又因为xb-xa<(xc-xb)/3, 那么c>6i+b. 于是,先枚举i, 再分别枚举xa和xd, 根据之间的关系,用前缀和求出每一 ...

  5. NOIP2016普及组解题报告

    概述 \(NOIP2016\)普及组的前三题都比较简单,第四题也有很多的暴力分,相信参加了的各位\(OIer\)在\(2016\)年都取得了很好的成绩. 那么,我将会分析\(NOIP2016\)普及组 ...

  6. 【百度之星2014~复赛 解题报告~正解】The Query on the Tree

    声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站 ...

  7. NOIP2018普及组复赛游记

    2018年11月10日,NOIP2018普及组复赛. 这是我初中阶段最后一次复赛了. 和往常一样,我们在预定的早上7点,没有出发. 10分钟之后,人终于到齐了,于是出发了,一路无话. 到了南航,合照三 ...

  8. 【题解】NOIP2016提高组 复赛

    [题解]NOIP2016提高组 复赛 传送门: 玩具谜题 \(\text{[P1563]}\) 天天爱跑步 \(\text{[P1600]}\) 换教室 \(\text{[P1850]}\) 组合数问 ...

  9. 【NOIP2015】提高组D1 解题报告

    P1978神奇的幻方 Accepted 描述 幻方是一种很神奇的 N ∗ N 矩阵:它由数字 1,2,3, … … , N ∗ N 构成,且每行.每列及两条对角线上的数字之和都相同. 当 N 为奇数时 ...

随机推荐

  1. angularjs中ng-controller中绑定对象

    <!DOCTYPE HTML><html ng-app="myApp"><head><meta http-equiv="Cont ...

  2. Quartz2D 编程指南(一)概览、图形上下文、路径、颜色与颜色空间

    概览 图形上下文 路径 颜色与颜色空间 变换 图案 阴影 渐变 透明层 Quartz 2D 中的数据管理 位图与图像遮罩 CoreGraphics 绘制 Layer 0.说明 本篇博客主要是对官方文档 ...

  3. sprintf()函数的用法

    Visual C++ sprintf()函数用法 转:http://blog.csdn.net/masikkk/article/details/5634886 在将各种类型的数据构造成字符串时,spr ...

  4. IIS无法加载字体文件(*.woff,*.svg)的解决办法

    在编写前端代码的过程中经常会遇到使用特定的字体(*.woff,*.svg),此时在加载字体时请求会被返回 Failed to load resource: the server responded w ...

  5. Python 字符串反转

    方法一: 切片的方法 a = "hello"b = len(a)i = 1c = ""while i<=b: d = a[b-i] c += d i+=1 ...

  6. eclipse自动补全快捷键失效,sysout用不了!

    好久没写Java代码了,使用新版Neon的Eclipse Java EE IDE开发时,自动补全各种失败,sysout也各种用不了, 开始还以为是电脑卡比呢,原来是版本的快捷键不同了,修改方法如下! ...

  7. 戴尔3542安装ubuntu时出现:failed to lead ldlinux.c32

    解决办法: 1. 开机未进入系统是连续敲击F2,进入BIOS2.在 BIOS 的Boot菜单下,将Secure Boot 改为 Disabled3. 将Boot List Option 改为 Lega ...

  8. Word2013中制作按钮控件

    1.由于“开发工具”不经常用,所以在功能选项面板中没有“开发工具”这一栏.所以我们需要设置.在功能选项面板中选择“文件”,在跳转出来的版面中选择“选项”.

  9. sublimeText jsformat 插件被当做病毒 virus

    最近在个只可往他里面发邮件,不能往外上任何互联网的地方工作,用 sublimetext 要装个sublime 插件 jsformat 十分麻烦.用gmail邮箱发总是报病毒. 最后挨个尝试,发现是 j ...

  10. C#调用windows API的一些方法

    使用C#调用windows API(从其它地方总结来的,以备查询) C#调用windows API也可以叫做C#如何直接调用非托管代码,通常有2种方法: 1.  直接调用从 DLL 导出的函数. 2. ...