gin實現中介軟體middleware
阿新 • • 發佈:2020-08-07
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> 9View Codeusing 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 }
B. Gifts Fixing
題意:兩組數a[i],b[i],你可以對兩組數的數字進行如下操作:1.加減1;2.同一位置的數一起加減1,則使得a1
思路:先找出兩組數中每組裡面最小的那個數,每次迴圈進行比較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