Contest2216 大中小学生联合训练赛第三十三场

问题 C: Matrix Transformation

问题 C: Matrix Transformation

  • 题目描述

  • You have an integer matrix A, with R rows and C columns. That means it has R rows with each row containing C integers. Two integers are adjacent if their container cells share an edge. For example, in the following grid
    在这里插入图片描述

    (0, 1), (4, 5), (1, 4), (5, 2) are adjacent but (0, 4), (2, 6), (5, 7) are not adjacent.

  • You are allowed to do only one kind of operation in the matrix. In each step you will select two adjacent cells and increase or decrease those two adjacent values by 1, i.e., both values are increased by 1 or both values are decreased by 1.
    Given a matrix, determine whether it is possible to transform it to a zero matrix by applying the allowed operations. A zero matrix is the one where each of its entries is zero.

  • 输入
    The first input line contains a positive integer, n, indicating the number of matrices. Each matrix starts with a line containing R (2 ≤ R ≤ 30) and C (2 ≤ C ≤ 30) separated by a single space. Each of the next R lines contains C integers. Each of these integers is between -20 and +20 inclusive.
    Assume that each input matrix will have at least one non-zero value.

  • 输出
    For each matrix (test case), output a single integer on a line by itself indicating whether or not it can be transformed to a zero matrix. Output the integer 0 (zero) if the matrix can be transformed to a zero matrix and 1 (one) if it cannot.

  • 样例输入 Copy
    6
    3 3
    -2 2 2
    1 1 0
    2 -2 -2
    3 3
    -1 0 1
    -2 -1 1
    0 1 2
    3 3
    -1 0 1
    0 2 -1
    -1 1 2
    3 3
    -1 2 1
    -1 -1 -3
    1 1 -1
    2 3
    0 -2 3
    1 3 1
    2 3
    3 1 1
    2 0 1

  • 样例输出 Copy
    0
    1
    1
    0
    1
    0

  • 题意分析:就是相邻的两个数可以同时加一个数也可以同时减一个数,但前提是相邻
    在这里插入图片描述
    就像这个图一样,0和1相邻 ,1和4也相邻。而0和4就不相邻
    最终结果其全部为零。

  • 思路分析:就是说从左上我那个右下让他为零
    | 1 |2 | 3 |
    | 4 | 5 | 6 |
    | 9 | 8 | 7 |
    就是说要他们全部为零的话,想让 | 1 | 为零 可以把它与| 2 |或者| 4 | 来处理 ,最后是| 1 为零,到| 2 |时 我们已经使| 1 | 为零了 所以只能 让他与| 3 |或者| 5 |来在一起处理。

  • 所以我们可以进行向右或者向下的操作, 这样也很麻烦,不好考虑;

  • 这样的话我们可以进行压缩,把二维压到一维。就是让向右向下的路 都只能向下,把这些数都处理到,最后一行,再向右处理,判断最后一个数是否是零。

  • 简单的说一下这个==“处理”==就是假两个数相邻,1,6 把第一个处理成0 需要同时减一也就是 0,5;而当时-1,6时 处理成零就是同时加一 成 0,7。其实就是减去前一个数,(而不是加哦!)

  • 说的有点复杂,不懂的话结合代码看一下能不能帮助你理解吧!

  • 代码帮助理解

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <string>
#include<iostream>
#include<stdio.h>
#include<string.h>
#include <algorithm>
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn=1e6+5;
const double pi=3.1415926;
const int INF=1e9;
const int dx[5]= {1,5,10,25};

ll n,m,r,l,p,t,sum,res,ans,cnt;
ll temp;
ll a[1000][1000],primee[maxn],b[maxn];
char str[100][100],s[maxn];
ll dp[1000][1000];
double ss[1000];

int main() {
	cin>>t;
	while(t--) {
		cin>>n>>m;
		sum=0;
		for(int i=1; i<=n; i++) {
			for(int j=1; j<=m; j++) {
				scanf("%lld",&dp[i][j]);
				dp[i][j]-=dp[i-1][j];
				///	cout<<dp[i][j]<<" ";
			}
		}
		sum=dp[n][1];
		for(int i=2; i<=m; i++)
		{
			if(sum>0)
			{
				sum=dp[n][i]-sum;
			}
			else sum=dp[n][i]-sum;
		}
		if(sum==0) cout<<0<<endl;
		else cout<<1<<endl;
	}
	return 0;
}

问题 J: Circles Inside a Square

+题目描述
You have 8 circles of equal size and you want to pack them inside a square. You want to minimize the size of the square. The following figure illustrates the minimum way of packing 8 circles inside a square:
在这里插入图片描述
Given the radius, r, find the area of the minimum square into which 8 circles of that radius can be packed.
输入
There is one input line, it consists of a positive real number (between 0.001 and 1000, inclusive) denoting the radius, r.
输出
Print the area of the minimum square where 8 circles of radius r can be packed. Print 5 digits after the decimal. Your output is considered correct if it is within ±0.00001 of the judge’s output.
样例输入 Copy
0.1
样例输出 Copy
0.34383

  • 题意分析 给把个圆放在一个正方形中,如何才能使正方形面积最小,其实就是放这样放时最小

在这里插入图片描述
即分析这个图形的边长,在这里插入图片描述
这样可以看出边长等于r2+rcos (15)*4这样就可以求出来了

  • 这个题精确度有点低,就是数据有点水这样就直接过了。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <string>
#include<iostream>
#include<stdio.h>
#include<string.h>
#include <algorithm>
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn=1e6+5;
const double pi=3.1415926;
const int INF=1e9;
const int dx[5]={1,5,10,25};

ll n,m,r,l,p,t,sum,res,ans,cnt;
ll temp;
ll a[maxn],primee[maxn],b[maxn];
char str[100][100],s[maxn];
ll dp[100][10000];
double ss[1000];

int main() {
	double nn;
	cin>>nn;
	double tt=nn*2+nn*4*0.965925;
	printf("%.5lf\n",tt*tt);
	return 0;
}
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <string>
#include<iostream>
#include<stdio.h>
#include<string.h>
#include <algorithm>
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int maxn=1e6+5;
const double pi=3.1415926;
const int INF=1e9;
const int dx[5]={1,5,10,25};

ll n,m,r,l,p,t,sum,res,ans,cnt;
ll temp;
ll a[maxn],primee[maxn],b[maxn];
char str[100][100],s[maxn];
ll dp[100][10000];
double ss[1000];

int main() {
	double nn;
	cin>>nn;
	double tt=nn*10;
	printf("%.5lf\n",(0.58367*tt)*(0.58367*tt));
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45911397/article/details/104643365