Codeforces Round #682 (Div. 2)
题意:一个非空数组的和可以被这个数组的长度整除则是一个好数组,如果一个数组的所有非空子数组都是好数组则这个数组是完美数组,给你n让你构造一个长为n的完美数组
思路:取n个相同的数
代码:
#include<stdio.h>
int main()
{
int t,n;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=1;i<n;i++)printf("1 ");
printf("1\n");
}
return 0;
}
题意:给你一个长为n的数组b,则数组a为ai=2^bi,问数组a是否存在两个不相交的子区间上的和相等
1≤l1≤r1<l2≤r2≤n
al1+al1+1+…+ar1−1+ar1=al2+al2+1+…+ar2−1+ar2
思路:若数组b有两个相同的数,则肯定可以,否则需要凑,但是凑又需要两个相同的才能凑在一起,所以只有当数组b有两个相同的数的时候才是YES
代码:
#include<stdio.h>
#include<map>
using namespace std;
const int maxn=101;
int t,n,x;
int main()
{
scanf("%d",&t);
while(t--)
{
int f=0;
map<int,int>mp;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
mp[x]++;
if(mp[x]>1)f=1;
}
if(f)printf("YES\n");
else printf("NO\n");
}
return 0;
}
题意:给你一个n*m矩阵,你可以使每个数加1或者不变,让你构造出一个新的矩阵使得任意相邻的两个数不同
思路:任意数map[i] [j] 相邻的数为map[i+1] [j] map[i-1] [j] map[i] [j+1] map[i] [j-1],可以发现相邻位置上的坐标和的奇偶性是不同的,所以我们利用这个性质将奇数位置上的值改为奇数,偶数位置上的值改为偶数
代码:
#include<stdio.h>
using namespace std;
const int maxn=101;
int t,n,m,map[maxn][maxn];
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%d",&map[i][j]);
if((i+j)%2==0)
{
if(map[i][j]&1)map[i][j]++;
} else if(!(map[i][j]&1))map[i][j]++;
printf("%d ",map[i][j]);
}
printf("\n");
}
}
return 0;
}