A - Cats and Fish
题意:
给m条鱼, n 只猫, x 分钟,第二行给出每只猫吃一条鱼的时间,问在x分钟后还有多少剩的鱼和没吃完的鱼
题解:
先对时间进行排序,就简单模拟
#include <bits/stdc++.h>
using namespace std;
int main(){
int n, m, x;
while(scanf("%d%d%d", &m, &n, &x) != EOF){
int a[105], b[105];
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
int ans = 0, sum = 0;
for(int i = 1; i <= n; i++){
scanf("%d", &a[i]);
}
sort(a+1, a+1+n);
while(m && x){ // 当时间或鱼的数量为0时,结束
for(int i = 1; i <= n; i++){
if(b[i] != a[i]){
b[i]++;
}
if(b[i] == 1){ // 一只猫吃一只鱼一分钟,就减去这条鱼
m--;
}
if(b[i] == a[i]){
b[i] = 0;
}
if(m == 0){
break;
}
}
x--;
}
for(int i = 1; i <= n; i++){
if(b[i] != 0){
ans++;
}
}
cout << m << " " << ans << endl;
}
return 0;
}
B - Secret Poems
题意:
给出矩阵,变化后输出,变化方法如下
题解:
模拟,先将其转化为字符串,然后给二维矩阵赋值
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
while(scanf("%d", &n) != EOF){
char a[105][105];
for(int i = 1; i <= n; i++){
scanf("%s", a[i]+1);
}
string s = "";
int i = 1, j = 1;
s.push_back(a[1][1]);
while(i != n || j != n){
if((i==1&&j%2==1&&j!=n)||(i==n&&j%2==1&&j!=n&&n%2==0)||(i==n&&j%2==0&&j!=n&&n%2==1)){
j++;s.push_back(a[i][j]);// 向右移动的情况
}
if(((i%2==0&&j==1&&i!=n)||(i%2==1&&j==n&&n%2==1)||(i%2==0&&j==n&&n%2==0))&&i!=n){
i++;s.push_back(a[i][j]);// 向下移动的情况
}
if(i == 1 && j % 2 == 0){ // 在第一排向左下移动的情况
while(j != 1){
i++;j--;s.push_back(a[i][j]);
}
}
if((i%2==0&&j==n&&n%2==1)||(i%2==1&&j==n&&n%2==0)){
while(i!=n){ // 在第n列向左下移动的情况(分奇偶)
i++;j--;s.push_back(a[i][j]);
}
}
if(i%2==1&&j==1){ // 在第一列向右上移动的情况
while(i != 1){
i--;j++;s.push_back(a[i][j]);
}
}
if(i==n&&((j%2==1&&n%2==1)||(j%2==0&&n%2==0))){
while(j != n){ // 在第n排向右上移动的情况
i--;j++;s.push_back(a[i][j]);
}
}
}
i = 1;j = 1;
int w = 1, h = n, u = 0;
while(u <= n*n-1){
if(j <= h){
while(j <= h && u < n * n){
a[i][j] = s[u];
j++;u++;
}
j--;i++;
}
if(i <= h){
while(i <= h && u < n * n){
a[i][j] = s[u];
i++;u++;
}
h--;i--;j--;
}
if(j >= w){
while(j >= w && u < n * n){
a[i][j] = s[u];
j--;u++;
}
w++;j++;i--;
}
if(i >= w){
while(i >= w && u < n * n){
a[i][j] = s[u];
i--;u++;
}
i++;j++;
}
}
for(i = 1; i <= n; i++){
for(j = 1;j <= n; j++){
cout << a[i][j];
}
cout << endl;
}
}
return 0;
}