div3 round#494 D. Coins and Queries
阿新 • • 發佈:2018-12-23
此題的意思為給出n個硬幣和q次查詢,值得注意的是,硬幣的價值是2的某次方,然後給出一個總價值b,然後讓你找出是否有一些硬幣加起來等於這個價錢,如果有則輸出硬幣的個數,如果沒有則輸出-1.
第一次做的時候想的比較簡單,直接暴力減,然後超時了,然後看了看超時的資料,發現事情並不簡單,第2組資料給的全是1,
頓時恍然大悟,覺得自己還是太蠢了,於是想了個方法,是這樣的:
如果這個價值的硬幣存在,且不大於總價值,則用總價值除以這個價值,(1)得出來的數s如果比這個價值的硬幣數小,則總價值數直接減去得出的結果s*這個價值的硬幣。(2)如果大的或等於,s直接減去硬幣數*這個價值。
程式碼如下:
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; char s[400005]; int a[30],b[30]; int n,k; int main() { scanf("%d%d",&n,&k); getchar(); memset (a,0,sizeof(a)); memset (b,0,sizeof(b)); for (int i=0;i<n;i++) { scanf("%c",&s[i]); a[s[i]-'a']++; } for (int i=0;i<26;i++) { if(k>=a[i]) { b[i]=a[i]; k-=a[i]; } else { b[i]=k; break; } } for (int i=0;i<n;i++) { if(b[s[i]-'a']>0) { b[s[i]-'a']--; continue; } else printf("%c",s[i]); } printf("\n"); return 0; }