枚举题意,五十分钟看懂题,十分钟过三道,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)相关推荐

  1. 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这个时候两 ...

  2. Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...

  3. Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...

  4. Educational Codeforces Round 37 (Rated for Div. 2) 1

    Educational Codeforces Round 37 (Rated for Div. 2) A.Water The Garden 题意:Max想给花园浇水.花园可被视为长度为n的花园床,花园 ...

  5. 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, ...

  6. Educational Codeforces Round 114 (Rated for Div. 2) D. The Strongest Build 暴力 + bfs

    传送门 文章目录 题意: 思路: 题意: 你有nnn个装备槽,每个槽里面有cic_ici​个力量加成,对于每个槽只能选一个力量加成,现在给你mmm个力量组合[b1,b2,...,bn][b_1,b_2 ...

  7. Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环

    传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...

  8. 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& ...

  9. Educational Codeforces Round 111 (Rated for Div. 2) E. Stringforces 二分 + 状压dp

    传送门 文章目录 题意: 思路: 题意: 给你一个串,只包含前kkk个字母和???,定义fif_ifi​表示第iii个字母在串中出现的最长连续长度,你现在需要将???替换为前kkk个字母,使得mini ...

  10. 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_ ...

最新文章

  1. PHP类中的__get()和__set函数到底有什么用
  2. Oracle数据库基础知识点汇总
  3. MOSS 2007 User Profile 系列 索引
  4. windows - mysql
  5. mysql 性能分析_十大MySQL性能分析工具汇总!专治MySQL性能瓶颈
  6. 转一个高内存定位的文章
  7. CB Loss:基于有效样本的类别不平衡损失
  8. 喜提 300w 硬核资产!
  9. 单片机led数码管显示c语言,各位大神,如何用C语言实现在数码管上实现1234同时亮...
  10. DirectX修复工具有什么用
  11. Dagger2的使用示例
  12. 人世之厄人性之恶——陈应松《母亲》读后
  13. python3换行符_python的换行符
  14. 基于soot的过程内数据流分析
  15. css解决文字抖动问题
  16. 运动无线蓝牙耳机推荐、运动健身必备的运动耳机
  17. Java实现 LeetCode 756 金字塔转换矩阵(DFS)
  18. python 根号化简_Python 基础
  19. mysql查询条件为不等于某个值时,null 查询不到?
  20. NS2 队列管理机制

热门文章

  1. matlab光线追击,MATLAB在追迹光线计算中的应用
  2. 解决调用wx.downLoadFile下载的文件名乱码(长串英文字符)问题
  3. vue2.0 使用xlsx读取excel文件数据 操作流程 以及文件中特殊日期数据的处理
  4. RMON学习笔记(二)
  5. win10彻底关闭更新
  6. 毕业设计 大数据B站数据分析与可视化 - python 数据分析 大数据
  7. egg项目和DVA项目的目录结构比较
  8. 薄膜温室贵不贵,一亩地温室大棚需要花多少钱?
  9. Android 获取当前设备SIM运营商
  10. kde 崩溃,如何重启 kde plasma 5 桌面