首页 > 其他分享 >CF-933(已更新:B-D)

CF-933(已更新:B-D)

时间:2024-03-12 23:56:16浏览次数:18  
标签:int CF 更新 -- ans 933 now dp define

CF-933

当天晚上舍友在玩剧本杀,不得不说那剧情实在是太狗血了,想不通他们是怎么能玩得那么起劲的 但也不能当作这次发挥不好的借口/_ \

A题最开始没看到数据范围(D也是),B一开始就想到了思路,但调了二十多分钟,甚至因为数组开小了白白多了一次RE……D题才是最难绷的,把题看懂后自己就用的dfs的写法,直到比赛完都没调出来>﹏<

B

贪心,要使每个a[i]都为0,遍历到i时操作后一定有a[i-1]=0,所以a[i]-=a[i-1]*2,a[i+1]-=a[i-1],最后看a[n-1]与a[n-1]是否为0就行

代码

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define db(x) cout<<x<<" "<<endl;
#define _db(a,n) for(int i=1;i<=n;i++) cout<<a[i]<<" ";cout<<endl;
#define mem(a) memset(a,0, sizeof(a))
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define per(i,r,l) for(int i=r;i>=l;i--)
const int N=2e5+5;
int a[N];
void solve(){
	int n,m,k,x,ans=0,sum=0;cin>>n;
	rep(i,1,n){
		cin>>a[i];
	}
	int f=0;
	rep(i,2,n-1){
		a[i]-=a[i-1]*2;
		if(a[i]<0){
			f=1;
			break;
		}
		a[i+1]-=a[i-1];
	}
	if(a[n]!=0||a[n-1]!=0) f=1;
	if(f) cout<<"NO";
	else cout<<"YES";
	cout<<endl;
}
signed main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
	int t;cin>>t;while(t--)
	solve();
	return 0;
}




C

思路很直观:遇到map,pie与mapie都ans++,分别判断就行

代码

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define db(x) cout<<x<<" "<<endl;
#define _db(a,n) for(int i=1;i<=n;i++) cout<<a[i]<<" ";cout<<endl;
#define mem(a) memset(a,0, sizeof(a))
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define per(i,r,l) for(int i=r;i>=l;i--)
//const int N=2e5+5;
//int a[N];
void solve(){
	int n;cin>>n;
	string s;cin>>s;
	int ans=0;
	rep(i,0,n-1){
		if(s[i]=='m'&&s[i+1]=='a'&&s[i+2]=='p'){
			if(s[i+3]=='i'&&s[i+4]=='e'){
				i+=4;	
			}
			else{
				i+=2;
			}
			ans++;
		}
		if(s[i]=='p'&&s[i+1]=='i'&&s[i+2]=='e'){
			ans++;
			i+=2;
		}
	}
	cout<<ans<<endl;
}
signed main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
	int t;cin>>t;while(t--)
	solve();
	return 0;
}

 

D

之前做过二分图染色的题,看到这题就往dfs的方向写了(现在想来是题面也看错了,以为只输出一种可能……)……然后赛时就在这题上吊死了……说到底还是自己技巧还有思维都还不行啊(ノへ ̄、)

分析

我目前掌握的解法有bfs和dp(其实思路都一样),bfs的话就是用set存下每个可能的玩家序号,对每个指令都遍历已存下的玩家序号进行拓展(就像迷宫,往可能的所有方向拓展),dp的话,就是对每条指令都对所有n个人中的可能的人作转移,因为要转移的状态只有可能与不可能,即1与0两种,可以用位运算或实现,注意因为是从可能的值转移过来,顺逆时针的移动公式要互换

操作

对于这种顺逆时针移动,数字范围还是[1,n]的,可以映射到[0,n-1],也就是最开始要x--,顺时针移动就是now=(now+r)%n,逆时针是now=(now+n-r)%n,最后遍历输出set里的结果都要加一,

代码

bfs

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define db(x) cout<<x<<" "<<endl;
#define _db(a,n) for(int i=1;i<=n;i++) cout<<a[i]<<" ";cout<<endl;
#define mem(a) memset(a,0, sizeof(a))
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define per(i,r,l) for(int i=r;i>=l;i--)
const int N=1e3+5;
void solve(){
	int n,m,x;cin>>n>>m>>x;
    int r;char c;
    set<int>ans,tmp;
    x--;
    ans.insert(x);
    rep(i,1,m){
        cin>>r>>c;
        for(auto now:ans){
            if(c=='0'){
                tmp.insert((now+r)%n);
            }
            else if(c=='1'){
                tmp.insert((now+n-r)%n);
            }
            else{
                tmp.insert((now+r)%n);
                tmp.insert((now+n-r)%n);
            }
        }
        ans.clear();
        for(auto now :tmp) ans.insert(now);
        tmp.clear();
    }
    cout<<ans.size()<<endl;
    for(auto it:ans) cout <<it+1<<" ";
    cout<<endl;
}
signed main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
	int t;cin>>t;while(t--)
	solve();
	return 0;
}

