CodeFordes contest1073

版权声明:Dream_dog专属 https://blog.csdn.net/Dog_dream/article/details/84306962

a:简单的字符串判断前一个字符是否等于后一个字符

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int n;
    string s;
    cin>>n>>s;
     for(int i=1;i<n;i++){
        if(s[i]!=s[i-1]){
            cout<<"YES"<<endl;
            cout<<s[i-1]<<s[i]<<endl;
            return 0;
        }
    }
    cout<<"NO"<<endl;
    return 0;
}

b:

#include<bits/stdc++.h>
using namespace std;
#define clr(a,b) memset(a,b,sizeof(a))
const int maxn=200000+5;
const int minn=100;
int main()
{
    int vis[maxn];
    int n;
    scanf("%d",&n);
    int tm;
    for(int i=0;i<n;i++)
    {
        scanf("%d",&tm);
        vis[tm]=i+1;
    }
    int en=0;
    for(int i=0;i<n;i++)
    {
        scanf("%d",&tm);
        printf("%d%s",(vis[tm]-en)<=0?0:(vis[tm]-en),i<n-1?" ":"");
        en=max(vis[tm],en);
    }
    return 0;
}

c:

#include<bits/stdc++.h>
using namespace std;
//Х■иоие
#define clr(a,b) memset(a,b,sizeof(a))
const int maxn = 200000 + 5;
const int minn = 100;
int n, x, y;
int px[maxn], py[maxn];
string s;
int check(int mid)
{
	int l = 1;
	for (int r = mid; r <= n; r++)
	{
		int tx = px[l - 1] + px[n] - px[r];
		int ty = py[l - 1] + py[n] - py[r];
		int rx = abs(x - tx);
		int ry = abs(y - ty);
		if (mid >= rx + ry && (mid - (rx + ry)) % 2 == 0)
			return 1;
		l++;
	}
	return 0;
}
int main()
{
	cin.tie(0); cout.tie(0);
	cin >> n>>s>>x>>y;
	for (int i = 0; i < n; i++)
	{
		px[i + 1] =px[i]+ (s[i] == 'R' ? 1 : (s[i] == 'L' ? -1 : 0));
		py[i + 1] =py[i]+ (s[i] == 'U' ? 1 : (s[i] == 'D' ? -1 : 0));
	}
	int l = 0, r = n;
	int mind;
	while (l <= r)
	{
		mind = (l + r) >> 1;
		if (check(mind))r = mind - 1;
		else l = mind + 1;
	}
	cout << (l > n ? -1 : l) << endl;
	return 0;
}

d:

#include<bits/stdc++.h>
using namespace std;
using namespace std;
//±©Á¦
#define clr(a,b) memset(a,b,sizeof(a))
#define reg      register
#define il       inline
typedef long long ll;
const int maxn = 200000 + 5;
const int minn = 100;
const ll  inf = 0x3f3f3f3f3f3f3f;
int n;
ll t, price[maxn];

int main()
{
	cin.tie(0); cout.tie(0);
	cin >> n >> t;
	ll tmin = inf;

	for (reg int i = 0; i < n; ++i)
	{
		cin >> price[i]; tmin = min(tmin, price[i]);
	}
	ll sum = 0, ans = 0;
	int s = 0;
	while (t >= tmin)
	{
		s = sum = 0;
		for(int i=0;i<n;i++)
		{
			if (t - sum >= price[i]) { s++; sum += price[i]; }
		}
		ans += (t / sum)*s;
		t %= sum;
	}
	cout << ans << endl;
	return 0;
}

e:数位DP

#include<bits/stdc++.h>
using namespace std;
//数位DP
#define clr(a,b) memset(a,b,sizeof(a))
#define reg      register
#define il       inline
typedef long long ll;
const int maxn = 200000 + 5;
const int minn = 100;
const int mod  = 998244353;
const ll  inf = 0x3f3f3f3f3f3f3f;
struct Node
{
    ll si,pr;
    Node(){}
    Node(ll si,ll pr):si(si),pr(pr){}
}dp[22][1025];
int digit[21];
int k;
ll ppow[20];
Node dfs(int pos,int sta,bool nozero,bool limit)
{
    if(pos==0){return Node(1,0);}
    if(!limit&&nozero&&dp[pos][sta].si!=-1){return dp[pos][sta];}
    Node ans(0,0);
    Node res;
    for(int i=0;i<=(limit?digit[pos]:9);++i)
    {
        if(__builtin_popcount(sta|(1<<i))>k){continue;}
        if(!nozero&&i==0){res=dfs(pos-1,sta,nozero,limit&&i>=digit[pos]);}
        else             {res=dfs(pos-1,sta|(1<<i),nozero||i>0,limit&&i>=digit[pos]);}
        ans.si=(ans.si+res.si)%mod;
        ans.pr=(ans.pr+res.pr+i*ppow[pos-1]%mod*res.si%mod)%mod;
    }
    if(!limit&&nozero)dp[pos][sta]=ans;
    return ans;
}
ll solve(ll num)
{
    int cnt=0;
    while(num)
    {
        digit[++cnt]=num%10;
        num/=10;
    }
    Node res=dfs(cnt,0,0,1);
    return res.pr;
}
void init()
{
    clr(dp,-1);
    ppow[0]=1;
    for(int i=1;i<=20;++i){ppow[i]=(ppow[i-1]*10)%mod;}
    return ;
}
int main()
{
	cin.tie(0); cout.tie(0);
	ll l,r;
	init();
    cin>>l>>r>>k;
    cout<<(solve(r)-solve(l-1)+mod)%mod<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Dog_dream/article/details/84306962