優惠券時間限制:1秒
空間限制:32768k
某次抽查時,發現有硬碟故障,歷史日誌中有部分行損壞,這些行的存在是已知的,但是行的內容讀不出來。假設損壞的行可以是任意的優惠券的購買或者使用。
現在問這次抽查中業務是否正確。若有錯,輸出最早出現錯誤的那一行,即求出最大s,使得記錄1到s-1滿足要求;若沒有錯誤,輸出-1。
輸入描述:
m 分別表示 m (1 ≤ m ≤ 5 * 10^5) 條記錄。下面有m行,格式為:
i x (i為input的縮寫,表示購買優惠券x);
o x(o為output的縮寫,表示使用優惠券x);
? (表示這條記錄不知道)。
這裡x為正整數,且x ≤ 10^5 。
輸出描述:
-1 或 x(1 ≤ x ≤ m) 其中x為使得1到x-1這些記錄合法的最大行號。
輸入例子:
01o 12?
o 13
i 1?
o 12
i 2o 1
輸出例子:
-11-1-12
解題思路:將所有的問號插入set中並記錄每種優惠券獲得或使用的時間,若不是問號則判斷這次操作後這種優惠券數量是否大於1或小於0,若是,則找這種優惠券上次出現之後的問號是否存在,若存在分兩種情況:若優惠券數量大於1,則優惠券數量減一,否則就加一,若不存在,則該位置出錯
#include #include #include #include #include #include #include #include #include #include #include using namespace std;
#define ll long long
const int inf = 0x3f3f3f3f;
int n;
char ch[500005][10];
int cnt[100005],f[100005],x[500005];
int main()
int flag=1;
for(int i=1;i<=n;i++)
s.erase(s.lower_bound(f[x[i]]));
cnt[x[i]]=min(max(cnt[x[i]],0),1);
}f[x[i]]=i;
}else s.insert(i);
}if(flag) printf("-1\n");
}return 0;
}
美團 CodeM 資格賽 數碼 詳解
time limit 1 sec memory limit 256 mb description 給定兩個整數 l 和 r,對於任意 x,滿足l x r 把 x 的所有約數全部寫下來。對於每個寫下來的數,只保留最高位的那個數碼。求 1,9 中每個數碼出現的次數。輸入格式 輸入一行兩個整數 l 和 r...
美團CodeM 資格賽第一題
美團外賣的品牌代言人袋鼠先生最近正在進行 研究。他有兩段音訊,每段音訊是乙個表示音高的序列。現在袋鼠先生想要在第二段音訊中找出與第一段音訊最相近的部分。具體地說,就是在第二段音訊中找到乙個長度和第一段音訊相等且是連續的子串行,使得它們的 difference 最小。兩段等長音訊的 differenc...
美團點評CodeM資格賽部分問題題解
注意的點是任何時刻一張優惠券只能存在乙個,如果同一張優惠券還沒被使用又購入,就看上一次購入與該次購入之間有沒有問號可以替代使用,使用優惠券同理。include include include include include include include include using namespac...