problem a
codeforces 79a
bus game
這題先預處理求出三種拿錢方式(0、1、2張100),然後由這三種方式兩兩組合成9種方式;
然後按照優先選擇的規則定義乙個小於號,排一下序就ok了。
之後就是逐一的按照排好的順序取錢。
#include #include using namespace std;
struct meth
bool operator==(const class meth &ans)const
};
//兩種比較方式
bool cmpc(const struct meth &ans1, const struct meth &ans2)
bool cmph(const struct meth &ans1, const struct meth &ans2)
struct comb
bool operator<(const class comb &ans)const
};
meth mat[3];
comb comb[9];//綜合的使用方式
int cnt, cnthud, cntten;
void prepare()
int main()
} if(cnthud*100+cntten*10>=220 && cntten >= 2)else
} return 0;
}
problem b
codeforces 192a
funky numbers
水題,先求出所有的10^9以內的k(k+1)/2的數,排序。
然後每個詢問,列舉第乙個k(k+1)/2的數,然後二分查詢是否存在匹配的乙個數,也就是看預處理的陣列裡是否存在n-(k+(k+1)/2)這個數。
#include #include #include using namespace std;
typedef long long ll;
int cnt, n;
ll num[45000];
ll up = 1000000000;
void prepare()
} int main()
} printf("%s\n", flag ? "yes" : "no");
} return 0;
}
problem c
codeforces 329a
purification
首先檢查是否可行,不可行的條件就是同時有一整行都不能放並且有一整列不能放。(十字架的形狀)
若可行,肯定是是下面兩種情況:
1.每一行都有一列可以放,放在每一行的這個列
2.每一列都有一行可以放,放在每一列的這個行
#include #include const int maxn = 100+10;
char str[maxn];
int row[maxn], col[maxn], n, m;
int main()
for(int i = 1; i <= n ; i++)}}
int failr = -1, failc = -1;
for(int i = 1; i <= n; i++)
if(failr!=-1&&failc!=-1)
if(failr==-1)else
}return 0;
}
problem d
codeforces 216b
forming teams
由於每個人最多只有兩個矛盾的人,所有這些人的仇恨關係不是一條鏈就是乙個環(這些鏈和環不會和其他的鏈或環有關)
於是如果我們把有矛盾的人都歸為乙個集合,關鍵就成了查詢數量為奇數的環的個數了
利用並查集,只要兩個人有矛盾關係就把他們歸為乙個集合。
當出現乙個矛盾關係,如果這兩個人之前就有矛盾則說明出現了環,判斷若為奇數,肯定有乙個人要坐板凳了。
#include #include using namespace std;
const int maxn = 100+10;
int n, m, ans;
int fa[maxn], num[maxn];//集合的數量
int root(int cur)
int main()
if((n-ans)%2==1)
ans++;
printf("%d\n", ans);
}return 0;
}
problem e
codeforces 266b
queue at the school
這種題就是照著題目做,一步一步來就可以了
#include #include const int maxn = 60;
char str[2][maxn];
bool flag[maxn];
int n, t, now, pre;
int main()
for(int j = 0; j < n; j++)
if(flag[j])
str[now][j]=(str[pre][j]=='g' ? 'b' : 'g');
else
str[now][j]=str[pre][j];
}str[now][n]=0;
printf("%s\n", str[now]);
}return 0;
}
關於第二次訓練賽
第二次訓練賽甚至比第一次還要差,開始做的時候,因為在調並查集的題目,一時忘了比賽開始時間,這又導致了在開始便就輸在了起跑線上,接下來看a,20分鐘後想到了bfs,不過和p商量後,發現他在吳澤軍的書上找到了原題!用優先佇列做的,感覺很好,在理解了之後,此時時間差不多乙個小時了,開始敲,當然不想用書上的...
2017 8 10暑假集訓第十一天(下午訓練賽)
今天開了二分單調佇列 16道一周,較搜尋圖論題量少了 二分也是比較熟悉的一部分,但是單點佇列一點不會 課件也還沒看 上午a了三道,全是二分的,也比較簡單,有以前做過的題 今天下午,訓練賽比較簡單,有不少大佬都ak了!可惜我沒有 卡在了d題上 感覺自己是對的 因為中間有乙個判斷素數,我就用了sort函...
藍橋杯第二次訓練賽題解
題解計算斐波那契數列的值,n最大為45所以不用高精度直接用long long肯定可以存下。題解每一次都面臨要上幾次台階的問題,一共有三種選擇。使用深度優先搜尋來做這道題。每乙個傳遞的引數n是還剩幾個台階,只有最後所有的台階都走完了才能算一種方案。遞迴return的條件是n為0或者是負數的情況。題解每...