Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises)
枚举题意,五十分钟看懂题,十分钟过三道,tarjan还写挂了,大型翻车现场。
A、你有n卢布,要把卢布换成美元和欧元,一美元和一欧元对应的卢布数是给定的
美元有几种面值:1、2、5、10、20、50、100
欧元有几种面值:5、10、20、50、100、200
你可以兑换任意数量的欧元和美元,但你兑换的美元和欧元必须可以用上面的纸币表示出来,问你最后手里最少剩下多少卢布
美元只要能换就换,因为1美元可以表示任何数字,欧元只能5欧5欧地换,枚举一下换成美元的张数即可
代码:
#include <bits/stdc++.h> #define int long long #define sc(a) scanf("%lld",&a) #define scc(a,b) scanf("%lld %lld",&a,&b) #define sccc(a,b,c) scanf("%lld %lld %lld",&a,&b,&c) #define schar(a) scanf("%c",&a) #define pr(a) printf("%lld",a) #define fo(i,a,b) for(int i=a;i<b;++i) #define re(i,a,b) for(int i=a;i<=b;++i) #define rfo(i,a,b) for(int i=a;i>b;--i) #define rre(i,a,b) for(int i=a;i>=b;--i) #define prn() printf("\n") #define prs() printf(" ") #define mkp make_pair #define pii pair<int,int> #define pub(a) push_back(a) #define pob() pop_back() #define puf(a) push_front(a) #define pof() pop_front() #define fst first #define snd second #define frt front() #define bak back() #define mem0(a) memset(a,0,sizeof(a)) #define memmx(a) memset(a,0x3f3f,sizeof(a)) #define memmn(a) memset(a,-0x3f3f,sizeof(a)) #define debug #define db double #define yyes cout<<"YES"<<endl; #define nno cout<<"NO"<<endl; using namespace std; typedef vector<int> vei; typedef vector<pii> vep; typedef map<int,int> mpii; typedef map<char,int> mpci; typedef map<string,int> mpsi; typedef deque<int> deqi; typedef deque<char> deqc; typedef priority_queue<int> mxpq; typedef priority_queue<int,vector<int>,greater<int> > mnpq; typedef priority_queue<pii> mxpqii; typedef priority_queue<pii,vector<pii>,greater<pii> > mnpqii; const int maxn=500005; const int inf=0x3f3f3f3f3f3f3f3f; const int MOD=100000007; const db eps=1e-10; int qpow(int a,int b){int tmp=a%MOD,ans=1;while(b){if(b&1){ans*=tmp,ans%=MOD;}tmp*=tmp,tmp%=MOD,b>>=1;}return ans;} int lowbit(int x){return x&-x;} int max(int a,int b){return a>b?a:b;} int min(int a,int b){return a<b?a:b;} int mmax(int a,int b,int c){return max(a,max(b,c));} int mmin(int a,int b,int c){return min(a,min(b,c));} void mod(int &a){a+=MOD;a%=MOD;} bool chk(int now){} int half(int l,int r){while(l<=r){int m=(l+r)/2;if(chk(m))r=m-1;else l=m+1;}return l;} int ll(int p){return p<<1;} int rr(int p){return p<<1|1;} int mm(int l,int r){return (l+r)/2;} int lg(int x){if(x==0) return 1;return (int)log2(x)+1;} bool smleql(db a,db b){if(a<b||fabs(a-b)<=eps)return true;return false;} db len(db a,db b,db c,db d){return sqrt((a-c)*(a-c)+(b-d)*(b-d));} bool isp(int x){if(x==1)return false;if(x==2)return true;for(int i=2;i*i<=x;++i)if(x%i==0)return false;return true;}int n,d,e; int ans=inf;signed main(){ios_base::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n>>d>>e;int k=0;while(1){if(k*d>n) break;int tmp=n;tmp-=k*d;int ou=tmp/e;ou-=ou%5;tmp-=ou*e;ans=min(ans,tmp);k++;}cout<<ans;return 0; }
B、b个男孩和g个女孩吃饭,一共来n个人,现在有n+1张桌子,第i张桌子可以坐i个男生和n-i个女生
问你最少需要多少张桌子才能使得不管来几个男生女生都能坐
SB题意,看半天没搞懂,两边扫一下就完事了,分别表示男生全来和女生全来的情况
代码:
#include <bits/stdc++.h> #define int long long #define sc(a) scanf("%lld",&a) #define scc(a,b) scanf("%lld %lld",&a,&b) #define sccc(a,b,c) scanf("%lld %lld %lld",&a,&b,&c) #define schar(a) scanf("%c",&a) #define pr(a) printf("%lld",a) #define fo(i,a,b) for(int i=a;i<b;++i) #define re(i,a,b) for(int i=a;i<=b;++i) #define rfo(i,a,b) for(int i=a;i>b;--i) #define rre(i,a,b) for(int i=a;i>=b;--i) #define prn() printf("\n") #define prs() printf(" ") #define mkp make_pair #define pii pair<int,int> #define pub(a) push_back(a) #define pob() pop_back() #define puf(a) push_front(a) #define pof() pop_front() #define fst first #define snd second #define frt front() #define bak back() #define mem0(a) memset(a,0,sizeof(a)) #define memmx(a) memset(a,0x3f3f,sizeof(a)) #define memmn(a) memset(a,-0x3f3f,sizeof(a)) #define debug #define db double #define yyes cout<<"YES"<<endl; #define nno cout<<"NO"<<endl; using namespace std; typedef vector<int> vei; typedef vector<pii> vep; typedef map<int,int> mpii; typedef map<char,int> mpci; typedef map<string,int> mpsi; typedef deque<int> deqi; typedef deque<char> deqc; typedef priority_queue<int> mxpq; typedef priority_queue<int,vector<int>,greater<int> > mnpq; typedef priority_queue<pii> mxpqii; typedef priority_queue<pii,vector<pii>,greater<pii> > mnpqii; const int maxn=500005; const int inf=0x3f3f3f3f3f3f3f3f; const int MOD=100000007; const db eps=1e-10; int qpow(int a,int b){int tmp=a%MOD,ans=1;while(b){if(b&1){ans*=tmp,ans%=MOD;}tmp*=tmp,tmp%=MOD,b>>=1;}return ans;} int lowbit(int x){return x&-x;} int max(int a,int b){return a>b?a:b;} int min(int a,int b){return a<b?a:b;} int mmax(int a,int b,int c){return max(a,max(b,c));} int mmin(int a,int b,int c){return min(a,min(b,c));} void mod(int &a){a+=MOD;a%=MOD;} bool chk(int now){} int half(int l,int r){while(l<=r){int m=(l+r)/2;if(chk(m))r=m-1;else l=m+1;}return l;} int ll(int p){return p<<1;} int rr(int p){return p<<1|1;} int mm(int l,int r){return (l+r)/2;} int lg(int x){if(x==0) return 1;return (int)log2(x)+1;} bool smleql(db a,db b){if(a<b||fabs(a-b)<=eps)return true;return false;} db len(db a,db b,db c,db d){return sqrt((a-c)*(a-c)+(b-d)*(b-d));} bool isp(int x){if(x==1)return false;if(x==2)return true;for(int i=2;i*i<=x;++i)if(x%i==0)return false;return true;}int b,g,n; int bb[maxn],gg[maxn];signed main(){ios_base::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>b>>g>>n;re(i,0,n) bb[i]=i,gg[i]=n-i;int x=min(n,b);int y=n-x;int l;re(i,0,n) if(bb[i]==x&&gg[i]==y) {l=i;break;}y=min(n,g);x=n-y;int r;re(i,0,n) if(bb[i]==x&&gg[i]==y) {r=i;break;}cout<<abs(r-l)+1;return 0; }
C、给你一堆括号序列,问你能否通过交换一堆括号使得其编程有序,也可以不交换
上个栈,最后栈里只剩下一个左括号并且过程中有一个右括号未匹配就YES,直接匹配也输出YES,否则NO
代码:
#include <bits/stdc++.h> #define int long long #define sc(a) scanf("%lld",&a) #define scc(a,b) scanf("%lld %lld",&a,&b) #define sccc(a,b,c) scanf("%lld %lld %lld",&a,&b,&c) #define schar(a) scanf("%c",&a) #define pr(a) printf("%lld",a) #define fo(i,a,b) for(int i=a;i<b;++i) #define re(i,a,b) for(int i=a;i<=b;++i) #define rfo(i,a,b) for(int i=a;i>b;--i) #define rre(i,a,b) for(int i=a;i>=b;--i) #define prn() printf("\n") #define prs() printf(" ") #define mkp make_pair #define pii pair<int,int> #define pub(a) push_back(a) #define pob() pop_back() #define puf(a) push_front(a) #define pof() pop_front() #define fst first #define snd second #define frt front() #define bak back() #define mem0(a) memset(a,0,sizeof(a)) #define memmx(a) memset(a,0x3f3f,sizeof(a)) #define memmn(a) memset(a,-0x3f3f,sizeof(a)) #define debug #define db double #define yyes cout<<"YES"<<endl; #define nno cout<<"NO"<<endl; using namespace std; typedef vector<int> vei; typedef vector<pii> vep; typedef map<int,int> mpii; typedef map<char,int> mpci; typedef map<string,int> mpsi; typedef deque<int> deqi; typedef deque<char> deqc; typedef priority_queue<int> mxpq; typedef priority_queue<int,vector<int>,greater<int> > mnpq; typedef priority_queue<pii> mxpqii; typedef priority_queue<pii,vector<pii>,greater<pii> > mnpqii; const int maxn=500005; const int inf=0x3f3f3f3f3f3f3f3f; const int MOD=100000007; const db eps=1e-10; int qpow(int a,int b){int tmp=a%MOD,ans=1;while(b){if(b&1){ans*=tmp,ans%=MOD;}tmp*=tmp,tmp%=MOD,b>>=1;}return ans;} int lowbit(int x){return x&-x;} int max(int a,int b){return a>b?a:b;} int min(int a,int b){return a<b?a:b;} int mmax(int a,int b,int c){return max(a,max(b,c));} int mmin(int a,int b,int c){return min(a,min(b,c));} void mod(int &a){a+=MOD;a%=MOD;} bool chk(int now){} int half(int l,int r){while(l<=r){int m=(l+r)/2;if(chk(m))r=m-1;else l=m+1;}return l;} int ll(int p){return p<<1;} int rr(int p){return p<<1|1;} int mm(int l,int r){return (l+r)/2;} int lg(int x){if(x==0) return 1;return (int)log2(x)+1;} bool smleql(db a,db b){if(a<b||fabs(a-b)<=eps)return true;return false;} db len(db a,db b,db c,db d){return sqrt((a-c)*(a-c)+(b-d)*(b-d));} bool isp(int x){if(x==1)return false;if(x==2)return true;for(int i=2;i*i<=x;++i)if(x%i==0)return false;return true;}int n; string s; stack<char> st; int l=0;signed main(){ios_base::sync_with_stdio(0);cin.tie(0),cout.tie(0);cin>>n>>s;fo(i,0,n){if(s[i]=='('){st.push('(');}else{if(st.empty()) l++;else st.pop();}}if((l==0&&st.empty())||(l==1&&st.size()==1))cout<<"Yes"<<endl;else cout<<"No"<<endl;return 0; }
D、看到standing里面很多写dp的,完全看不懂……
一开始大爆搜,搜出所有可能路径,路径上每个点加一,如果有一个点每条路径都经过,那么输出1
比赛时rhy糊了个算法,把所有可以到达终点的路径打上标记,对这些标记建立四联通的无向图,跑一遍tarjan
不能到达答案为0,如果有割点,答案为1,否则为2
tarjan要注意一个问题,起点不能做为割点
打标记也要注意一个问题,只有抵达终点的路径才打标记,否则会错误判断割点。
这种样例就会出锅:
4 4
....
....
.#..
.#..
左下角虽然有个割点,但是完全起不到作用。此外dfs的时候还得注意或运算短路的性质,免得搜完向下的路径就不搜向右的路径了。
代码:
#include <bits/stdc++.h> #define int long long #define sc(a) scanf("%lld",&a) #define scc(a,b) scanf("%lld %lld",&a,&b) #define sccc(a,b,c) scanf("%lld %lld %lld",&a,&b,&c) #define schar(a) scanf("%c",&a) #define pr(a) printf("%lld",a) #define fo(i,a,b) for(int i=a;i<b;++i) #define re(i,a,b) for(int i=a;i<=b;++i) #define rfo(i,a,b) for(int i=a;i>b;--i) #define rre(i,a,b) for(int i=a;i>=b;--i) #define prn() printf("\n") #define prs() printf(" ") #define mkp make_pair #define pii pair<int,int> #define pub(a) push_back(a) #define pob() pop_back() #define puf(a) push_front(a) #define pof() pop_front() #define fst first #define snd second #define frt front() #define bak back() #define mem0(a) memset(a,0,sizeof(a)) #define memmx(a) memset(a,0x3f3f,sizeof(a)) #define memmn(a) memset(a,-0x3f3f,sizeof(a)) #define debug #define db double #define yyes cout<<"YES"<<endl; #define nno cout<<"NO"<<endl; using namespace std; typedef vector<int> vei; typedef vector<pii> vep; typedef map<int,int> mpii; typedef map<char,int> mpci; typedef map<string,int> mpsi; typedef deque<int> deqi; typedef deque<char> deqc; typedef priority_queue<int> mxpq; typedef priority_queue<int,vector<int>,greater<int> > mnpq; typedef priority_queue<pii> mxpqii; typedef priority_queue<pii,vector<pii>,greater<pii> > mnpqii; const int maxn=1000005; const int inf=0x3f3f3f3f3f3f3f3f; const int MOD=100000007; const db eps=1e-10; int qpow(int a,int b){int tmp=a%MOD,ans=1;while(b){if(b&1){ans*=tmp,ans%=MOD;}tmp*=tmp,tmp%=MOD,b>>=1;}return ans;} int lowbit(int x){return x&-x;} int max(int a,int b){return a>b?a:b;} int min(int a,int b){return a<b?a:b;} int mmax(int a,int b,int c){return max(a,max(b,c));} int mmin(int a,int b,int c){return min(a,min(b,c));} void mod(int &a){a+=MOD;a%=MOD;} bool chk(int now){} int half(int l,int r){while(l<=r){int m=(l+r)/2;if(chk(m))r=m-1;else l=m+1;}return l;} int ll(int p){return p<<1;} int rr(int p){return p<<1|1;} int mm(int l,int r){return (l+r)/2;} int lg(int x){if(x==0) return 1;return (int)log2(x)+1;} bool smleql(db a,db b){if(a<b||fabs(a-b)<=eps)return true;return false;} db len(db a,db b,db c,db d){return sqrt((a-c)*(a-c)+(b-d)*(b-d));} bool isp(int x){if(x==1)return false;if(x==2)return true;for(int i=2;i*i<=x;++i)if(x%i==0)return false;return true;}int n,m,timer=0,cut=0; bool can=0; char rhy[maxn]; vector<char> s[maxn]; vei dfn[maxn],low[maxn]; int a[4]={1,0,-1,0}; int b[4]={0,1,0,-1};bool ok(int i,int j){if(i<0||i>=n||j<0||j>=m) return 0;if(s[i][j]=='#') return 0;return 1; }bool dfs(int i,int j){if(i<0||i>=n||j<0||j>=m) return 0;if(s[i][j]=='#') return 0;if(s[i][j]=='0') return 1;if(i==n-1&&j==m-1){can=1;s[i][j]='0';return 1;}bool now=0;now|=dfs(i+1,j);now|=dfs(i,j+1);if(now){ // cout<<i<<' '<<j<<endl;s[i][j]='0';if(ok(i+1,j))s[i+1][j]='0';if(ok(i,j+1))s[i][j+1]='0';return 1;}else{s[i][j]='#';return 0;} }void tarjan(int x,int y){dfn[x][y]=low[x][y]=++timer;fo(i,0,4){int dx=x+a[i],dy=y+b[i];if(dx<0||dx>=n||dy<0||dy>=m||s[dx][dy]!='0')continue;if(!dfn[dx][dy]){tarjan(dx,dy);low[x][y]=min(low[x][y],low[dx][dy]);if(low[dx][dy]>=dfn[x][y]&&(x!=0||y!=0)){ // cout<<x<<' '<<y<<endl;cut++;}}else{low[x][y]=min(low[x][y],dfn[dx][dy]);}} }signed main(){scc(n,m);fo(i,0,n){scanf("%s",rhy);fo(j,0,m)dfn[i].pub(0),low[i].pub(0),s[i].pub(rhy[j]);}dfs(0,0);s[0][0]=s[n-1][m-1]='0'; // fo(i,0,n) fo(j,0,m) cout<<s[i][j]<<(j==m-1?'\n':' ');if(!can) cout<<0;else{tarjan(0,0);if(!cut) cout<<2;else cout<<1;}return 0; } /* 2 4 .... ..#.3 3 .#. #.. ...4 4 .... .... .#.. .#.. */
转载于:https://www.cnblogs.com/oneman233/p/11465061.html
Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises)相关推荐
- Educational Codeforces Round 90 (Rated for Div. 2)(A, B, C, D, E)
Educational Codeforces Round 90 (Rated for Div. 2) Donut Shops 思路 分三种情况: a==c/ba == c / ba==c/b这个时候两 ...
- Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...
- Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...
- Educational Codeforces Round 37 (Rated for Div. 2) 1
Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...
- Educational Codeforces Round 89 (Rated for Div. 2)(A, B, C, D)
Educational Codeforces Round 89 (Rated for Div. 2) A. Shovels and Swords 思路 题意非常简单,就是得到最多的物品嘛,我们假定a, ...
- Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs
传送门 文章目录 题意: 思路: 题意: 你有nnn个装备槽,每个槽里面有cic_ici个力量加成,对于每个槽只能选一个力量加成,现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2 ...
- Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环
传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...
- Educational Codeforces Round 111 (Rated for Div. 2) D. Excellent Arrays 组合数学
传送门 文章目录 题意: 思路: 题意: 给你一个数组aia_iai,定义一个数组是好的当且仅当对于所有iii都有ai!=ia_i!=iai!=i.定义f(a)f(a)f(a)表示数组aaa中i& ...
- Educational Codeforces Round 111 (Rated for Div. 2) E. Stringforces 二分 + 状压dp
传送门 文章目录 题意: 思路: 题意: 给你一个串,只包含前kkk个字母和???,定义fif_ifi表示第iii个字母在串中出现的最长连续长度,你现在需要将???替换为前kkk个字母,使得mini ...
- Educational Codeforces Round 75 (Rated for Div. 2) E2. Voting (Hard Version) 贪心
传送门 文章目录 题意: 思路: 题意: n≤2e5,m≤n,p≤1e9n\le2e5,m\le n,p\le 1e9n≤2e5,m≤n,p≤1e9 思路: 首先需要发现一些性质,假设preipre_ ...
最新文章
- PHP类中的__get()和__set函数到底有什么用
- Oracle数据库基础知识点汇总
- MOSS 2007 User Profile 系列 索引
- windows - mysql
- mysql 性能分析_十大MySQL性能分析工具汇总!专治MySQL性能瓶颈
- 转一个高内存定位的文章
- CB Loss:基于有效样本的类别不平衡损失
- 喜提 300w 硬核资产!
- 单片机led数码管显示c语言,各位大神,如何用C语言实现在数码管上实现1234同时亮...
- DirectX修复工具有什么用
- Dagger2的使用示例
- 人世之厄人性之恶——陈应松《母亲》读后
- python3换行符_python的换行符
- 基于soot的过程内数据流分析
- css解决文字抖动问题
- 运动无线蓝牙耳机推荐、运动健身必备的运动耳机
- Java实现 LeetCode 756 金字塔转换矩阵(DFS)
- python 根号化简_Python 基础
- mysql查询条件为不等于某个值时,null 查询不到?
- NS2 队列管理机制