梦熊联盟 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了……

浙公网安备 33010602011771号