A.2022
动态规划 AC;
#include<iostream>
#define int long long
using namespace std;
int dp[2050][15];
//dp[i][j]:把数字i分解为j个不同的数的方法数
signed main(){
dp[0][0]=1;
for(int i=1;i<=2022;i++){
for(int j=1;j<=10;j++){
//一种是已经分成j个数,这时只需每一个数+1就可以得到
//另一种是已经分成j-1个数,这时只需添加一个大小为j的数就可以得到
//注意数组越界
if(i-j>=0) dp[i][j]=dp[i-j][j]+dp[i-j][j-1];
}
}
cout<<dp[2022][10]<<endl;
//cout<<379187662194355221<<endl;
return 0;
}
B.钟表
模拟 AC:
#include<iostream>
#define int long long
using namespace std;
const double exp=1e-6;
int s,f,m;
signed main(){
for(s=0;s<=6;s++){
for(f=0;f<60;f++){
for(m=0;m<60;m++){
if(s==0&&f==0&&m==0) continue;
double ss=30.0*s+f/2.0+m/120.0;
double ff=6.0*f+m/10.0;
double mm=6.0*m;
double A=abs(ss-ff);A=min(A,360.0-A);
double B=abs(ff-mm);B=min(B,360.0-B);
if(abs(A-2*B)<=exp) cout<<s<<" "<<f<<" "<<m<<endl;
}
}
}
return 0;
}
补:出差
手动模拟 AC:
/*
4个人选2个(共6种情况)
1 2 ×
1 3 √
1 4 √
2 3 ×
2 4 √
3 4 ×
*/
#include<iostream>
using namespace std;
int main(){
cout<<"A C"<<endl;
cout<<"A D"<<endl;
cout<<"B D"<<endl;
return 0;
}