考试 —— NOI2016 山东省队选拔第一轮 Day 1

NOI2016题解 Day1T1 优秀的拆分T2 网格答案只可能是-1,0,1,2。 1. 先判断答案是否为0,相当于要判空格子是否连通。假如不连通,相当于有空格子被一些障碍点围住了(联想一下围棋。。)。那么我们按八连通把障碍的联通块搜出来,然后对于每个联通块,判断与他们八连通的空格子是否属于一个联通块(四连通),假如不是,则这幅图不连通。 2. 接下来答案为1相当于存在一个割点。首先做一些 阅读详情

NOI2016 山东省队选拔第一轮 Day 1


被虐得好爽。


这里写图片描述


T1 储能表


【问题描述】

有一个 n 行m 列的表格,行从 0 到 n−1 编号,列从 0 到 m−1 编号。
每个格子都储存着能量。最初,第 i 行第 j 列的格子储存着(i xor j)点能量。
所以,整个表格储存的总能量是,

这里写图片描述

随着时间的推移,格子中的能量会渐渐减少。
一个时间单位,每个格子中的能量会减少 1。
显然,一个格子的能量减少到 0 之后就不会再减少了。
也就是说,k 个时间单位后,整个表格储存的总能量是,

这里写图片描述

给出一个表格,求 k 个时间单位后它储存的总能量。
由于总能量可能较大,输出时对 p 取模。


【输入格式】

第一行一个整数 T,表示数据组数。
接下来 T 行,每行四个整数 n、m、k、p。


【输出格式】

共 T 行,每行一个数,表示总能量对 p 取模后的结果。


【样例输入】

3
2 2 0 100
3 3 0 100
3 3 1 100


【样例输出】

2
12
6


【数据规模和约定】

这里写图片描述


【想法】

这个题目我开始是想找规律,然后确实发现了一些“规律”,结果敲了半个小时发现错了,改进“规律”后又敲了半个小时,结果发现又错了,然后又改进………

然后,然后就没有然后了。
当我幡然醒悟,考试就结束了QWQ

据说题目正解是 “shuwei” DP,反正我是不懂。


T2 数字配对


【问题描述】

有 n 种数字,第 i 种数字是 ai 、有 bi 个,权值是 ci 。
若两个数字 ai 、aj 满足, ai 是 aj 的倍数,且 aiaj 是一个质数,那么这两个数字可以配对,并获得 ci⋅cj 的价值。
一个数字只能参与一次配对,可以不参与配对。
在获得的价值总和不小于 0 的前提下,求最多进行多少次配对。


【输入格式】

第一行一个整数 n。
第二行 n 个整数 a1 、a2 、……、an 。
第三行 n 个整数 b1 、b2 、……、bn 。
第四行 n 个整数 c1 、c2 、……、cn 。


【输出格式】

一行一个数,最多进行多少次配对。


【样例输入】

3
2 4 8
2 200 7
-1 -2 1


【样例输出】

4

【数据规模和约定】

这里写图片描述


【Solution】

在考场上根本就没有想,只是最开始阅读所有题目时扫了一眼,之后就再也没有看过了。
当时就感觉这道题有二分图的味道,配对是吧,那不就是连边吗???

我们将所有满足条件的几对不同种类的数连起来,然后从源点向这对数的一边连一条容量为 bi,费用为 0 的边,从这对数的另一边向汇点连一条容量为 bj,费用为 0 的边,然后将它们之间连一条容量为 +∞,费用为 −ci⋅cj 的边。

然后不断地找最小费用增广路。
每次增广,我们付出的都是最小的代价。
所以,当 当前最小费用 大于 0 时,我们就可以知道,当前的最大流就为所求解。
注意,最后一次增广时的流量也要计算进去啊(找到能使 当前最小费用 小于等于 0 的最大的流量),具体实现请见代码。

问题又来了,那我们怎么判断从一对数的哪一边连到汇点和源点呢??
根据唯一分解定理,

ai=Pd11⋅Pd22⋅Pd33......Pdll,dk∈N,
aj=Pe11⋅Pe22⋅Pe33……Peqq,ek∈N,

所以,若 ai≡0(mod aj) 且 aiaj 为质数,那么有且只有一个 k∈N∗,使得 dk=ek+1,dm=em,m≠k,l=q。

综上,∑k=1pdk=∑k=1qek+1,所以 ai 与 aj 的质因子个数必定一奇一偶,所以我们可以按照质因子个数的奇偶性将一对数对给分成两边。

问题得解。


