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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Codeforces Round #359 div2

發布時間:2023/12/9 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces Round #359 div2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Problem_A(CodeForces 686A):
題意:
\[ 有n個輸入, +\space d_i代表冰淇淋數目增加d_i個, -\space d_i表示某個孩紙需要d_i個, 如果你現在手里沒有\space d_i個冰淇淋, 那么這個孩紙就會失望的離開。\]
你初始有x個冰淇淋。
問最后有多少個孩紙失望的離開了。

思路:
模擬就好了, 判斷當前的數目是否足夠。

代碼:

#include <cmath> #include <cstdio> #include <cstring> #include <cstdlib> #include <ctime> #include <set> #include <map> #include <list> #include <stack> #include <queue> #include <string> #include <vector> #include <fstream> #include <iterator> #include <iostream> #include <algorithm> using namespace std; #define LL long long #define INF 0x3f3f3f3f #define MOD 1000000007 #define eps 1e-6 #define MAXN 1000000 #define MAXM 100 #define dd {cout<<"debug"<<endl;} #define pa {system("pause");} #define p(x) {printf("%d\n", x);} #define pd(x) {printf("%.7lf\n", x);} #define k(x) {printf("Case %d: ", ++x);} #define s(x) {scanf("%d", &x);} #define sd(x) {scanf("%lf", &x);} #define mes(x, d) {memset(x, d, sizeof(x));} #define do(i, x) for(i = 0; i < x; i ++) #define dod(i, x, l) for(i = x; i >= l; i --) #define doe(i, x) for(i = 1; i <= x; i ++) int n; LL x;int main() {LL res, child_num;scanf("%d %I64d", &n, &x);res = x;child_num = 0;LL total_num = 0;LL d;char op[2];for(int i = 0; i < n ;i ++){scanf("%s %I64d", op, &d);if(op[0] == '+')res += d;else if(op[0] == '-'){total_num ++;if(d <= res){res -= d;child_num ++;}}}printf("%I64d %I64d\n", res, total_num - child_num);return 0; }

Problem_B(CodeForces 686B):
題意:
你能做如下操作:
[l, r]保證長度為偶數。
\[ 將(l, l+1), \cdots ,(r-1, r)交換。\]
你最后的目的是將其交換成一個非遞減的數列。
請將交換過程中的l, r輸出。

思路:
n<100, 可以很暴力的去冒泡, 因為最差的情況也不會超過100*100次。
而題目給的是2W次以內。
昂, 我比較傻逼的寫了一個貪心。
每次去找最長的能夠交換的區間, 然后進行操作, 一直到不能操作為止。

代碼:

#include <cmath> #include <cstdio> #include <cstring> #include <cstdlib> #include <ctime> #include <set> #include <map> #include <list> #include <stack> #include <queue> #include <string> #include <vector> #include <fstream> #include <iterator> #include <iostream> #include <algorithm> using namespace std; #define LL long long #define INF 0x3f3f3f3f #define MOD 1000000007 #define eps 1e-6 #define MAXN 110 #define MAXM 100 #define dd {cout<<"debug"<<endl;} #define pa {system("pause");} #define p(x) {printf("%d\n", x);} #define pd(x) {printf("%.7lf\n", x);} #define k(x) {printf("Case %d: ", ++x);} #define s(x) {scanf("%d", &x);} #define sd(x) {scanf("%lf", &x);} #define mes(x, d) {memset(x, d, sizeof(x));} #define do(i, x) for(i = 0; i < x; i ++) #define dod(i, x, l) for(i = x; i >= l; i --) #define doe(i, x) for(i = 1; i <= x; i ++) int n; int a[MAXN];int find_(int l, int r, bool is_l) {if(l > r) return l - 1;for(int i = l; i + 1 <= r; i +=2)if((a[i] <= a[i + 1] && is_l == false) || (a[i] > a[i + 1] && is_l == true)) return is_l ? i : i - 1;return is_l ? -1 : ((r - l + 1) % 2 == 0 ? r : r - 1); }void move_(int l, int r) {for(int i = l; i < r; i += 2){int temp = a[i];a[i] = a[i + 1];a[i + 1] = temp;} } void show() {for(int i = 1; i <= n; i ++)printf("%d ", a[i]);printf("\n"); }void deal() {int l = 1, r;while(true){l = find_(1, n, true);if(l == -1){l = find_(2, n, true);if(l == -1) return ;}r = find_(l + 2, n, false);if(r == -1) return;// printf("==>%d %d\n", l, r);move_(l, r);// show();// paprintf("%d %d\n", l, r);} } int main() {bool flag = true;a[0] = 0;scanf("%d", &n);flag = n == 1;for(int i = 1; i <= n; i ++){scanf("%d", &a[i]);if(a[i] > a[i - 1] && n && i > 1) flag = false;}if(!flag)deal();return 0; }

