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) }