E-托米的饮料
題目鏈接
可愛的小托米得到了n瓶飲料.
但他不小心把開蓋的工具弄丟了,所以他只能利用飲料瓶來開蓋.
已知第i個瓶子的品牌為ai,且其能打開bi品牌的瓶子.
問有幾瓶飲料托米無法喝到.
被用于打開飲料瓶的瓶子不一定需要被打開.
一個瓶子不能打開其本身.
輸入描述:
第一行一個整數n,表示飲料的瓶數.
接下來n行,每行兩個整數ai,bi.
輸出描述:
輸出一行一個整數,表示小托米無法喝到的飲料瓶數.
示例1
輸入
4
1 1
2 2
3 3
4 4
輸出
4
示例2
輸入
4
1 2
2 3
3 4
4 1
輸出
0
備注:
1≤n≤100
1≤ ai,bi≤ 1000
思路
瓶子不能打開自己,就兩個for循環遍歷不同瓶子,看能否喝掉。
寫的時候一直WA,我是先把不同的瓶子統計一下個數,然后一個for遍歷1 - n如果這瓶飲料存在,而且可以消除,就記錄一下。看了別人ac代碼都是用for循環一個一個判斷。又讀了一遍題,我把重點放在了牌子飲料打開對應的牌子飲料,但是題目的意思是瓶子不能打開自己。這就產生了分歧。
對于這個樣例:
我的結果是4,ac代碼是0。
總結
剛結束的省賽,會做的題都是暴力加暴力,但是今天寫題上來就沒考慮暴力,以后一定要記得先考慮暴力
AC
#include<iostream> #define N 100005 using namespace std; int a[N], b[N]; int main() {int n;cin >> n;for (int i = 0; i < n; i++) {cin >> a[i] >> b[i]; }int ans = 0;for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {// 枚舉不同的瓶子 if (i == j) continue;// 只要可以喝掉就記錄,然后枚舉下一個。 if (a[i] == b[j]) {ans++;break;}}}cout << n - ans << endl; return 0; }Error_code
#include<bits/stdc++.h> #define N 10005 using namespace std; int a[N], b[N]; int main () { // freopen("in.txt", "r", stdin);int n;while (cin >> n) {memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));for (int i = 1; i <= n; i++) {int l, r;cin >> l >> r;a[l]++;if (l != r) b[r] = 1;} int ans = 0;for (int i = 1; i < N; i++) if (b[i] && a[i]) ans += a[i];cout << n - ans << endl;}return 0; }總結
- 上一篇: 第十一届河南省赛--H : Attack
- 下一篇: E-愤怒的巨巨