日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2793 [Poi2012]Vouchers

發布時間:2025/3/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2793 [Poi2012]Vouchers 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我們直接模擬就可以了= =

now[x]表示x的倍數已經取到x * i了,于是每次讀入x,直接向上枚舉x個沒取過的數即可。

?

1 /************************************************************** 2 Problem: 2793 3 User: rausen 4 Language: C++ 5 Result: Accepted 6 Time:5296 ms 7 Memory:14476 kb 8 ****************************************************************/ 9 10 #include <cstdio> 11 #include <algorithm> 12 13 using namespace std; 14 typedef long long ll; 15 const int N = 1000005; 16 17 int n, m, mx; 18 int now[N]; 19 ll tot, ans[N], cnt; 20 bool f[N], vis[N]; 21 22 inline int read() { 23 int x = 0, sgn = 1; 24 char ch = getchar(); 25 while (ch < '0' || '9' < ch) { 26 if (ch == '-') sgn = -1; 27 ch = getchar(); 28 } 29 while ('0' <= ch && ch <= '9') { 30 x = x * 10 + ch - '0'; 31 ch = getchar(); 32 } 33 return sgn * x; 34 } 35 36 int main() { 37 int i, x, t, C; 38 for (m = read(), i = 1; i <= m; ++i) { 39 x = read(); 40 f[x] = 1, mx = max(mx, x); 41 } 42 43 n = read(); 44 while (n--) { 45 x = t = read(); 46 for (i = now[x] + x, C = 0; i <= mx; i += x) { 47 if (!vis[i]) { 48 ++cnt, --t, vis[i] = 1; 49 if (f[i]) ans[++tot] = cnt; 50 if (++C == x) break; 51 } 52 now[x] = i; 53 } 54 cnt += t; 55 } 56 printf("%lld\n", tot); 57 for (i = 1; i <= tot; ++i) 58 printf("%lld\n", ans[i]); 59 } View Code

(p.s. 沒有的搞懂,一開始各種WA,把ans數組改成long long就AC了?蒟蒻跪求大神求教)

轉載于:https://www.cnblogs.com/rausen/p/4130050.html

總結

以上是生活随笔為你收集整理的2793 [Poi2012]Vouchers的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。