大一大二省赛模拟赛一(2019.5.2-团队赛)
这场比赛,是5月11日去哈工大打省赛的一个赛前模拟训练,总共5个小时(中午12点到下午5点),题出的很难(主要是我太菜…),总共11题,我们队出了6题…估计也就差不多大一队伍的中流水平…前2个小时出了5题,后面真的是后劲不足,实在是没有AC了…只有最后几分钟才出了B题…
这是我们队的提交记录…可以看到从1点半之后几乎就没有AC了…在这期间真的是自闭啊…
A题 nefu 33 Fair Number
签到题。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int l,s1,s2,tmp;
string a;
while(cin>>a&&a!="0")
{
l=a.length();
s1=s2=0;
for(int i=0;i<=l/2-1;i++)
{
if(a[i]>='0'&&a[i]<='9')
s1=s1+a[i]-'0';
else
s1=s1+a[i]-'A'+10;
}
if(l%2==0)tmp=l/2;
else tmp=l/2+1;
for(int i=l-1;i>=tmp;i--)
{
if(a[i]>='0'&&a[i]<='9')
s2=s2+a[i]-'0';
else
s2=s2+a[i]-'A'+10;
}
if(s1==s2)printf("Y\n");
else printf("N\n");
}
return 0;
}
D题 nefu 643 teacher Li
寒假培训的原题,我开的这题,直接AC了…
#include <bits/stdc++.h>
using namespace std;
int n,i,j,cas;
string x,ans;
int main()
{
ios::sync_with_stdio(false);
cas=0;
while(cin>>n>>ans)
{
for(i=1;i<=2*n-2;i++)
{
cin>>x;
for(j=0;j<max(x.length(),ans.length());j++)
ans[j]=ans[j]^x[j];
}
printf("Scenario #%d\n",++cas);
printf("%s\n\n",ans.c_str());
}
return 0;
}
K题 nefu 904 删数问题
开场不久队友AC了这题…贴一下他的代码:
#include <bits/stdc++.h>
using namespace std;
void calculate(char *a,int k)
{
int len=strlen(a);
for(int count=0;count<k;count++)
{
for(int i=0;i<len;i++)
{
if(a[i]>a[i+1])
{
for(int j=i;j<len;j++)
{a[j]=a[j+1];}
break;
}
}
}
cout<<a<<endl;
}
int main()
{
char s[210];
int k;
while(cin>>s)
{
if(s[0]=='0') break;
cin>>k;
calculate(s,k);
}
return 0;
}
I题 nefu 477 不同的卡片
队友开的这题…比较水…没什么好说的…
//2019.5.7补题 by.nefu_ljw
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,x,cas,sum,ans,pre[100010],vis[100010],a[100010];
int main()
{
ios::sync_with_stdio(false);
while(cin>>n>>m)
{
sum=0;
memset(vis,0,sizeof(vis));
for(ll i=1;i<=n;i++)
{
cin>>a[i];
if(vis[a[i]]==0)//vis标记是否重复
{
vis[a[i]]=1;
sum=sum+a[i];
}
pre[i]=sum;//pre数组记录[1,x]区间内的不重复元素的和
}
printf("Case #%lld:\n",++cas);
while(m--)
{
cin>>x;
printf("%lld\n",pre[x]);
}
}
return 0;
}
J题 nefu 599 ***丝搬砖
我开的这题,一开始套的DFS的模板,看着最大才30,也没测试一下(30,30)就交了,结果TLE…后来队友推出数学公式,答案是一个组合数Cm+n n(m+n个数中选n个),用杨辉三角打表就给AC了…
#include <bits/stdc++.h>
using namespace std;
long long a[65][65],i,j,m,n;
void excel()//杨辉三角打表
{
a[1][1]=1;
for(i=2;i<=62;i++)
{
for(j=1;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
int main()
{
while(cin>>m>>n)
{
excel();
printf("%lld\n",a[m+n+1][n+1]);
}
return 0;
}
B题 nefu 640 Number Guessing
最后做的题,我卡了一个多小时,最后队友AC了…
思路是枚举答案,从0枚举到9999,但是要注意枚举的数不能含有重复数字(题目中说了电脑给的四位数是四个不同的数字组合,不含重复数字,那么你猜的数字也不能含重复数字)
我赛后补题了一下,发现比赛的时候我把check函数里第一个循环写到第二个循环的内层了,而且也没判断枚举的数字是否含有重复数字,错误还是挺多的…我还是思路不严谨,题目也没看清…
以下是我补题的AC代码:
//2019.5.6补题 by.nefu_ljw
#include <bits/stdc++.h>
using namespace std;
int n,suma,sumb,answer,s1[21],s2[21];
string a[21],b,ans[21];
bool check(int x)//判断枚举的数x是否满足条件
{
int x1=x%10,x2=x/10%10,x3=x/100%10,x4=x/1000;
if(x1==x2||x1==x3||x1==x4||x2==x3||x2==x4||x3==x4)return 0;//注意,枚举的数不能含有重复数字!
for(int i=3;i>=0;i--)//把枚举的数x转换为字符串b
{
b[i]=x%10+'0';
x=x/10;
}
for(int cas=1;cas<=n;cas++)
{
suma=sumb=0;
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
for(int i=0;i<=3;i++)
{
if((a[cas][i]^b[i])==0)suma++;
s1[a[cas][i]-'0']++;//统计字符串a中某个数字出现的次数
s2[b[i]-'0']++;//统计字符串b中某个数字出现的次数
}
for(int i=0;i<=9;i++)
{if(s1[i]==1&&s2[i]==1)sumb++;}
if(suma!=(ans[cas][0]-'0')||sumb!=(ans[cas][2]-'0'))return 0;//与ans[cas]的字符比对,判断是否满足答案
}
return 1;
}
int main()
{
ios::sync_with_stdio(false);
while(cin>>n&&n>=0)
{
for(int i=1;i<=n;i++)
cin>>a[i]>>ans[i];
for(int i=0;i<=9999;i++)
{
if(check(i))
{answer=i;break;}
}
printf("%04d\n",answer);
}
return 0;
}
——————————————————————————————————————————————
以下5题…没整出来…待我以后补题…
C题 nefu 642 monkey
队友看了这题,貌似是三维DP,然而没整出来状态转移方程…
E题 nefu 641 素数树
离散数学刚学完《树》这一章…然而这题还是不会写…这题只有大二的队AC了…
F题 nefu 656 Easy Dynamic Programming
这题就一个队AC了…我们队看都没看…题目名字说是简单的动态规划,我信你个鬼…
G题 nefu 39 Reverse a Road
这题我们队看了一下,貌似可以整,然而只能想到O(n2)的算法…估计TLE…整不出了…
H题 nefu 40 Divid Regions
防AK题…没有一个队伍提交这题…大一大二全军覆没…