1. 程式人生 > >校門外的樹and:影象模糊處理

校門外的樹and:影象模糊處理

校門外的樹
檢視 提交 統計 提問
總時間限制: 1000ms 記憶體限制: 65536kB
描述
某校大門外長度為L的馬路上有一排樹,每兩棵相鄰的樹之間的間隔都是1米。我們可以把馬路看成一個數軸,馬路的一端在數軸0的位置,另一端在L的位置;數軸上的每個整數點,即0,1,2,……,L,都種有一棵樹。

由於馬路上有一些區域要用來建地鐵。這些區域用它們在數軸上的起始點和終止點表示。已知任一區域的起始點和終止點的座標都是整數,區域之間可能有重合的部分。現在要把這些區域中的樹(包括區域端點處的兩棵樹)移走。你的任務是計算將這些樹都移走後,馬路上還有多少棵樹。

輸入
第一行有兩個整數L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表馬路的長度,M代表區域的數目,L和M之間用一個空格隔開。接下來的M行每行包含兩個不同的整數,用一個空格隔開,表示一個區域的起始點和終止點的座標。

對於20%的資料,區域之間沒有重合的部分;
對於其它的資料,區域之間有重合的情況。
輸出
包括一行,這一行只包含一個整數,表示馬路上剩餘的樹的數目。
樣例輸入
500 3
150 300
100 200
470 471
樣例輸出
298
解題關鍵知道將值放在數組裡面便於儲存。

#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
int main (){
    int a,b,m,n;
    int k[10000];
    while(scanf("%d%d"
,&a,&b)!=EOF) { memset(k,0,sizeof(k)); while(b--){ scanf("%d%d",&m,&n); for(int i =m;i<=n;i++){ k[i]=1; } } int s = 0; for(int j = 0;j<=a;j++){ if(k[j]==0) s++; } printf("%d\n",s); } return
0; }

:影象模糊處理
檢視 提交 統計 提問
總時間限制: 1000ms 記憶體限制: 65536kB
描述
給定n行m列的影象各畫素點的灰度值,要求用如下方法對其進行模糊化處理:

  1. 四周最外側的畫素點灰度值不變;

  2. 中間各畫素點新灰度值為該畫素點及其上下左右相鄰四個畫素點原灰度值的平均(舍入到最接近的整數)。

輸入
第一行包含兩個整數n和m,表示影象包含畫素點的行數和列數。1 <= n <= 100,1 <= m <= 100。
接下來n行,每行m個整數,表示影象的每個畫素點灰度。相鄰兩個整數之間用單個空格隔開,每個元素均在0~255之間。
輸出
n行,每行m個整數,為模糊處理後的影象。相鄰兩個整數之間用單個空格隔開。
樣例輸入
4 5
100 0 100 0 50
50 100 200 0 0
50 50 100 100 200
100 100 50 50 100
樣例輸出
100 0 100 0 50
50 80 100 60 0
50 80 100 90 200
100 100 50 50 100
檢視 提交 統計 提問
解題關鍵:將陣列設定成二維的那麼上下左右都可顯示出來了

#include<iostream>
#include<cstdio>
#include<string.h>
using namespace std;
int main (){
    int m,n;
    double a[100][100];
    double b[100][100];
    double sum;
    cin >> n >> m;
    for(int i =0;i<n;i++){
        for(int j=0;j<m;j++){
            cin >>a[i][j];
            b[i][j]=a[i][j];
        }
    }
    for(int i =0;i<n;i++){
        for(int j=0;j<m;j++){
            if(i!=0&&j!=0&&i!=n-1&&j!=m-1){
            sum = (a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1])/5;
            sum = int(sum+0.5);
            b[i][j]=sum;
            }

        }
        }
        for(int i =0;i<n;i++){
        for(int j=0;j<m;j++){
            cout <<b[i][j]<<" ";
            if(j==m-1){
                printf("\n");
            }
    }}
    return 0;

}