首页 > 其他分享 >10-16 NOIP模拟赛

10-16 NOIP模拟赛

时间:2023-10-17 14:35:08浏览次数:26  
标签:10 return NOIP 16 int na read 输出 ans

10-16 NOIP模拟赛

这周末就要去考 CSP-S 啦!!!

所以改变答题策略,放弃之前死磕第一题正解的做题方法,以暴力为主,得分为主,思考出正解认为能得分后才写。

然后发现把第一题暴力打了以后,正解也浮出水面了。

明天继续尝试,然后注意休息,一定要保持良好睡眠。

T1 购买饮料(buy)

题目描述

你要买饮料。你初始有 \(n\) 块钱,一瓶饮料 \(x\) 块钱。每集齐 \(a\) 个空瓶子可以再获得 \(b\) 块钱。问最多能喝到几瓶饮料。

输入格式

第一行一个正整数 \(T\) ,表示数据组数。

每组数据一行四个整数 \(n,x,a,b\) 。


首先看到这道题暴力模拟很简单,特判如果换来的钱大于买饮料的钱,那就可以陷入循环(也就是无限喝)输出 -1,其次判断一次都换不了,直接输出 \(n/x\) 即可。

剩下的部分如果模拟 while 的话可以得40分;

int ans=0,na=0;
while(n/x){
	ans+=n/x;
	na+=n/x;
	n-=(n/x)*x;
	n+=(na/a)*b;
	na-=(na/a)*a;
}
printf("%d\n",ans);

思考正解,如何加快程序,发现我们每次循环其实各项参数都是不变的,每次 n 的变化都是相同的。

所以我直接判断换 a 个瓶子要亏多少钱,看我能亏多少次,但是要判断我能亏的前提是 \(n \ge a\)。

AC 代码:

int main(){
	freopen("buy.in","r",stdin);	
	freopen("buy.out","w",stdout);
	int T;
	T=read();
	while(T--){
		int n,x,a,b;
		n=read();x=read();a=read();b=read();
		if(n<x){printf("0\n");continue;}
		if(b/a>=x&&(n/x)>=a){
			printf("-1\n");continue;
		}
		if((n/x)<a){
			printf("%d\n",(int)n/x);continue;
		}
		long long ans=0,m=a*x-b;
		long long kn=(n-a*x)/m;
		ans+=a*kn;
		n=n-(kn*m);
		while((n/x)>=a) n-=m,ans+=a;
		ans+=n/x;
		printf("%lld\n",ans);
	}
	return 0;
}

T2 多边形(polygon)

题目描述

有一个正 n 边形,每个点的颜色为红色,蓝色,绿色中的其中一种。保证每种颜色至少出现一次且 n 边形上相邻的两个点颜色不同。你想要连接 n-3 条对角线,使得对角线把整个图形分成了 n-2 个三角形(即三角剖分),并且每个三角形三个顶点颜色两两不同。

输出格式

如果无解,输出 Impossible!

否则输出 n-3 行,每行两个正整数 x,y ,表示一条对角线(按顺时针顺序标号)。

你需要保证这构成一个合法的方案,如果有多个答案,输出任意一个即可。

注意此题输出量很大,请尽量使用速度较快的输出方式。


思路出来以后还是比较明了,但是不太好写

首先如果有一个颜色只出现了一次,那么直接把这个点和所有其他点相连即可。

否则一定会出现相邻的三个点颜色两两不同,直接将这三个点划分成一个三角形,并删除掉中间那个点递归即可。容易发现所有限制条件始终满足。但要用链表来维护。

时间复杂度 \(O(n)\)。

AC 代码:

#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
#define N 1000005
int n;
int a[N],lst[N],nxt[N],cnt[3];
bool vis[N];
char s[N];

int getc(char c){
	if(c=='R') return 0;
	else if(c=='G') return 1;
	else return 2;
}

bool check(int x){
	return a[x]!=a[nxt[x]] && a[x]!=a[lst[x]] 
	&& a[lst[x]]!=a[nxt[x]];
}//判断左右三点都不相同 

int main(){
	freopen("polygon.in","r",stdin);
	freopen("polygon.out","w",stdout);
	scanf("%d",&n);
	scanf("%s",s+1);
	for(int i=1;i<=n;i++) a[i]=getc(s[i]);//a存储字符类型012 
	for(int i=1;i<=n;i++) cnt[a[i]]++;//cnt存储每种个数 
	for(int i=1;i<=n;i++) nxt[i]=i+1,lst[i]=i-1;//链表 
	lst[1]=n,nxt[n]=1;
	queue<int>q;//存储可以被删掉的点 
	for(int i=1;i<=n;i++){
		if(check(i)) q.push(i);
	}
	vector<pair<int,int> >ans;//存储答案 
	while(1){
		if(cnt[0]==1||cnt[1]==1||cnt[2]==1){
			int pl=0;
			for(int i=1;i<=n;i++) if(!vis[i]&&cnt[a[i]]==1) pl=i;
			for(int i=1;i<=n;i++){
				if(!vis[i]&&i!=pl&&i!=nxt[pl]&&i!=lst[pl])
					ans.emplace_back(pl,i);
			}
			break;
		}
		int t=q.front();q.pop();
		if(vis[t]) continue;
		if(check(t)){
			vis[t]=1;
			cnt[a[t]]--;
			ans.emplace_back(lst[t],nxt[t]);
			lst[nxt[t]]=lst[t];
			nxt[lst[t]]=nxt[t];
			if(check(lst[t])) q.push(lst[t]);
			if(check(nxt[t])) q.push(nxt[t]);
		}
	}
	for(auto r:ans) printf("%d %d\n",r.x,r.y);
	return 0;
}

