1. 程式人生 > 實用技巧 >c++ 常用命令集合

c++ 常用命令集合

A. Remove Smallest

題意:陣列是否滿足任意i,j保證|ai-aj|<=1,如果都可以滿足,輸出YES,否則輸出NO

思路:直接排序遍歷即可

程式碼:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<queue>
 7 #include<vector>
 8 #include<set>
 9
using namespace std; 10 int main(){ 11 int t; 12 scanf("%d",&t); 13 while(t--){ 14 int n; 15 scanf("%d",&n); 16 int a[100]; 17 for(int i=0;i<n;i++){ 18 scanf("%d",&a[i]); 19 } 20 sort(a,a+n); 21 int flag=0; 22 for
(int i=1;i<n;i++){ 23 if(a[i]-a[i-1]>1){ 24 flag=1; 25 break; 26 } 27 } 28 if(flag==0){ 29 printf("YES\n"); 30 }else{ 31 printf("NO\n"); 32 } 33 } 34 }
View Code

B. Gifts Fixing

題意:兩組數a[i],b[i],你可以對兩組數的數字進行如下操作:1.加減1;2.同一位置的數一起加減1,則使得a1

=a2=a3....=an,並且b1=b2=b3.....=bn,那麼需要最少進行多少步

思路:先找出兩組數中每組裡面最小的那個數,每次迴圈進行比較a[i]與a[min],再找到a[i]和b[i]最大的那個數,直接算其和

程式碼:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<queue>
 7 #include<vector>
 8 #include<set>
 9  
10 using namespace std;
11 pair<int,int> a[100];
12 int main(){
13     int t;
14     scanf("%d",&t);
15     while(t--){
16         int n;
17         scanf("%d",&n);
18         long long int sum=0;
19         int minn1=1e9,minn2=1e9;
20         for(int i=0;i<n;i++){
21             scanf("%d",&a[i].first);
22             minn1=min(minn1,a[i].first);
23         }
24         for(int i=0;i<n;i++){
25             scanf("%d",&a[i].second);
26             minn2=min(minn2,a[i].second);
27         }
28         sort(a,a+n);
29         for(int i=0;i<n;i++){
30             sum+=max(a[i].second-minn2,a[i].first-minn1);
31         }
32         printf("%lld\n",sum);
33     }
34 }
View Code

C. Boats Competition

題意:一組數從中抽取兩個數,保證a[1]+b[1]=a[2]+b[2]……=a[k]+b[k],一共最多可以抽取多少組

思路:直接進行統計,抽取的兩個數只有兩種情況,一種是等差中項是整數的,例如1.2.3;一種是等差中項不是整數的,例如1.2.3.4;直接儲存其數值個數,進行迴圈比較最多,一定注意是取兩個數的最小值,不是平均值,並且遍歷的時候要從第一個for迴圈的i入手往前走,不要從1開始走

程式碼:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<queue>
 7 #include<vector>
 8 #include<set>
 9 using namespace std;
10  
11 int main(){
12     int t;
13     scanf("%d",&t);
14     while(t--){
15         int n;
16         scanf("%d",&n);
17         int a[60][2]={0};
18         int numl;
19  
20         for(int i=1;i<=60;i++){
21             a[i][0]=i;
22         }
23         for(int i=1;i<=n;i++){
24             scanf("%d",&numl);
25             a[numl][1]++;
26         }
27         int sum=0,num=0;
28         for(int i=1;i<=n;i++){
29                 num=0;
30                 num+=a[i][1]/2;
31             for(int j=i-1;j>=1&&2*i-j<=n&&2*i-j>i;j--){
32                 if(a[2*i-j][1]==0||a[j][1]==0){
33                     continue;
34                 }else{
35                 num+=min(a[j][1],a[2*i-j][1]);
36                 }
37             }
38             sum=max(num,sum);
39         }
40         for(int i=1;i<=n;i++){
41             num=0;
42             if(a[i][1]==0||a[i+1][1]==0){
43  
44             }else{
45                 num+=min(a[i][1],a[i+1][1]);
46             }
47             for(int j=i-1;j>=1&&2*i+1-j<=n&&2*i+1-j>i+1;j--){
48                 if(a[j][1]==0||a[2*i+1-j][1]==0){
49                     continue;
50                 }else{
51                 num+=min(a[j][1],a[2*i+1-j][1]);
52  
53                 }
54             }
55             sum=max(num,sum);
56         }
57         if(n==2){
58             printf("1\n");
59             continue;
60         }else{
61             printf("%d\n",sum);
62         }
63  
64     }
65 }
View Code