梦熊联盟 CSP-J 2022 模拟赏析

前言:如果今年CSP也这样搞,那就肯定寄了

 

T1:学两个小时都会做得屑题

判断是否为3的倍数

10min切掉

#include<bits/stdc++.h>
using namespace std;
int main()
{
	//freopen("cattle.in","r",stdin);
	//freopen("cattle.out","w",stdout);
	int t,n;
	cin>>t;
	for (int i=0;i<t;i++)
	{
		cin>>n;
		if(n%3==0)
		{
			cout<<"YES"<<endl;
		} 
		else
		{
			cout<<"NO"<<endl;
		}
	}
	//fclose();
	return 0;
}

T2:

题目:

目前,国际上通用语言有 m 种,如果两个国家队没有共同的语言,这两个国家队就无法交流。IOI 的主席显然不会容忍这种情况, 因此 , 每两只队伍之间必须有不少于一种相同的语言。同时,所有参赛队伍所掌握的语言是不完全相同的,换句话说,没有两支队伍掌握的语言完全相同。期班牛和期班蓝的对手但凡多那么一个,都有可能抢走中国队的第一,所以他们要考虑最坏情况,也就是参赛队伍最多有多少个。

一看就知道,这题暴力枚举必爆

然后就开始找规律

以下是我做出的一些努力:

设有语言1-m,则当m=1时:有队伍1个

当m=2时:有队伍2个 分别是:

懂m种语言的1,2 

懂m-1种语言的1

当m=3时:有队伍4个 分别是:

懂m种语言的1,2,3,

懂m-1种语言的1,2 1,3, 2,3

当m=4时:有队伍8个 分别是:

懂m种语言的1,2,3,4

懂m-1种语言的1,2,3 1,2,4 1,3,4 2,3,4

懂m-2种语言的1,2 1,3 1,4

当m=5时: 有队伍15个 分别是:

懂m种语言的1,2,3,4,5

懂m-1种语言的1,2,3,4 1,2,3,5 2,3,4,5 1,3,4,5 1,2,4,5

懂m-2种语言的1,2,3 1,2,4 1,2,5 1,3,4 1,3,5 1,4,5 2,3,4 2,3,5 3,4,5

综上,我得出一个不知道对不对的规律:

1.当m是奇数时,队伍数量n就是m——m/2+1它们分别到1的全排列

因为m/2必定会有m/2+1所不通的语言

譬如m=5 m/2+1=3时,1,2,3就不能与4,5共存

更小的就更不必说了

2.当m是偶数时,队伍数量n就是从m——m/2+1它们分别到1的全排列,加上m/2的全排列的一半

因为m/2必定有一半无法与另一半共存

譬如当m=4时 就无法同时有1,2和3,4

#include<bits/stdc++.h>
using namespace std;
int read()
{
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-'){w=-1;}ch=getchar();}
	while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();}
	return s*w;
}

int pl(int n,int j)
{
	int num0=0;
	bool flag=0;
	int s=1;
	int num1=1;
	for(int k=2;k<=j;k++)
	{
		s*=10;
		s+=k;
	}
	//cout<<s<<endl;
	while(1)
	{
		flag=0;
		while(s%10<n)
		{
			s++;
			cout<<s<<endl;
			num1++;
		}
		for(int q=1;q<j;q++)
		{
			int w=s/pow(10,q);
			if(w%10<n-q)
			{
				
				int o=pow(10,q);
				s+=o;
				int e=s%o;
				s-=e;
				//cout<<s<<"j"<<endl;
				int u=q;
				//int y=pow(10,q);
				//cout<<u<<"j"<<endl;
				while(u>0)
				{
					int d=s/o;
					d%=o;
					d++;
					d*=pow(10,u-1);
					s+=d;
					u--;
				}
				cout<<s<<endl;
				num1++;
				flag=1;
				break;
			}
		}
		if(!flag)
		{
			break;
		}
	}
	
}
int main()
{
	//freopen("competition.in","r",stdin);
	//freopen("competition.out","w",stdout);
	int t;
	int n,num=0;
	t=read();
	for (int i=0;i<t;i++)
	{
		n=read();
		num=n+1;
		int gui=1e9+7;
		if(n==1)
		{
			cout<<"1"<<endl;
			continue;
		} 
		if(n==2) 
		{
			cout<<"2"<<endl;
			continue;
		} 
		if(n==3) 
		{
			cout<<"4"<<endl;
			continue;
		} 
		if(n%2==0)
		{
			for(int j=n-2;j>=n/2;j--)
			{
				cout<<(num+pl(n,j))%gui<<endl;
			}
		}
		else
		{
			for(int j=n-2;j>n/2;j--)
			{
				cout<<(num+pl(n,j))%gui<<endl;
			}
		}
	}
	//fclose();
	return 0;
}

 代码WA了……

 

posted @ 2022-10-24 11:16  美索maysoul  阅读(585)  评论(1)    收藏  举报