1. 程式人生 > >Codeforces Round #441 (Div. 2)【A、B、C、D】

Codeforces Round #441 (Div. 2)【A、B、C、D】

algorithm amp puts spa splay http con 無法 是否

Codeforces Round #441 (Div. 2)

codeforces 876 A. Trip For Meal(水題)

題意:R、O、E三點互連,給出任意兩點間距離,你在R點,每次只能去相鄰點,要走過n個點,求走過的最短距離。

技術分享
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 int main() {
 6     int n, a, b, c;
 7     scanf("%d%d%d%d
", &n, &a, &b, &c); 8 if(n==1) puts("0"); 9 else printf("%d\n", (n-2) * min(a, min(b,c)) + min(a,b)); 10 return 0; 11 }
30ms

codeforces 876 B. Divisiblity of Differences(水題)

題意:有N個數,要從中選出K個,要求選出的數相減後都能整除m,求能都選出K個數,並輸出選出的數。

題解:容易發現選出的數一定是 對m取余相同 的一類數,將每類數存起來,大於K個則輸出這一類。

技術分享
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<vector>
 5 using namespace std;
 6 typedef long long ll;
 7 const int N = 100005;
 8 int a[N];
 9 vector<int>c[N];
10 int main() {
11     int n, k, m, i, j, f = 0;
12     for(i = 0; i < N; ++i) c[i].clear();
13 scanf("%d%d%d", &n, &k, &m); 14 for(i = 1; i <= n; ++i) { 15 scanf("%d", &a[i]); 16 c[a[i]%m].push_back(i); 17 } 18 for(i = 0; i < m; ++i) { 19 if(c[i].size() >= k) { 20 puts("Yes"); f = 1; 21 for(j = 0; j < k-1; ++j) printf("%d ", a[c[i][j]]); 22 printf("%d\n", a[c[i][k-1]]); 23 break; 24 } 25 } 26 if(!f) puts("No"); 27 return 0; 28 }
61ms

codeforces 875 A. Classroom Watch(暴力)

題意:給你n要求有幾個x滿足 x加上x的各個數位之和等於n,比如:x=100a+10b+c,n=x+a+b+c。

題解:暴力,枚舉i(各個數位之和),令x=n-i再檢驗x是否滿足題意。

技術分享
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 int a[105];
 6 int main() {
 7     int n, i, j, x, y, cnt = 0;
 8     scanf("%d", &n);
 9     for(i = min(n-1,100); i >= 1; --i) {
10         x = n - i;  y = 0;
11         while(x) {y += x%10; x /= 10;}
12         if(y == i) a[cnt++] = n-i;
13     }
14     printf("%d\n", cnt);
15     for(i = 0; i < cnt; ++i) printf("%d\n", a[i]);
16     return 0;
17 }
15ms

codeforces 875 B. Sorting the Coins(模擬)

題意:一排n個位置,每次操作在p[i]位置放硬幣,從左往右看,如果第i個位置有硬幣,第i+1位置沒有,則交換硬幣(可以看看題目Note就好懂了,X0X0->0X0X是換了兩次硬幣,但這是一步,從左往右看一次是一步),直到無法再交換位置,求每次操作要幾步。

技術分享
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N = 300005;
 6 int a[N];
 7 int main() {
 8     int n, i, x;
 9     scanf("%d", &n);
10     int m = n + 1;
11     printf("1");
12     for(i = 1; i <= n; ++i) {
13         scanf("%d", &x);
14         a[x] = 1;
15         while(a[m-1]) m--;
16         printf(" %d", i-n+m);
17     }
18     return 0;
19 }
155ms

不補題了,看不透英語。。。

Codeforces Round #441 (Div. 2)【A、B、C、D】