【Code】

[cpp]
  1. #include <iostream>  
  2. #include <cstdio>  
  3. #include <cstring>  
  4. #include <queue>  
  5. #include <cmath>  
  6.   
  7. #define LL long long  
  8.   
  9. #define ANOTHER 200  
  10. #define Min(x,y) ((x)<(y)?(x):(y))  
  11. #define INF 0x3f3f3f3f  
  12. #define ss 0  
  13. #define tt 500  
  14.   
  15. using namespace std;  
  16.   
  17. LL n,Minx,ans,cnt,tot,Max_flow,sum;  
  18. bool flag;  
  19. bool lefts[1000];  
  20. LL a[1000],b[1000],c[1000];  
  21. LL nxt[100100],head[510];  
  22. LL data[100100],wei[100100],flow[100100];  
  23. LL f[300][300];  
  24. LL dis[510],pre[510];  
  25. bool in_stack[510];  
  26. queue<LL>q;  
  27.   
  28. void add(LL x,LL y,LL a,LL b){  
  29.     nxt[cnt]=head[x];data[cnt]=y;wei[cnt]=b;flow[cnt]=a;head[x]=cnt++;  
  30.     nxt[cnt]=head[y];data[cnt]=x;wei[cnt]=-b;flow[cnt]=0;head[y]=cnt++;  
  31. }  
  32.   
  33. bool BFS(){      
  34.     memset(dis,0x3f,sizeof dis);dis[ss]=0;in_stack[ss]=true;q.push(ss);pre[ss]=pre[tt]=-1;      
  35.     while(!q.empty()){      
  36.         LL now=q.front();      
  37.         q.pop();      
  38.         in_stack[now]=false;      
  39.         for(LL i=head[now];i!=-1;i=nxt[i]){      
  40.             if(flow[i]!=0&&dis[data[i]]>dis[now]+wei[i]){      
  41.                 dis[data[i]]=dis[now]+wei[i];      
  42.                 pre[data[i]]=i^1;      
  43.                 if(!in_stack[data[i]]){      
  44.                     in_stack[data[i]]=true;      
  45.                     q.push(data[i]);      
  46.                 }      
  47.             }      
  48.         }      
  49.     }      
  50.     return pre[tt]!=-1;      
  51. }      
  52.       
  53. bool dfs(){  
  54.       
  55.     LL Low=INF;      
  56.       
  57.     for(LL i=pre[tt];i!=-1;i=pre[data[i]])Low=Min(Low,flow[i^1]);      
  58.     for(LL i=pre[tt];i!=-1;i=pre[data[i]])flow[i^1]-=Low,flow[i]+=Low;       
  59.       
  60.     LL tmp=ans;  
  61.       
  62.     ans+=Low*dis[tt];  
  63.           
  64.     if(ans>0){  
  65.         printf(”%I64d\n”,(0-tmp)/dis[tt]+Max_flow);  
  66.         flag=true;  
  67.         return false;  
  68.     }  
  69.     Max_flow+=Low;  
  70.     return true;  
  71. }  
  72.   
  73. bool is_prime(LL x){  
  74.     LL px=(LL)sqrt((double)x);  
  75.     for(LL i=2;i<=px;i++)if(!(x%i))return false;  
  76.     return true;  
  77. }  
  78.   
  79. int main(){  
  80.       
  81.     freopen(”pair.in”,“r”,stdin);  
  82.     freopen(”pair.out”,“w”,stdout);  
  83.       
  84.     memset(head,-1,sizeof head);  
  85.       
  86.     scanf(”%I64d”,&n);  
  87.     for(LL i=1;i<=n;i++)scanf(“%I64d”,&a[i]);  
  88.     for(LL i=1;i<=n;i++){  
  89.         scanf(”%I64d”,&b[i]);  
  90.         sum+=b[i];  
  91.     }  
  92.     for(LL i=1;i<=n;i++)scanf(“%I64d”,&c[i]);  
  93.       
  94.     for(LL i=1;i<=n;i++){  
  95.         LL tmp=a[i];  
  96.         LL tot=0;  
  97.         for(LL j=2;j<=tmp;j++){  
  98.             if(tmp%j==0){  
  99.                 while(tmp%j==0){  
  100.                     tmp/=j;  
  101.                     tot++;  
  102.                 }  
  103.             }  
  104.         }  
  105.         if((tot&1))   
  106.             lefts[i]=true;  
  107.     }  
  108.       
  109.     for(LL i=1;i<=n;i++){  
  110.         for(LL j=i+1;j<=n;j++)  
  111.             if((a[i]%a[j]==0&&is_prime(a[i]/a[j]))||(a[j]%a[i]==0&&is_prime(a[j]/a[i]))){  
  112.                 if(lefts[i])  
  113.                     add(i,j,INF,-c[i]*c[j]);  
  114.                 else  
  115.                     add(j,i,INF,-c[i]*c[j]);  
  116.             }  
  117.     }  
  118.               
  119.     for(LL i=1;i<=n;i++){  
  120.         if(lefts[i])  
  121.             add(ss,i,b[i],0);  
  122.         else  
  123.             add(i,tt,b[i],0);   
  124.     }  
  125.     while(BFS())if(!dfs())break;  
  126.     if(!flag)printf(“%I64d\n”,Max_flow);  
  127.       
  128.     return 0;  
  129. }  

