第五天——数论。

今天我可以说我是全程懵逼的。老师讲的那是啥,我也不知道。只知道那些死记硬背的结论。

好吧因为上午的懵逼so下午不可避免德爆零了。

第一题:这一题应该是四题中最简单的吧。但我还是一分也没有代码是

#include<bits/stdc++.h>

using namespace std;
int main()
{
freopen("numgame1.in","r",stdin);
freopen("numgame1.out","w",stdout);
char ch[10]={};
while(cin>>ch)
{
if(ch[0]=='E')
break;
int l=strlen(ch),p=l-1;
while(ch[p]=='0')
--p;
if(p==0 && ch[p]=='1')
puts("0");
else
{
--ch[p];
puts(ch);
}
}
fclose(stdin);
fclose(stdout);

}

当然这是正确的。我想我之前错是因为想得不太对或想复杂了。

好了第二题:是数石子的题。这一题上课好像讲过类似的,但我本来就没搞懂有老师讲我都没懂,我自己更不可能做出来了。所以我又是零分好吧代码是

#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen("stone.in","r",stdin);
freopen("stone.out","w",stdout);
int T,n;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
puts(n%4 ? "A" : "B");
}
fclose(stdin);
fclose(stdout);

}

太不可思议了只有这么短短几行。

第三题:我看着会做但是数据太大了我的方法会爆so我又是0分。

#include<bits/stdc++.h>
using namespace std;
const int N=50050,mod=1000000007;
int n,k,a[N]={};
int main()
{
freopen("seqcalc.in","r",stdin);
freopen("seqcalc.out","w",stdout);
int T=1;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;++i)
scanf("%d",a+i);
long long ans=0;
if(k==1)
{
sort(a+1,a+n+1);
for(int i=1;i<=n;++i)
(ans+=(mod+a[i])*1ll*((i-1)+mod-(n-i))%mod)%=mod;
}
else
{
long long sqrsum=0,sumsqr=0;
for(int i=1;i<=n;++i)
{
(sqrsum+=a[i]*1ll*a[i])%=mod;
(sumsqr+=mod+a[i])%=mod;
}
sumsqr=sumsqr*sumsqr%mod;
ans=(n*sqrsum+mod-sumsqr)%mod;
}
printf("%d\n",(int)ans);
}
fclose(stdin);
fclose(stdout);

}

所以它才是正解。

第四题:是折纸的题目。我考试时我差不多没看懂。当然现在我……还是不懂啦。只能看代码理解了。

#include<bits/stdc++.h>
using namespace std;
const int N=100100;
int n,a[N]={},e[N]={},s[N]={};
bool check(int _)
{
fill(e+1,e+n+1,0);
for(int i=_;i+1<=n;i+=2)
{
int l=min(a[i],a[i+1]), r=max(a[i],a[i+1]);
e[l]=-1, e[r]=l;
}
int top=0;
for(int i=1;i<=n;++i)
{
if(e[i]<0)
s[++top]=i;
if(e[i]>0)
{
if(s[top]!=e[i])
return false;
--top;
}
}
return true;
}
int main()
{
freopen("folding.in","r",stdin);
freopen("folding.out","w",stdout);
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",a+i);
puts(check(1) && check(2) ? "YES" : "NO");
}
fclose(stdin);
fclose(stdout);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值