dp

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
#define db(x) cout<<x<<" "<<endl;
#define _db(a,n) for(int i=1;i<=n;i++) cout<<a[i]<<" ";cout<<endl;
#define mem(a) memset(a,0, sizeof(a))
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define per(i,r,l) for(int i=r;i>=l;i--)
void solve(){
	int n,m,x;cin>>n>>m>>x;
	x--;
	vector<vector<int>>dp(m+1,vector<int>(n));//之前没用vector,用的普通数组,这里是用的memset,结果居然直接t了(⊙﹏⊙)
	dp[0][x]=1;
	int r;char c;
	rep(i,1,m){
		cin>>r>>c;
		if(c=='0'){
			rep(j,0,n-1){
				dp[i][j]|=dp[i-1][(j-r+n)%n];
			}
		}
		else if(c=='1'){
			rep(j,0,n-1){
				dp[i][j]|=dp[i-1][(j+r)%n];
			}
		}
		else{
			rep(j,0,n-1){
				dp[i][j]|=dp[i-1][(j+r)%n];
				dp[i][j]|=dp[i-1][(j-r+n)%n];
			}
		}
	}
	int sum=0;
    sum=count(dp[m].begin(),dp[m].end(),1);//学到了
//	rep(i,0,n-1){
//		if(dp[m][i]) sum++;
//	}
	cout<<sum<<endl;
	rep(i,0,n-1){
		if(dp[m][i]) cout<<i+1<<" ";
	}
	cout<<endl;
}
signed main()
{
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
	int t;cin>>t;while(t--)
	solve();
	return 0;
}



标签:int,CF,更新,--,ans,933,now,dp,define
From: https://www.cnblogs.com/mono-4/p/18069668

相关文章

  • Codeforces Round 933 (Div. 3)
    CodeforcesRound933(Div.3)AA-RudolfandtheTicket暴力查看代码voidsolve(){intn,m,k;cin>>n>>m>>k;vector<int>b(n),c(m);for(inti=0;i<n;++i)cin>>b[i];for(inti=0;i<m;++i)cin>>c[i];......
  • Codeforces Round 933 (Div. 3)
    CodeforcesRound933(Div.3)A-RudolfandtheTicket解题思路:暴力。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;usingpii=pair<ll,ll>;#definefifirst#definesesecondusingpiii=pair<ll,pair<ll,ll>&......
  • CF343E Pumping Stations 题解
    题意:给定一张无向带权图,求一个排列\(p\)使得\(\sum_{i=2}^n\operatorname{mincut}(p_{i-1},p_i)\)最大。输出一种方案。\(n\le200,m\le1000\)。思路:首先这种最小割相关的肯定是最小割树,建树需要\(O(n^3m)\),由于\(Dinic\)实际上跑不满,所以时间完全够。然后考......
  • CF 1842 H
    给自己的博客引流:3.15解除密码这个是这篇中最认真写的题。CF1842H妙妙题!!!太牛了。首先,\(x_i\in[0,1]\),可以有两种:\(x_i<0.5,x_i\ge0.5\)。因为在\([0,1]\)中抽出\(0.5\)的几率为\(0\),就可以分成\(x_i<0.5,x_i>0.5\)。如果这样分,那么\(x_i,x_j<0.5\impliesx_i+x......
  • Dynamo2.5都更新了啥?
    Revit2021正式版更新了,刚登陆了自己的账户,安装完成,就迫不及待的试用了下,其他的我就不多聊了,咱们来看看随Revit2021一起更新的Dynamo2.5都带来了哪些新东西。一、DynamoPrimer多语言版本更新为了促进Dynamo全球化推广,DynamoPrimer现在添加了更多的语言版本,这其中就包含简体......
  • CF1929E. Sasha and the Happy Tree Cutting
    Problem-1929E-Codeforces无意看一眼标签是\(dp\)就一直朝树形状压\(dp\)的方向想了一年,发现不是树形\(dp\)设\(dp_S\)为完成集合\(S\)内的限制所需要的最少边数把每一对顶点的路径上每条边的值都状压,表示添加这条边可以实现的限制有哪些,记为\(b_i\)因......
  • 从CF1702E看二分图判断的两种方法
    https://www.luogu.com.cn/problem/CF1702E转化题意把所有数连边,判断是否为二分图。染色法voidsolve(){#definetestsintn;std::cin>>n;std::map<int,std::vector<int>>edge;std::vector<bool>used(n+1);boolok(true);......
  • Codeforces Round 933 (Div. 3)
    A.RudolfandtheTicket#include<bits/stdc++.h>usingnamespacestd;usingi32=int32_t;usingi64=longlong;usingldb=longdouble;#defineinti64usingvi=vector<int>;usingpii=pair<int,int>;constintinf=1e9;co......
  • 「CF78C」 Beaver Game
    题意一场博弈游戏,有\(n\)个长度为\(m\)木棍。两人轮流进行操作,每次操作可选择一根木棒把它进行任意等分,使得分完后每段长度都小于\(k\)。最终无法操作的人判负。两人都执行最优操作,先手名为Timur,后手名为Marsel,输出最终赢家。分析可以分为两种情况:\(n\)为偶数,此时无......
  • C#/.NET/.NET Core拾遗补漏合集(持续更新)
    前言在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NETCore拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。GitHub开源地址https://github.com/Y......