T3 游戏


【问题描述】

Alice 和 Bob 在玩一个游戏。
游戏在一棵有 n 个点的树上进行。
最初,每个点上都只有一个数字,那个数字是 123456789123456789。
有时,Alice 会选择一条从 s 到 t 的路径,在这条路径上的每一个点上都添加一个数字。
对于路径上的一个点 r,若 r 与 s 的距离是dis,那么 Alice 在点 r 上添加的数字是a⋅dis+b。
有时,Bob 会选择一条从 s 到 t 的路径。
他需要先从这条路径上选择一个点,再从那个点上选择一个数字。
Bob 选择的数字越小越好,但大量的数字让Bob 眼花缭乱。
Bob 需要你帮他找出他能够选择的最小的数字。


【输入格式】

第一行两个数字 n、m,表示树的点数和进行的操作数。
接下来 n−1 行,每行三个数字 u、v、w,表示树上有一条连接 u、v 的边,长度是 w。
接下来 m 行,每行第一个数是 1 或 2。
若第一个数是 1,表示 Alice 进行操作,接下来四个数字 s、t、a、b。
若第一个数是 2,表示 Bob 进行操作,接下来两个数字 s、t。


【输出格式】

每当 Bob 进行操作,输出一行一个数,表示他能够选择的最小的数字。


【样例输入】

3 5
1 2 10
2 3 20
2 1 3
1 2 3 5 6
2 2 3
1 2 3 -5 -6
2 2 3


【样例输出】

123456789123456789
6
-106


【数据规模和约定】

这里写图片描述


【想法】

据说是搜索?

NOI2016 day1试题 全国信息学奥林匹克决赛 NOI 2016 第一试 试题 立即下载

相关推荐

2017年山东省选(SDOI)第一轮题目及解析

2017年山东省选(SDOI)第一轮题目及解析 2017年山东省选(SDOI)第一轮题目及解析

NOIP2016提高组Day1题解

NOIP2016提高组Day1题解。

ZigZagK的博客 1591

2016山东省NOI省队集训DAY5 题目题解数据标程 NOIP省选集训

2016山东省NOI省队集训DAY5 题目题解数据标程 NOIP省选集训

Noi2016 D1 T1 优秀的拆分 90做法

欢迎访问博客 oi.self-jqe.win 题目大意: 如果一个字符串可以被拆分为 AABBAABB 的形式,其中 AA 和 BB 是任意非空字符串,则我们称该字符串的这种拆分是优秀的。 例如,对于字符串 aabaabaa,如果令 A=aabA=aab,B=aB=a,我们就找到了这个字符串拆分成 AABBAABB 的一种方式。 一个字符串可能没有优秀的拆分,也可能存在不止一种优秀的拆

Gqe 891

2016山东省NOI省队集训DAY3 题目题解数据标程 省选模拟赛

2016山东省NOI省队集训DAY3 题目题解数据标程 省选集训模拟赛

2016山东省NOI省队集训DAY2 题目题解数据标程

2016山东省NOI省队集训DAY2 题目题解数据,试题分析标程数据

NOI2016滚粗记

Day-1由于飞机是明天一早,所以今天就要先去济南了。下午2:00出发,与之前不同的是这次是商务车直达。路上老师检查了一下笔试,似乎没什么问题。傍晚就到了,老师们请客一起吃饭,然而在机场旁太偏了并没什么好吃的东西。 晚上没什么事情,玩了玩手机,跟yzy说了一些linux相关的东西。老师贴心的送来了明天早晨的早餐:2包好吃点(一脸不可吃)+1灌八宝粥+1包香肠。就早睡了。 6:15起床,我就喝了半

