【noip 2015】普及组
T1.金币
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int k;
long long ans;
int main()
{
scanf("%d",&k);
int cnt=;
while(k)
{
for(int i=;i<=cnt;i++)
{
if(k==)break;
ans+=cnt;k--;
}
cnt++;
if(k==)break;
}
printf("%lld",ans);
return ;
}
T2.扫雷游戏
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int xx[]={-,,,-,,-,,},yy[]={-,-,-,,,,,};
int n,m;
char s[][];
int count(int x,int y)
{
int num=;
for(int i=;i<;i++)
{
int xi=x+xx[i],yi=y+yy[i];
if(xi<||xi>=n||yi<||yi>=m)continue;
if(s[xi][yi]=='*')num++;
}
return num;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<n;i++)scanf("%s",s[i]);
for(int i=;i<n;i++,printf("\n"))
for(int j=;j<m;j++)
{
if(s[i][j]=='*')printf("*");
else printf("%d",count(i,j));
}
return ;
}
T3.求和
仔细读题之后我们会发现,我们枚举的过程其实跟y没什么关系……
但因为题目限定了x+z=2*y,即x+z为偶数,所以x和z必须同奇或同偶。
所以分颜色分奇偶存一下就好了✔
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
const int N=;
long long ans;
int n,m,siz,color,num[N];
vector<int>a[N][];
int read()
{
int x=,f=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int main()
{
n=read();m=read();
for(int i=;i<=n;i++)num[i]=read();
for(int i=;i<=n;i++)
{
color=read();
a[color][i%].push_back(i);
}
for(int i=;i<=m;i++)
{
for(int t=;t<;t++)
{
siz=a[i][t].size();
for(int j=;j<siz;j++)
for(int k=j+;k<siz;k++)
{
int x=a[i][t][j],z=a[i][t][k];
ans=(ans+(long long)(x+z)*(num[x]+num[z]))%;
}
}
}
printf("%lld",ans);
return ;
}
T4.推销员
维护两个大根堆,一个存各个住户的距离*2+疲劳值,另一个存各个住户的疲劳值;每次取出堆顶元素,将较大的那一个累加进答案里。
注意判断是否合法:假设当前走到的距离最远的住户为x;则直接累加住户i的疲劳值需要满足的条件为:s[i]<=s[x];累加住户i的距离*2+疲劳值需要满足的条件为:s[i]>s[x],且累加时记得减去s[x]*2。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
const int N=;
struct node
{
int w,pos;
bool operator <(const node& a)const{return w<a.w;}
}q2[N],r1,r2;
priority_queue<node>q1;
int n,cnt,cut,tail,s[N],t[N];
bool f[N];
long long ans;
int read()
{
int x=,f=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int main()
{
n=read();cnt=n;tail=n;
for(int i=;i<=n;i++)s[i]=read();
for(int i=;i<=n;i++)
{
t[i]=read();
q2[i].w=s[i]*+t[i];q2[i].pos=i;
}
sort(q2+,q2+n+);
while(cnt)
{
if(tail)r2=q2[tail],tail--;
else r2=(node){,n+};
if(r2.pos<=cut)continue;
if(!q1.empty())r1=q1.top(),q1.pop();
else r1=(node){,};
if(r1.w>r2.w-*s[cut])
{
ans+=r1.w;
if(r2.pos!=n+)tail++;
}
else
{
ans+=r2.w-*s[cut];
for(int i=cut+;i<r2.pos;i++)q1.push((node){t[i],i});
if(r1.pos!=)q1.push(r1);
cut=r2.pos;
}
printf("%lld\n",ans);cnt--;
}
return ;
}
【noip 2015】普及组的更多相关文章
- NOIP 2015普及组复赛Day1 T1 == Codevs4510 神奇的幻方
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description: 幻方是一种很神奇的N∗N矩阵:它由数字 1,2,3, … … ,N∗N构成, ...
- NOIP 2018 普及组 解题报告
目录 标题统计 题目链接 思路 代码 龙虎斗 题目链接: 思路 代码 摆渡车 题目链接: 思路 对称二叉树 题目链接 思路: 先来解释一下为毛现在才来发解题报告: 其实博主是参加过NOIP 2018普 ...
- 洛谷P1067 多项式输出 NOIP 2009 普及组 第一题
洛谷P1067 多项式输出 NOIP 2009 普及组 第一题 题目描述 一元n次多项式可用如下的表达式表示: 输入输出格式 输入格式 输入共有 2 行 第一行 1 个整数,n,表示一元多项式的次数. ...
- NOIP 2015提高组复赛
神奇的幻方 题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第 ...
- NOIP 2015 提高组 Day2
期望得分:100+10+60=170 实际得分:100+10+35=145 http://www.cogs.pro/cogs/page/page.php?aid=16 T1 跳石头 时间限制:1 s ...
- NOIP 2015 提高组 Day1
期望得分:100+100+100=300 实际得分:100+100+45=245 T3 相似的代码 复制过去 没有改全,痛失55分 http://www.cogs.pro/cogs/page/page ...
- NOIP 2014 普及组 T4 子矩阵
[题意] 已知:n,m,r,c,a[i][j] (1 ≤ n ≤ 16, 1 ≤ m ≤ 16,1 ≤ a[i][j] ≤1000,1 ≤ r ≤ n, 1 ≤ c ≤ m) 条件:矩阵的分值定义为每 ...
- NOIP 2014 普及组 T3 螺旋矩阵
[题意] 已知:n,r,c(n<=30000) 条件:给定n行n列的螺旋矩阵(从矩阵的左上角(1,1)出发,初始时向右移动:如果前方是未曾经过的格子, 则继续前进,否则右转:重复上述操作直至经过 ...
- noip 2015 提高组
算是填个坑吧 , QwQ Day 1 第一题很水,就是考代码能力 ,直接贴代码. #include <iostream> #include <cstdlib> #include ...
- 开心的金明 NOIP 2006 普及组
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就 ...
随机推荐
- kafka集群图形界面管理工具kafka-manager
应用说明: 图形web相对于命令行很多时候显得更直观,kafka-manager是yahoo开源出来的项目,web界面还挺好用,安装更是很便捷. 安装环境: 具体安装: 1. 下载已经编译好的zip包 ...
- Spring 整合 Hibernate 时启用二级缓存实例详解
写在前面: 1. 本例使用 Hibernate3 + Spring3: 2. 本例的查询使用了 HibernateTemplate: 1. 导入 ehcache-x.x.x.jar 包: 2. 在 a ...
- Redis和memcached区别须知
1.支持的数据类型不同(memcached只支持简单的key-value的数据类型,Redis支持5种数据类型(1.string,2.list,3.set,4.zset,5.hash)) 2.redi ...
- Redis高并发和快速的原因
一.Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接 ...
- TODO java疑问
TODOjava 疑惑-关于方法调用的参数是基本类型和引用类型的差别 class DataWrap { int a; int b; } public class ReferenceTransferTe ...
- POJ 1743 Musical Theme (Hash)
Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 33820 Accepted: 11259 D ...
- fork()、vfork()、clone()的区别
因为生活的复杂,这是一个并行的世界,在同一时刻,会发生很多奇妙的事情,北方下雪,南方下雨,这里在吃饭,那边在睡觉,有人在学习,有人在运动,所以这时一个多彩多姿的世界,每天都发生着很多事情,所以要想很好 ...
- (最大连续和/最大子段和) P1115 最大子段和 洛谷
题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 第一行是一个正整数NN,表示了序列的长度. 第二行包含NN个绝对值不大于1000010000的整数A_iAi ...
- Ipython Notebook ipynb文件转化为Python脚本
欢迎关注博主主页,学习python视频资源 方法1. pycharm可以打开 方法2 https://jingyan.baidu.com/article/19192ad8edc736e53e57072 ...
- printf不定参数
title: printf不定参数 tags: C ARM date: 2018-10-21 12:14:58 --- 不定参数的传递 函数调用时参数传递是使用堆栈来实现的,参数入栈顺序是从右向左,在 ...