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