NOI ONLINE tg 第二次 退役记

其实可能并不是真正的退役

中考之后大概还会回来的

day 0

上学校里的网课,上完后没去写作业而是来学oi,而是在luogu上把提高组的课调出来看

后来发现好像并无什么卵用

day 1

duliu

T1

想推柿子,结果没推出啥,倒是费了大把时间,最终还是来骗分了。。。

好像还不如不推,直接骗分

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define ll long long
int read()
{
	int w=1,num=0;
	char c=getchar();
	while(c<'0' || c>'9'){if(c=='-')w=-1;c=getchar();}
	while(c>='0' && c<='9'){num=(num<<1)+(num<<3)+c-'0';c=getchar();}
	return w*num;
}
//int gcd(int x,int y)
//{
//	return y==0?x:gcd(y,x%y);
//}
//int phi(int x)
//{
//	int ans=x;
//	for(int i=2;i*i<=x;i++){
//		if(!(x%i)){
//			while(!(x%i)){
//				x/=i;
//			}
//			ans=ans/i*(i-1);
//		}
//	}
//	if(x>1)ans=ans/x*(x-1);
//	return ans;
//}
//两个函数写一写,也不知道对不对,反正注掉了qwq
ll p1,p2,t,k;
int main()
{
	freopen("color.in","r",stdin);
	freopen("color.out","w",stdout);
	t=read();
	while(t--){
		scanf("%d%d%d",&p1,&p2,&k);
		if(k==1){printf("NO\n");continue;}
		if(k==2)if(p1==1 && p2==1){printf("YES\n");continue;}
		if(p1==1){
			if(p2<=k)printf("YES\n");
			else printf("NO\n");
			continue;
		}
		if(p2==1){
			if(p1<=k)printf("YES\n");
			else printf("NO\n");
			continue;
		}
//		int pa=phi(p1)-1,pb=phi(p2)-1;
//		printf("NO");
		if(p1>p2*k || p2>p1*k)printf("NO\n");
		else printf("YES\n");
	}
	return 0;
}

T2

瞎写线段树

水过样例

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define ll long long
#define N 10005
#define P (k<<1)
#define S P|1
#define M (l+r>>1)
#define len (r-l+1)
int read()
{
	int w=1,num=0;
	char c=getchar();
	while(c<'0' || c>'9'){if(c=='-')w=-1;c=getchar();}
	while(c>='0' && c<='9'){num=(num<<1)+(num<<3)+c-'0';c=getchar();}
	return w*num;
}
struct seg{
//	int c[N],sum;
	int num[10005],cnt;
}tree[N<<2];
int n,a[N],m,b[N];
void push_up(int k)
{
	for(int i=1;tree[P].num[i] || tree[S].num[i];i++){
		if(tree[P].num[i]){tree[k].num[++tree[k].cnt]=tree[P].num[i];}
		if(tree[S].num[i]){tree[k].num[++tree[k].cnt]=tree[S].num[i];}
	}
}
void build(int l,int r,int k)
{
	if(l==r){
//		tree[k].c[a[l]]=1;
		tree[k].num[++tree[k].cnt]=a[l];
		return;
	}
	build(l,M,P);
	build(M+1,r,S);
	push_up(k);
}
bool bk[N];
int sum;
const int p=1e9+7;
void query(int l,int r,int k,int i,int j)
{
	if(l>=i && r<=j){
		for(int t=1;tree[k].num[t];t++){
			if(!bk[tree[k].num[t]]){
				bk[tree[k].num[t]]=1;
				sum++;
			}
		}
		return;
	}
	if(M>=i)query(l,M,P,i,j);
	if(M+1<=j)query(M+1,r,S,i,j);
	return;
}
ll ans;
int main()
{
	freopen("sequence.in","r",stdin);
	freopen("sequence.out","w",stdout); 
	n=read();
	for(int i=1;i<=n;i++)
		b[i]=a[i]=read();
	sort(b+1,b+n+1);
	m=unique(b+1,b+n+1)-b;
	for(int i=1;i<=n;i++)
		a[i]=lower_bound(b+1,b+n+1,a[i])-b;
	build(1,n,1);
	for(int i=1;i<=n;i++){
		for(int j=i;j<=n;j++){
			query(1,n,1,i,j);
			ll t=sum;
			t=t*t%p;
			ans+=t;
			ans%=p;
			memset(bk,0,4*(m+1));
			sum=0;
		}
	}
	printf("%d",ans);
	return 0;
}

