Codeforces Round #131 (Div. 2)------AB
非常郁悶,一大早起來看結果,本來以為這次rating應該能升到1600以上的,可惜結果很慘,B題由于一個小失誤,導致被別人hack成功了。由于家庭原因,老媽不準熬夜做,做了39min把AB兩道簡單題做完就沒做了,本來想AB應該全AC的,名次也不會差,但是被hack了。廢話不多說了,簡單的回顧一下AB兩道題目。
題目鏈接http://codeforces.com/contest/214
A:直接枚舉的,暫時也沒什么好的數學方法,不過數據比較小,枚舉依然很快。
#include <iostream>using namespace std;int n , m; int a , b , ans = 0;int main () {cin >> n >> m;a = 0;while (a*a <= n) {b = n-a*a;if (a+b*b == m) ans ++;a ++;}cout << ans << endl;return 0; }B:題目的意思就是給出一堆數字,讓你用這些數字組成可以被2,3,5整除的最大的數,被2,5整除的話末尾必為0,然后將所有的數字加起來求和得到,對3取余,然后找出最小的整數X,其中X滿足所有位的數字都在給出數字的范圍內,并且要預留一個0(這個我考慮到了,但后面還有個跟0相關的),由于有0的存在,所以不用擔心X找不到。然而過了小數據的我以為沒有問題了,其實依然存在問題,那就是如果我去除了很多數字后,剩下了N個0,但是我的輸出是0000000...(N個),而正確的輸出應該是0,所以我直接就跪了T_T,果然當時應該檢查一遍再lock睡覺的。
#include <iostream> #include <cstring> #define MAXN 100002 #define MAX 2147483647 using namespace std;int N; int sum = 0; bool flag = false; int h[10];bool check(int sum) {int u[10];memset(u,0,sizeof(u));while (sum) {u[sum % 10] ++;sum /= 10;}if (u[0] >= h[0]) return false;for (int i = 1;i <= 9;i++)if (u[i] > h[i]) return false;return true; }void calc(int sum) {while (sum) {h[sum % 10] --;sum /= 10;} }bool ok() {int i;for (int i = 1;i <= 9;i++)if (h[i]) return true;return false; }int main () {int t;memset(h,0,sizeof(h));cin >> N;for (int i = 0;i < N;i++)cin >> t , h[t] ++ , sum += t;if (!h[0]) cout << -1 << endl;else {t = sum % 3;if (sum) {for (;!check(t) && t < MAX;t += 3);calc(t);}if (ok())for (int i = 9;i >= 0;i--)for (int j = 0;j < h[i];j++)cout << i;else cout << 0;cout << endl;}return 0; }代碼有點小丑。
測試結果:
結果反正不行,難得我睡覺前還想了下,應該沒有問題。
轉載于:https://www.cnblogs.com/Wiki-ki/archive/2012/07/31/2616581.html
總結
以上是生活随笔為你收集整理的Codeforces Round #131 (Div. 2)------AB的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux性能测试 命令大全
- 下一篇: PHP Collection 类