ws_fqk 6188

基于TI MSPM0的PS2双轴按键摇杆模块ADC+GPIO驱动移植实战

本文详细介绍了在TI MSPM0微控制器上驱动PS2双轴按键摇杆模块的完整实战流程。通过SysConfig图形化工具配置ADC与GPIO引脚,并编写了包含ADC采样、按键检测及数据处理的驱动代码,实现了对摇杆X/Y轴模拟量及按键数字量的稳定读取,为嵌入式控制项目提供了可直接移植的解决方案。

weixin_42465140的博客 83

NOI2016 day1 总(xia)结(che)

感觉这天考的不算比较好QAQ。。一开始看题,看到第一题数据范围是30000,好难啊不会做,然后看第二题,平面图,割成两半,网络流???不会构图啊。。。第三题,什么鬼啊,我连怎么判是不是都不会。。于是再回去看第一题,发现95是n^2暴力,感觉想出来正解再码亏的分不会比5分少,然后这时二,三题都没啥思路,于是就先搞了第一题。感觉码程序的感觉不是很好,9点半左右才搞掉第一题。上了个厕所,发现第二题答案不超

PhilipsWeng的专栏 3309

OpenBCI脑电实验避坑指南:如何用Python准确捕捉P300信号

本文详细介绍了使用OpenBCI和Python进行P300脑电信号实验的避坑指南,包括电极贴放、信号采集、信号处理和数据分析等关键步骤。通过实战经验和代码示例,帮助研究者避开常见陷阱,提高P300信号捕捉的准确率,适用于脑机接口和神经科学研究。

weixin_30316097的博客 550

电路研究9.4——合宙Air780EP的LuatOS、CSDK跟标准AT

 C-SDK、AT指令、LuatOS

esmember的博客 1116

NOIP2016-DAY1 简单题解?

虽然没考今年的noip,但不妨碍我写今年题解啊。

Alisan_wan的博客 823

黑马Java第二阶段:JavaWeb(笔记)

黑马Java第二阶段:JavaWeb(笔记)

chen的博客 5649

省选+NOI

省选+NOI 第一部分 动态规划DP 省选+NOI 第一部分 动态规划DP_青少年趣味编程-优快云博客 省选+NOI 第二部分 字符串 省选+NOI 第二部分 字符串_青少年趣味编程-优快云博客 省选+NOI 第三部分 树上问题 省选+NOI 第三部分 树上问题_青少年趣味编程-优快云博客 省选+NOI 第四部分 第四部分 图论 省选+NOI 第四部分 图论_青少年趣味编程-优快云博客 省选+NOI 第五部分 高级数据结构 省选+NOI 第五部分 高级数据结构_青少

青少年趣味编程 717

基于STM32L4XX、HAL库的AD7124模数转换器ADC驱动程序设计

/ 检查ID是否正确 (AD7124-4/AD7124-8有不同的ID)// 转换为电压值 (假设使用内部2.5V基准)// 构造读命令: 1(R/W) + 1(0) + 6(寄存器地址)// 构造写命令: 0(R/W) + 1(0) + 6(寄存器地址).config = 0, // 使用配置0。内置可编程增益放大器(PGA):1-128倍。// 读取ADC数据。// 读取当前ADC控制寄存器。// 检查数据是否就绪。// 写回ADC控制寄存器。// 初始化AD7124。

zhusl6688的博客 519

VXWorks6.9 + Workbench3.3 开发环境部署

VxWorks6.9 + Workbench3.3的安装部署,以及简单示例项目的创建、编译和运行

Mr.Sugarcane 5452

NOIP2020年山东省赛区初赛报名开始啦

全国青少年信息学奥林匹克联赛(简称 NOIP)是由中国计算机学会主办的一项全国青少年学科竞赛活动,通过竞赛相互交流,共同提高和从中培养、选拔信息学优秀后备人才。 信息学奥赛和奥数、物理奥赛、化学奥赛、生物奥赛,合称五大科奥赛。奥赛的含金量远超文科类的竞赛比如全国英语竞赛和新概念作文竞赛,也远超五大科其他类型的竞赛。 奥赛整体上分为三个级别:省级联赛、全国竞赛、国际竞赛。信奥如果能进国家集训队,可以直接保送清华北大。国家集训队低一级的NOI金牌和银牌也有机会。另外,更低一级的提高组省一等奖,可以参加清华北大的

weixin_39104847的博客 2342

四舵轮底盘运动学模型(源码)(四轮四独立转向)二