由于开不成太大数组编译也得有空间问题?不太清楚这题也拿不成所有分

之后在luogu上测试了下,50分,其它RE

T3

也不知道交上去没有

其实也是骗来着

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define ll long long
#define N 5005
int read()
{
	int w=1,num=0;
	char c=getchar();
	while(c<'0' || c>'9'){if(c=='-')w=-1;c=getchar();}
	while(c>='0' && c<='9'){num=(num<<1)+(num<<3)+c-'0';c=getchar();}
	return w*num;
}
struct edge{
	int to,nxt;
}e[N-1];
int head[N],cnt,n;
void insert(int u,int v)
{
	e[++cnt].to=v;
	e[cnt].nxt=head[u];
	head[u]=cnt;
}
const int p= 998244353;
//int dfn[N];
int nd[N];
int siz0[N],siz1[N];
int cntt;
int z;
void dfs(int u,int pa)
{
//	dfn[u]=++cntt;
	for(int i=head[u];i;i=e[i].nxt){
		int v=e[i].to;
		if(v==pa)continue;
		dfs(v,u);
		siz0[u]+=siz0[v]+(nd[v]==0);
		siz1[u]+=siz1[v]+(nd[v]==1);
	}
	if(nd[u])
		z+=siz0[u];
	else
		z+=siz1[u];
}
int x,y;
void exgcd(int a,int b)
{
	if(b==0){
		x=1;
		return;
	}
	exgcd(b,a%b);
	x=y;
	y=x-a/b*y;
}
int main()
{
	freopen("match.in","r",stdin);
	freopen("match.out","w",stdout);
	n=read();
	char c=getchar();
	while(c<'0' || c>'9')c=getchar();
	int i=1;
	while(c>='0' && c<='9'){
		nd[i]=c-'0';
		c=getchar();
	}
	for(int i=1;i<=n;i++){
		int u=read(),v=read();
		insert(u,v);
	}
	dfs(1,1);
	
	printf("0 ");
	int f;exgcd(n*n,p);f=x;
	for(int i=1;i<=n/2;i++){
		printf("%d ",z*f%p);
	}
	return 0;
}

预期得分:0+50+0=50

又进不成前25%了……

day ?

15分……

全第一题得的分

这次应该是要真退役了

滚回去学文化课了

QAQ

希望自己能进入理想的高中读书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为给选手提供一个锻炼的机会,CCF拟举办一场NOI Online能力测试。测试分为入门组和提高组,每组限额报名3万人,人数报满关闭系统,每组成功报名选手在同一时间参加线上测试。 一、测试时间: 提高组:3月7日8:30-12:00 入门组:3月7日14:30-18:00 二、测试方式: 1.选手报名成功后,根据系统生成的准考证号和密码登陆测试系统。 2.测试试题均采用电子版,每组3道题目。选手在线提交源程序,测试系统离线统一评测。 三、报名资格及时间: 1.因本次测试为限额参加,为给更多选手机会,每位选手限报名一组测试。如每组人数报满,系统会提前关闭。曾在CSP-J/S2019第二轮获一级的选手具有优先权。 2.分阶段报名: 第一阶段为CSP-J/S2019第二轮一级选手报名,时间:即日起至2月20日24:00截止; 第二阶段为开放报名,时间:2月21日-26日24:00截止。 四、报名方式: 1.测试费用:免费 2.报名网址:http://rg.noi.cn/(点击下载使用说明) 3.参加者请如实填写个人信息报名,包括但不限于姓名、身份证号、出生日期、性别、就学(学籍学校)/就职单位等。 4.测试前公布选手对应的动态地址,请关注邮件及NOI网站通知。 五、评测及成绩 本次测试不评奖、不颁发证书。3月20日前公示测试成绩前25%名单 六、咨询邮箱:noi@ccf.org.cn 此通知。 中国计算机学会 2020年2月17日

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值