Problem_C(CodeForces 686C):
題意:
給你n, m,將其轉換成對應的7進制
然后從轉換后的[0, n-1]中任選一個數, 再從轉換后[0,m-1]中任選一個數。
必須要保證每個數字只出現一次, 即不會有重復的數字。
問你這樣的組合有多少種。

思路:
因為是7進制, 而且要保證每位都不一樣, 7進制只有7個數而已, 所以如果兩個數的長度超過了7, 肯定不行。
\[ 再則, 要注意:轉換成對應的7進制! 比如8, 轉換成7進制, 是11, 那么這8個數就成了[00, 01, 02, \cdots , 10].而不是[0, 1, 2, 3, \cdots , 10]\]
\[ 所以可以先求出它們的長度len_n, len_m, 然后判斷長度。\]
枚舉0~n, 0~m。 將其分解成對應的7進制后判斷是否出現相同數字即可。

代碼:

#include <cmath> #include <cstdio> #include <cstring> #include <cstdlib> #include <ctime> #include <set> #include <map> #include <list> #include <stack> #include <queue> #include <string> #include <vector> #include <fstream> #include <iterator> #include <iostream> #include <algorithm> using namespace std; #define LL long long #define INF 0x3f3f3f3f #define MOD 1000000007 #define eps 1e-6 #define MAXN 1000000 #define MAXM 10 #define dd {cout<<"debug"<<endl;} #define pa {system("pause");} #define p(x) {printf("%d\n", x);} #define pd(x) {printf("%.7lf\n", x);} #define k(x) {printf("Case %d: ", ++x);} #define s(x) {scanf("%d", &x);} #define sd(x) {scanf("%lf", &x);} #define mes(x, d) {memset(x, d, sizeof(x));} #define do(i, x) for(i = 0; i < x; i ++) #define dod(i, x, l) for(i = x; i >= l; i --) #define doe(i, x) for(i = 1; i <= x; i ++) int n, m; int left_len = 0, right_len = 0;int check(int x, int y) {int used[MAXM] = {0};for(int i = x, k = 0; k < left_len; k ++, i /= 7)used[i % 7] += 1;for(int i = y, k = 0; k < right_len; k ++, i /= 7)used[i % 7] += 1;for(int i = 0; i < 7; i ++)if(used[i] > 1) return 0;return 1; }int main() {scanf("%d %d", &n, &m);left_len = right_len = 1;for(int i = 7; i < n; i *= 7)left_len ++;for(int i = 7; i < m; i *= 7)right_len ++;int ans = 0;if((left_len + right_len) <= 7){for(int i = 0; i < n; i ++)for(int j = 0; j < m; j ++)ans += check(i, j);}printf("%d\n", ans);return 0; }

Orz 有點頭痛,剩下的等明天再補。今天元氣大傷

轉載于:https://www.cnblogs.com/By-ruoyu/p/5674712.html

總結

以上是生活随笔為你收集整理的Codeforces Round #359 div2的全部內容,希望文章能夠幫你解決所遇到的問題。

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