标签:10,return,NOIP,16,int,na,read,输出,ans
From: https://www.cnblogs.com/alloverzyt/p/17769597.html

相关文章

  • 2023noip赛前20天冲刺 Day6 复活赛
    回来吧牢大\sad小时候看这集复活赛打赢了。(100+100+10+15)回来吧刺激战场我最骄傲的信仰历历彩目的G港眼泪莫名在流淌你是记得98K还有给力的装备把敌人都给打退就算通宵也不累A.嗯鸥哀劈(noip)B.讴不死塔扣(obstacle)C.钙绿(probability)D.锐特(rate)......
  • NOIP2023-div2模拟赛20 D. 数星星
    妙妙+经典题。难度:Hard。题意给定一棵\(n\)个结点的树,点有点权。树上有一些简单路径,编号分别为\(1,2,\cdots,m\)。有\(q\)次询问,每次询问查询编号在\([l,r]\)中的路径的并的点权和。题解考虑一个经典题:定一个数列,每次询问一个区间不同元素的和。这个问题是简单的,你......
  • [910] Copy a file to another directory with a new name in Python
    TocopyafiletoanotherdirectorywithanewnameinPython,youcanusetheshutillibrary.Here'showyoucandoit:importshutil#Specifythesourcefilepathsource_file='path/to/source/file.txt'#Specifythedestinationdirect......
  • MBR20100CT-ASEMI肖特基MBR20100CT参数、规格、尺寸
    编辑:llMBR20100CT-ASEMI肖特基MBR20100CT参数、规格、尺寸型号:MBR20100CT品牌:ASEMI芯片个数:2封装:TO-220恢复时间:>50ns工作温度:-65°C~175°C浪涌电流:150A正向电流:10A反向耐压:100V正向压降:0.8V引脚数量:3MBR20100CT特性:ASEMI品牌MBR20100CT是采用工艺芯片,该芯片具有良好的稳定性及抗冲......
  • centos 6.10 安装 python3.10.5 和 openssl1.1.1
    centos6.10安装python3.10.5和openssl1.1.1安装opensslcentos6.10自带的openssl版本太老了,要安装1.0.2以上的版本。如果不安装openssl,python的pip无法联网。下载wgethttps://link.juejin.cn/?target=https%3A%2F%2Fwww.openssl.org%2Fsource%2Fopenssl-1.1.1......
  • Eplan P8 2.7 Win10 x64 安装小结
     一、软件安装准备及过程为免版权纠纷,此处不提供下载链接,请自行查找资源。  1、打开“ElectricP82.7.3.11418”目录,以管理员身份运行“setup.exe”开始安装步骤执行。  2、弹出程序变量选择界面,鼠标左键单击“继续”按钮,进入下一步操作。 3、弹出许可协议界......
  • MBR20100CT-ASEMI肖特基MBR20100CT参数、规格、尺寸
    编辑:llMBR20100CT-ASEMI肖特基MBR20100CT参数、规格、尺寸型号:MBR20100CT品牌:ASEMI芯片个数:2封装:TO-220恢复时间:>50ns工作温度:-65°C~175°C浪涌电流:150A正向电流:10A反向耐压:100V正向压降:0.8V引脚数量:3MBR20100CT特性:ASEMI品牌MBR20100CT是采用工艺芯片,该芯片具有良......
  • 【2023潇湘夜雨】WIN11_Pro_Dev_23565.1000软件选装纯净版10.16
    【系统简介】=============================================================1.本次更新母盘来自WIN11_Pro_Dev_23565.1000。2.增加部分优化方案,手工精简部分较多。3.OS版本号为23565.1000。精简系统只是为部分用户安装,个别要求高的去MSDN下。4.集成《DrvCeo-2.13.0.8》网卡版、运......
  • FX110网:最新警示名单公布!远离无牌克隆黑户
    为了保护投资者的资金安全,除了日常警惕诈骗团伙的各种圈套,外汇110网每周会将全球各大监管机构发布的各类警告和处罚信息进行梳理整理,方便大家查阅。法国AMF警告名单10月12日,法国金融市场管理局(AMF)更新了外汇交易商警告名单,共有5个交易商的网址被列入黑名单。英国FCA上周对64家未......
  • 叮!你有一份1024程序员节的通关秘籍待查收!
    突破性的变革往往源自一瞬间面对大模型的挑战你,或许也能成为下一个关键人物值此1024程序员节之际文心大模型携手飞桨以“超级码力碰撞未来”为主题,发起4大活动准备了一场专属于开发者们的惊喜盛会带你通关,碰撞未来!一起度过一个快乐而又充实的程序员节!AIShow·碰撞出创意10......