6879-Mine Sweeper
題目鏈接
題意與分析
就是類似掃雷的一個游戲,一個大的矩形中每個方格有雷的位置用‘X’標記,沒雷的位置用’.'標記,同時沒雷的位置可以代表一個數字(0-8),數字大小滿足掃雷的規則
要求給定一個數字n,為大矩形中每個方格中數字的和,如果能有一個滿足要求的矩形圖案則輸出行列數和矩形圖案,否則輸出-1,
要求行列數都小于等于25,
代碼(AC)
#include<bits/stdc++.h>
using namespace std;
const int N = 5005;
char grid[30][30];
int main() {
int n,t;
scanf("%d",&t);
while(t--) {
scanf("%d",&n);
for(int i = 0; i < 26;i++)
fill(grid[i],grid[i]+30,'X');
int r = 0, c = 0;
if(n <= 24) {
c = n + 1;
r = 1;
for(int i = 0; i < c; i += 2)
grid[0][i] = '.';
printf("%d %d\n",r,c);
for(int i = 0; i < c; i++)
cout<<grid[0][i];
cout<<endl;
}
else {
int n1, n2;
for(int i = 0; i <= 8; i++) {
if((n - i*3) % 8 == 0) {
n1 = (n - i*3)/8;
n2 = i;
r = (n1 + 11) / 12 ;
if(n1 % 12)
c = n1 % 12 * 2 + 1;
else
c = 25;
break;
}
}
for(int i = 1; i < 2*r-1; i += 2) {
for(int j = 1; j < 25; j += 2) {
grid[i][j] = '.';
}
}
for(int j = 1; j < c ; j += 2)
grid[2*r-1][j] = '.';
for(int i = 24; i > 24-n2; i--)
grid[24][i] = '.';
printf("%d %d\n",25,25);
for(int i = 0; i < 25; i++) {
for(int j = 0; j < 25; j++)
cout<<grid[i][j];
cout<<endl;
}
}
}
return 0;
}
6887-Task Scheduler
題目鏈接
題意與分析
這道題是一道概率分析題目,也就是數學方面的問題,給定每個任務需要的服務器數量,和總服務器壞服務器數量,是不放回的取出,求執行任務的順序使得每次選到壞服務器重新選擇這種沖突數量的最少,


代碼(AC)
#include<bits/stdc++.h>
using namespace std;
vector<pair<int, int> >p;
//記住不要忘了按字典序輸出呀,因為有所需服務器數量大小相同的任務!
bool cmp(pair<int,int> a, pair<int,int> b) {
if(a.second == b.second) return a.first < b.first;
else return a.second > b.second;
}
int main() {
//freopen("./1.in","r",stdin);
int t,n,m,k;
scanf("%d",&t);
while(t--) {
p.clear();
scanf("%d %d %d",&n, &m, &k);
for(int i = 0; i < n; i++) {
int temp;
scanf("%d",&temp);
p.push_back(make_pair(i+1, temp));
}
sort(p.begin(), p.end(), cmp);
if( !k ) {
for(int i = 1; i < n; i++)
cout<<i<<" ";
cout<<n<<endl;
}
else {
for(int i = 0; i < n-1; i++)
cout<<p[i].first<<" ";
cout<<p[n-1].first<<endl;
}
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/221362.html
標籤:其他