舵轮4转向活动范围 x 轴正半轴,x轴正方向为0弧度,左正右负, -M_PI/2 < 转向范围 < M_PI/2;移动底盘的正前方为x方向,左侧为y轴方向(遵循右手坐标系,右手大拇指指向天空为z轴方向,食指与中指垂直,食指指向小车正前方为x轴,中指指向为移动底盘y轴方向)转向:逆时针旋转角速度w为正,顺时针旋转角速度w为负。(遵循右手螺旋法则,右手握拳大拇指指向天空为旋转z轴方向,拳垂直于地面,4指方向即底盘转动的正方向)左前轮为1号轮,右前轮为2号轮,左后轮为3号轮,右后轮为4号轮。

苏凯的博客 527

NOI2016铜色记

前言没错这确实是2017年7月写的……NOI前每场模拟赛基本都被学长们虐的死去活来,每场只改一题。 反正才初三随便浪。南山中学集训这里的题都好简单。 第一天全校写动态点分挂。 第二天我提前离场扬言AK最后FST。 信心赛! 期间有翻车,就是我买了省内流量下载this is war of mine然后扣了200元话费。。 轻松的颓废,死了两把twom,too difficult(一局我能玩

不来也不去的一只失忆蝴蝶 1693

API深度集成——OpenClaw与第三方服务无缝对接(2026实战版)

本文介绍了OpenClaw系统与第三方服务的API深度集成技术,重点阐述了RESTful API的实现方案。通过一个功能完善的REST客户端类(RestClient)展示了核心功能:支持请求重试、拦截器机制、错误处理和认证管理等;同时提供了API资源管理器(ApiResourceManager)简化资源操作。这些技术实现了OpenClaw与外部系统的稳定可靠对接,为开发者构建API集成方案提供了2026年的最佳实践。

博客 1213

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SDOI2018游记

第一次参加省选 好紧张QWQ 简单的记录一下都发生了什么 DAY-1 学不进去PWP 晚上开包出了张橙 很慌 DAY0 正逢假期 所以就顺路回了趟老家_(:з」∠)__(:з」∠)__(:з」∠)_ 在车上补完了京紫 并且得知了京紫要出续集的消息 激动得不行PWP violet天下第一 下午到酒店 给房间的门锁坏了 给换了两个大单间hhh这波血赚 晚上去试机的时候按照惯例...

Fizzmy的博客 1970

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【NOI2019十二省联合省选】部分题简要题解

Day 1 T1 异或粽子 题意:给出一个长为n的序列,选择K个不完全重合的区间使得每个区间的异或值的总和最大。 题解:先做一个前缀异或和,对于每一个右端点我们记录三元组(l,r,x)表示在左端点在[l,r][l,r][l,r]内,最大异或值为x,塞进堆里。每次取出堆顶,并将该三元组对应的区间分裂成两个,重新扔回堆里。计算区间最大异或值利用可持久化字典树。 时间复杂度O(nlog⁡n+Klog⁡M...

Never give in. 1075

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

2018年山东一轮省队集训Day1 - 贪心 - 最小生成树 - 钩子定理

T1 题目大意 给一张无向图,求从任一点出发回到远点并且经过每条边至少一次的最小代价,其中第i条边的权值是2的i次方。n≤4e5,&amp;amp;nbsp;m≤5e5n≤4e5,&amp;amp;nbsp;m≤5e5n\le4e5,\ m\le5e5 题解 考虑,首先每条边实际上只走不超过两次,也就是问题等价于删去权和最小的一组边,使得剩下的图是欧拉图。 但是这么考虑是做不出来的;一个观察是删去的边不是很多,其次...

Mys_C_K的博客 1145

NOI2017爆炸记

一天前,NOI2017以我胸牌滚粗落下帷幕,看着我们省队都有牌心中不甚滋味,回来后老师帮我们分析了一下让我们写总结,于是就有了这篇爆炸记(其实我day2爆炸完就写了,然后并没有保存=_=) Day−1Day−1Day_{-1},到绍兴一中报了个到,然后在寝室里躺着思考人生,晚上陪省队大佬出去找超市,走了一个小时的土路(绍兴一中新校区在郊区),看见了城中村的拆迁,欣赏了火烧云,然后终于在天黑之后...

SunIsMe的博客 1064

组合数学八题

组合数学八题

Leo的博客 1454
上一篇: 网络流二十四题之二十 —— 深海机器人问题
下一篇: 数学题 —— Fibonacci
XY20130630
博客等级 码龄11年 37粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值