一个初一蒟蒻的NOIP2020游记
日期: 2020-11-30 分类: 跨站数据测试 437次阅读
Day -7
2020.11.28(周六)
洛谷11月月赛II正好在考前一周举行。于是,我果断地报名参加了Div.2的比赛。
第一题我用getchar搞了半天,突然记起入门书籍里讲过scanf/printf有个%X的格式控制符,一查,正是十六进制……
#include<cstdio>
int main(){
	int c;
	scanf("#%X",&c);
	printf("#%02X%02X%02X",255-c/256/256,255-c/256%256,255-c%256);
	return 0;
}
 
第二题我刚做完时洛谷日爆了,kkksc03叫我们不要提交……
我下载了额外测试样例,顺便写了个测试脚本。
@echo off
title EasyTextX
set /p exe=程序可执行文件:
:start
cls
echo 当前测试:%exe%
set /p in=输入文件:
set /p ans=答案文件:
type %in%|%exe%>%tmp%\程序输出
fc /c /w %ans% %tmp%\程序输出>%tmp%\etx.txt
if %errorlevel% == 1 (
goto a
) else goto b
:a
echo 测试失败
type %tmp%\etx.txt
pause
goto start
:b
echo 测试成功
pause
goto start
 
我的代码,30pts
#include<iostream>
using namespace std;
int main(){
	int n,m,p;
	long long k;
	cin>>n>>m>>k>>p;
	int a=(k/p)>m?m:(k/p),b=m-a,c=k-p*a;
	if((n-p)*(a-1)>=c){
		cout<<"yes"<<endl;
		for(int i=0;i<p;i++)
			cout<<a<<' '<<b<<endl;
		for(int i=p;i<n;i++)
			if(c>a-1){
				cout<<(a-1)<<' '<<(b+1)<<endl;
				c-=(a-1);
			}else if(c){
				cout<<c<<' '<<(m-c)<<endl;
				c=0;
			}else
				cout<<"0 "<<m<<endl;
	}
	else cout<<"no"<<endl;
	return 0;
}
 
第三题不知道为什么后来提交TLE了。反正我只做了三个Subtask,就是不TLE也拿不了什么分。
#include<iostream>
using namespace std;
const int mod=1e9+7;
int main(){
	int t,a,b,h;
	cin>>t;
	while(t--){
		cin>>a>>b>>h;
		if(h==0){
			cout<<a;
		}else if(a==b){
			long long ans=1;
			for(int i=0;i<=h;i++)
				ans=(ans*b)%mod;
			cout<<ans;
		}else if(b==1){
			long long ans=(a-1)*h%mod;
			cout<<ans;
		}
	}
	return 0;
}
 
后面的题目因为评测机故障我也懒得做了。
Day -6
2020.11.29(周日)
周末作业没做完的我表示很慌……不急不急,还有一个晚上~
我到App Store下载CSDN客户端时,意外发现了一个叫“算法动画图解”的APP。总感觉logo看着有点眼熟,便下载下来了。
我转了一番,发现……这东西真好用!!于是果断地解锁了所有算法,并且顺利地搞懂了堆排和快排。
Day -5
2020.11.30(周一)
NOI官网炸了,看不了成绩了……
Day -4
2020.12.1(周二)
今天学习了堆排序和priority_queue。
 还是不会手打堆!!!
Day -3
2020.12.2(周三)
今天打算学bfs dfs vector map set stack queue
 不知道能学会几个。
 明天专攻dp!!!
 希望noip不要出四道julian。。。
Day -2
2020.12.3(周四)
昨天作业太多,一个也没学。
 今天学了位运算和STL,还要去洛谷刷题。。。
Day -1
2020.12.4(周五)
试机来早了,我们天真地按通知上写的最早时间到达考场,结果被拦在了外面……
Day 1
2020.12.5(周六)
比赛了!!!!
第一题,考场上一秒看出要手打分数~~(废话)~~ ,没留意数据范围……
听说什么 6 0 11 60^{11} 6011 以后,我整个人都懵了……
我的考场代码:
#include<iostream>
#include<fstream>
#include<cstdio>
using namespace std;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
struct fs{
	int p,q,y;
	fs(){p=0,q=1,y=0;}
	fs(int ip,int iq){p=ip,q=iq,y=0;}
	void tq(int t){p*=t,q*=t;}
	void hj(){int g=gcd(p,q);p/=g,q/=g;}
	void operator+=(fs js){
		if(!js.q)return;
		int l=js.q,g=gcd(q,js.q);
		js.tq(q/g);tq(l/g);
		p+=js.p;
	}
}jd[100001];
int main(){
	ifstream fin("water.in");
	ofstream fout("water.out");
	int n,m,d,t,i,j,p,q;
	fin>>n>>m;
	for(i=1;i<=n;i++){
		fin>>d;
		d||(jd[i].y=1);
		if(i<=m)p=1,q=d;
		else p=jd[i].p,q=d*jd[i].q;
		fs l(p,q);
		while(d--){fin>>t;jd[t]+=l;}
	}
	for(i=1;i<=n;i++)jd[i].y&&(jd[i].hj(),fout<<jd[i].p<<' '<<jd[i].q<<endl);
	return 0;
}
 
第二、三题,直接懵。敲样例OwO
第四题,做了个一维。代码:
#include<iostream>
#include<fstream>
#include<cstdio>
using namespace std;
int main(){
	ifstream fin("walk.in");
	ofstream fout("walk.out");
	int n,k,w,sum=0,a[100000],b[100000],step=0,now=0;
	fin>>n>>k;
	if(k!=1){
		fout<<-1<<endl;
		return 0;
	}
	fin>>w;
	for(int i=0;i<n;i++){
		fin>>k>>a[i];
		sum+=a[i];
	}
	if(!sum){
		fout<<-1<<endl;
		return 0;
	}
	for(int i=0;i<w;now=++i)
		for(int j=0;now>=0&&now<w;++j,j%=n,++step)
			now+=a[j];
	fout<<step<<endl;
	return 0;
}
 
分数
CSP-J:100+85+30+20=235(一等)
 CSP-S:30+40+0+0=70(二等)
 NOIP:60+0+0+10=70(三等)
 除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
精华推荐
