CF #640 Div 4题解A,B,D
CF第一场Div4让我来水一篇题解吧!考试的时候只做出来了三道,主要是B,C浪费太多时间了。其实论实力是可以阿克的。
言归正传:
A:
这道题虽然说的很高深,其实就是让你将一个数分解过来,如5790=5000+700+90,没啥可说的。
MY CODE:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int jsq=0;
if(n/10000>0)
jsq++;
if(n/1000>0&&(n/1000)%10!=0)
jsq++;
if(n/100>0&&(n/100)%10!=0)
jsq++;
if(n/10>0&&(n/10)%10!=0)
jsq++;
if(n%10>0)
jsq++;
cout<<jsq;
puts("");
if(n/10000>0)
cout<<n/10000<<"0000 ";
if(n/1000>0&&(n/1000)%10!=0)
cout<<(n/1000)%10<<"000 ";
if(n/100>0&&(n/100)%10!=0)
cout<<(n/100)%10<<"00 ";
if(n/10>0&&(n/10)%10!=0)
cout<<(n/10)%10<<"0 ";
if(n%10>0)
cout<<n%10;
puts("");
}
return 0;
}不过这题坑点真的好多。
B:
我们可以从N枚举到1,判断是否有一个数,可以使得i%k==0&&i%2==n%2,之后输出时,我们可以使第一个数为,其余数为
。
MY CODE:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
int k;
cin>>n;
cin>>k;
bool flg=false;
for(int i=n;i>=max(1,n-2*k);i--)
{
if(i%k==0&&i%2==n%2)
{
puts("YES");
cout<<n-i+i/k<<" ";//taojinqua
for(int j=1;j<k;j++)
cout<<i/k<<" ";
puts("");
flg=true;
break;
}
}
if(!flg)
puts("NO");
}
return 0;
}D:
按题意模拟即可(要活用变量哦)
MY CODE:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int a[n+5];
for(int i=1;i<=n;i++)
cin>>a[i];
int ans=0,sum=0,l=1,r=n,jsq=0,cnt=0,x=0,y=0,flg=0;
while(1)
{
flg=0;
x=0;
while(x<=y&&jsq<n)
{
ans+=a[l];
x+=a[l];
l++;
jsq++;
flg=1;
}
if(flg)
cnt++;
if(jsq>=n)
break;
y=0;
flg=0;
while(y<=x&&jsq<n)
{
sum+=a[r];
y+=a[r];
r--;
jsq++;
flg=1;
}
if(flg)
cnt++;
if(jsq>=n)
break;
}
cout<<cnt<<" "<<ans<<" "<<sum<<endl;
}
return 0;
//O(N^2)
}


查看1道真题和解析