-
思路:sort一遍,从小到大记录出现次数最多的数。
AC代码:
#include<bits/stdc++.h> using namespace std; const int maxn = 1e3+10; int a[maxn]; int main(void){ int n; cin >> n; for(int i = 0; i < n; i++){ cin >> a[i]; } sort(a,a+n); int cnt = 1; int maxx = 0; int val = 0; for(int i = 0; i < n; i++){ if(a[i]==a[i+1]) cnt++; else{ if(cnt>maxx){ maxx = cnt; val = a[i]; } cnt = 1; } } cout<<val<<endl; return 0; }
-
思路:两种情况分类讨论即可。
AC代码:#include<bits/stdc++.h> using namespace std; int main(void){ string s; cin >> s; int len = s.size(); int cnt = 1; int sum = 0; for(int i = 0; i < len-1; i++){ if(isdigit(s[i])) sum += (s[i]-'0')*(cnt++); } if(sum%11==10){ if(s[len-1]=='X') cout<<"Right"<<endl; else{ s[len-1] = 'X'; cout<<s<<endl; } }else{ int last = s[len-1]-'0'; if(sum%11==last) cout<<"Right"<<endl; else{ s[len-1] = sum%11+'0'; cout<<s<<endl; } } return 0; }
-
思路:这是一道弱化版的题目,正解是单调栈,鉴于此数据较弱,暴力n^2即可。对于每个矩形,高是确定的,底的话可以延伸到高度小于它的地方为止。
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1e5 + 5; int a[maxn]; int main(void) { int n; cin >> n; for(int i = 0; i < n; i++) cin >> a[i]; int ans = 0; for(int i = 0; i < n; i++){ int sum = 0; for(int j = i-1; j >= 0; j--){ if(a[j]>=a[i]) sum += a[i]; else break; } for(int j = i+1; j < n; j++){ if(a[j]>=a[i]) sum += a[i]; else break; } sum += a[i]; ans = max(ans,sum); } cout<<ans<<endl; return 0; }
-
思路:先只考虑0和1怎么放,当有a个0和b个1的时候,所有0在所有1的前面,又由于最高位不能是0,那么最高位只能是2。这样,就有a+b-1种情况(从1取到a+b-1)。假设有c个2和d 个3。一个2已经确定放在最高位了,那么现在就是c-1个2和d个3。那么把这些2和3插入已经摆好的a+b+1个数里面有多少可能呢?其实这就相当于c+d-1个相同的球(思考为什么是相同的而不是不同的)放到a+b+1个(最高位之前的位置不用放了)相同的盒子里,且允许空盒的情况,即C(a+b+1+c+d-1-1,c+d-1),然后2和3一共有c+d个,又有c+d-1种可能。
所以最后总的可能数就是C(n-1,c+d-1)(c+d-1)(a+b-1),只需要从2到n-2遍历c+d再累加就行了
AC代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1020; const int mod = 1e9+7; int c[maxn][maxn]; void Init(){ for(int i = 0; i < maxn; i++){ c[i][0] = 1; c[i][i] = 1; } for(int i = 1; i < maxn; i++){ for(int j = 1; j < i; j++){ c[i][j] = c[i-1][j-1]+c[i-1][j]; c[i][j] %= mod; } } } int main(void) { Init(); int n; cin >> n; ll ans = 0; for(int i = 2; i <= n-2; i++){ ans = ans+c[n-1][i-1]*(i-1)*(n-i-1); ans %= mod; } cout<<ans<<endl; return 0; }
『CCF题解』2013年12月【A】【B】【C】【D】
猜你喜欢
转载自blog.csdn.net/wxd1233/article/details/105633120
今日推荐
周排行