A_A. Suborrays
题目意思:输出一个good permutation,也就是说数组中的元素从第一位到最后一位进行按位或运算结果大于元素个数
思路:按顺序输出
代码
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
const int MAXN = 1e5+10;
#define ll long long
int main(void)
{
int t,n;
cin>>t;
while(t--)
{
cin>>n;
for(int i = 0;i<n;++i)
cout<< i+1<<" ";
cout<<endl;
}
return 0;
}
B_Fix You
题意:
如果该位置为——‘R’,则可以向右移动一位
如果该位置为——‘D’,则可以向下移动一位
要求如论从那个位置开始都能到达最终位置C,请问最少修改几个
思路:
无论从那开始,都会到底下最后一行或者最右边一列
如果到底下最后一行,只要全部是向有移动即可
如果是最右边一列,那么全部向下移动即可
或者可以理解为想到这个位置那么他的上边必须为D或者左边必须为R,对任一位置都是如此,类似数塔的DP
代码
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
const int MAXN = 1e3+10;
char s[MAXN][MAXN];
#define ll long long
int main(void)
{
int t;
cin>>t;
while(t--)
{
int n,m;
cin>>n>>m;
for(int i=0;i<n;++i)
{
for(int j=0;j<m;++j)
cin>>s[i][j];
}
int sum = 0;
for(int i=0;i<n;++i)
{
for(int j=0;j<m;++j)
{
if((i==n-1&&s[i][j]!='R')||(j==m-1&&s[i][j]!='D'))
sum++;
}
}
cout<<sum-1<<endl;
}
return 0;
}