Educational Codeforces Round 84 (Rated for Div. 2)

C. Game with Chips

題意

給你一個n,m的棋盤,再給你k個棋子的座標,讓你移動經過接下來對應的k個位置。
可以所有棋子到一個格子。
當移動到邊界的時候再往邊界走則原地不動。
求所有棋子走的路線能夠滿足題意的,步數不超過2nm次。
LRUD對應移動的方向,輸出構造的路徑。

思路

構造題
當時打的時候一直在想如何構造最優路徑,是BFS呢還是啥。
現在想想當時真的蠢,打一個EDU第C題沒那麼麻煩。
其實這道題的關鍵在於讀題,步數不超過2nm,仔細想想所有格子移動到某個角落然後再S形遍歷全圖,這樣的步數也不可能超過2nm。

讀題很重要,注意一下數據的範圍,有利於構造合理的算法。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const double eps = 1e-8;
const int NINF = 0xc0c0c0c0;
const int INF  = 0x3f3f3f3f;
const ll  mod  = 1e9 + 7;
const ll  maxn = 1e6 + 5;

ll n,m,k;

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin>>n>>m>>k;
	for(int i=1;i<=2*k;i++){
		int x,y;
		cin>>x>>y;
	}
	cout<<n*(m-1)+2*n+m-3<<'\n';
	for(int i=1;i<=m-1;i++){
		cout<<'L';
	}
	for(int i=1;i<=n-1;i++){
		cout<<'U';
	}
	for(int i=1;i<=n;i++){
		if(i>1) cout<<'D';
		for(int j=1;j<=m-1;j++) cout<<((i%2==1)?'R':'L');
	}
	return 0;
}

E. Count The Blocks

題意

給你一個整數n,求10n10^n內(每個數有前導零)長度爲1到n的塊分別有多少個。塊的含義是連續相同數字的長度。

思路

找規律
f[n]=n10nsum[n1](a[1]10n1+a[2]10n2+...+a[n1]101)f[n]=n*10^n-sum[n-1]-(a[1]*10^{n-1}+a[2]*10^{n-2}+...+a[n-1]*10^1)
sum[n]=sum[n1]+f[n]sum[n]=sum[n-1]+f[n]


#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const double eps = 1e-8;
const int NINF = 0xc0c0c0c0;
const int INF  = 0x3f3f3f3f;
const ll  mod  = 998244353;
const ll  maxn = 1e6 + 5;

ll ans[maxn],s[maxn],a[maxn];

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	int n;cin>>n;
	a[0]=1;
	for(int i=1;i<=n;i++) a[i]=(a[i-1]*10)%mod;
	ll res=0,k=0;
	for(int i=1;i<=n;i++){
		ans[i]=(i*a[i]-s[i-1]-k+2*mod)%mod;
		s[i]=(s[i-1]+ans[i])%mod;
		k=(k+s[i])%mod;
	}
	for(int i=n;i>=1;i--){
		cout<<ans[i]<<" ";
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章