洛谷 P5594 【XR-4】模擬賽


思路

這是一道真·水題,會模擬就好了

\(subtask1\):

\(n = m = k = 1\),很明顯,這個部分分的答案就是\(1\),然后我們就順利得到了\(13\)分的好成績

后面的分數……似乎沒有什么必要有,反正我是直接寫的滿分。那么我們來說一下滿分思路

既然每個人在之后的\(k\)天中都有\(m\)天有空做模擬題,那我們就用一個結構體存第幾天有空和第幾套模擬題,如下

struct node {
	int x, num;
    //x表示輸入的編號,即第幾天有空,num表示這一天應該做哪一套模擬題
}a[N][N];

然后\(n^2\)輸入之后我們就可以直接處理了,我們用一個\(vis\)數組,\(vis[i][j]\)表示第\(i\)天第\(j\)套模擬題有沒有用過,直接套兩層循環,判斷\(a[i][j].x\)這天\(a[i][j].num\)這套模擬題有沒有用過,如果沒有用過,就將\(vis[a[i][j].x][a[i][j].num]\)設為訪問過,讓\(ans[i]++\),如果已經這天這套模擬題已經用過了就直接繼續循環,時間復雜度\(O(n^2)\),空間復雜度\(O(n^2)\),然后這個題我們就做完了

是不是很水??上代碼\(qwq\)

代碼

/*
By:Loceaner
*/
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;

inline int read() {
	char c = getchar();
	int x = 0, f = 1;
	for( ; !isdigit(c); c = getchar()) if(c == '-') f = -1;
	for( ; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + (c ^ 48);
	return x * f;
}

const int N = 1e3 + 11;

struct node {
	int x, num;
} a[N][N];

int n, m, k, ans[N], vis[N][N];

int main() {
	n = read(), m = read(), k = read();
	for(int i = 1; i <= n; i++)
		for(int j = 1; j <= m; j++) {
			a[i][j].x = read();
			a[i][j].num = j;
		}
	for(int i = 1; i <= n; i++) 
		for(int j = 1; j <= m; j++) 
			if(!vis[a[i][j].x][a[i][j].num]) {
				vis[a[i][j].x][a[i][j].num] = 1;
				ans[a[i][j].x]++;
			}
	for(int i = 1; i <= k; i++) printf("%d ", ans[i]);
	return 0;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM