補題_Codeforces Round #663 (Div. 2)

2020-08-12 23:50:39

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;
}