Codeforces Round #441 (Div. 1, by Moscow Team Olympiad)
来源:互联网 发布:unity3d和3dmax区别 编辑:程序博客网 时间:2024/05/16 08:51
A Classroom Watch
显然sum of digit 不会超过9*9 暴力枚举
#include<bits/stdc++.h> using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Fork(i,k,n) for(int i=k;i<=n;i++)#define ForkD(i,k,n) for(int i=n;i>=k;i--)#define Rep(i,n) for(int i=0;i<n;i++)#define ForD(i,n) for(int i=n;i;i--)#define RepD(i,n) for(int i=n;i>=0;i--)#define Forp(x) for(int p=pre[x];p;p=next[p])#define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (o<<1)#define Rson ((o<<1)+1)#define MEM(a) memset(a,0,sizeof(a));#define MEMI(a) memset(a,0x3f,sizeof(a));#define MEMi(a) memset(a,128,sizeof(a));#define MEMx(a,b) memset(a,b,sizeof(a));#define INF (0x3f3f3f3f)#define F (1000000007)#define pb push_back#define mp make_pair#define fi first#define se second#define vi vector<int> #define pi pair<int,int>#define SI(a) ((a).size())#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;#define PRi2D(a,n,m) For(i,n) { \ For(j,m-1) cout<<a[i][j]<<' ';\ cout<<a[i][m]<<endl; \ } #pragma comment(linker, "/STACK:102400000,102400000")#define ALL(x) (x).begin(),(x).end()#define gmax(a,b) a=max(a,b);#define gmin(a,b) a=min(a,b);typedef long long ll;typedef long double ld;typedef unsigned long long ull;ll mul(ll a,ll b){return (a*b)%F;}ll add(ll a,ll b){return (a+b)%F;}ll sub(ll a,ll b){return ((a-b)%F+F)%F;}void upd(ll &a,ll b){a=(a%F+b%F)%F;}inline int read(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();} while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();} return x*f;} int main(){// freopen("A.in","r",stdin);// freopen(".out","w",stdout); int n=read(); vi v; Fork(i,max(n-1000,1),n) { ll p=i,q=0; while(p) q+=p%10,p/=10; if (q+i==n) v.pb(i); } sort(ALL(v)); cout<<SI(v)<<endl; Rep(i,SI(v)) cout<<v[i]<<endl; return 0;}
B Sorting the Coins
冒泡排序每次都能冒泡一个数
#include<bits/stdc++.h> using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Fork(i,k,n) for(int i=k;i<=n;i++)#define ForkD(i,k,n) for(int i=n;i>=k;i--)#define Rep(i,n) for(int i=0;i<n;i++)#define ForD(i,n) for(int i=n;i;i--)#define RepD(i,n) for(int i=n;i>=0;i--)#define Forp(x) for(int p=pre[x];p;p=next[p])#define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (o<<1)#define Rson ((o<<1)+1)#define MEM(a) memset(a,0,sizeof(a));#define MEMI(a) memset(a,0x3f,sizeof(a));#define MEMi(a) memset(a,128,sizeof(a));#define MEMx(a,b) memset(a,b,sizeof(a));#define INF (0x3f3f3f3f)#define F (1000000007)#define pb push_back#define mp make_pair#define fi first#define se second#define vi vector<int> #define pi pair<int,int>#define SI(a) ((a).size())#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;#define PRi2D(a,n,m) For(i,n) { \ For(j,m-1) cout<<a[i][j]<<' ';\ cout<<a[i][m]<<endl; \ } #pragma comment(linker, "/STACK:102400000,102400000")#define ALL(x) (x).begin(),(x).end()#define gmax(a,b) a=max(a,b);#define gmin(a,b) a=min(a,b);typedef long long ll;typedef long double ld;typedef unsigned long long ull;ll mul(ll a,ll b){return (a*b)%F;}ll add(ll a,ll b){return (a+b)%F;}ll sub(ll a,ll b){return ((a-b)%F+F)%F;}void upd(ll &a,ll b){a=(a%F+b%F)%F;}inline int read(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();} while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();} return x*f;} ll a[312345];int main(){ freopen("B.in","r",stdin);// freopen(".out","w",stdout); int n=read(); MEM(a) putchar('1'); int l=n+1,r=n; For(i,n) { int p=read(); gmin(l,p) while(a[r]) --r; cout<<' '<<r-l+1-i; } return 0;}
C National Property
2-sat 模型很明显了
#include<bits/stdc++.h> using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Fork(i,k,n) for(int i=k;i<=n;i++)#define ForkD(i,k,n) for(int i=n;i>=k;i--)#define Rep(i,n) for(int i=0;i<n;i++)#define ForD(i,n) for(int i=n;i;i--)#define RepD(i,n) for(int i=n;i>=0;i--)#define Forp(x) for(int p=pre[x];p;p=next[p])#define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (o<<1)#define Rson ((o<<1)+1)#define MEM(a) memset(a,0,sizeof(a));#define MEMI(a) memset(a,0x3f,sizeof(a));#define MEMi(a) memset(a,128,sizeof(a));#define MEMx(a,b) memset(a,b,sizeof(a));#define INF (0x3f3f3f3f)#define F (1000000007)#define pb push_back#define mp make_pair#define fi first#define se second#define vi vector<int> #define pi pair<int,int>#define SI(a) ((a).size())#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;#define PRi2D(a,n,m) For(i,n) { \ For(j,m-1) cout<<a[i][j]<<' ';\ cout<<a[i][m]<<endl; \ } #pragma comment(linker, "/STACK:102400000,102400000")#define ALL(x) (x).begin(),(x).end()#define gmax(a,b) a=max(a,b);#define gmin(a,b) a=min(a,b);typedef long long ll;typedef long double ld;typedef unsigned long long ull;ll mul(ll a,ll b){return (a*b)%F;}ll add(ll a,ll b){return (a+b)%F;}ll sub(ll a,ll b){return ((a-b)%F+F)%F;}void upd(ll &a,ll b){a=(a%F+b%F)%F;}inline int read(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();} while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();} return x*f;} #define MAXN (200000+10)int cnt[MAXN]={},l[MAXN]={},r[MAXN]={};int a[MAXN]={};bool fl=1;int cap[MAXN]={};class SSC { public: int n,b[MAXN],num[MAXN]; vector<int> G[MAXN],rG[MAXN]; //ͼ£¬·´ÏòºóµÄͼ vector<int> vs; //ºóÐø±éÀú¶¥µãÁбí void mem(int _n) { n=_n; MEM(num) For(i,n) G[i].clear(),rG[i].clear(); vs.clear(); } void addedge(int u,int v) { G[u].push_back(v); rG[v].push_back(u); } void dfs(int x) { b[x]=1; Rep(i,G[x].size()) { if (!b[G[x][i]]) dfs(G[x][i]); } vs.push_back(x); } void rdfs(int x,int k) { b[x]=1;num[x]=k; Rep(i,rG[x].size()) { if (!b[rG[x][i]]) rdfs(rG[x][i],k); } } int ssc() { MEM(b) For(i,n) if (!b[i]) dfs(i); MEM(b) int k=0; RepD(i,vs.size()-1) if (!b[vs[i]]) rdfs(vs[i],++k); return k; } }; class Two_Sat //(a||!b)&&(c||b)&&...{public: int n; SSC S; //1..n void mem(int _n) { n=_n; S.mem(2*n); } int no(int u){if (u>0) return u;else return n-u; } void addedge(int u,int v) //((b¡Å ~c) : b -c { S.addedge(no(-u),no(v)); S.addedge(no(-v),no(u)); } bool work(vi &v) { S.ssc(); For(i,n) { if (S.num[i]==S.num[i+n]) return 0; else if (S.num[i]>S.num[i+n]) v.pb(i); } return 1; }}S;void check(int l,int r){ while(a[l]&&a[r]) { if (a[l]!=a[r]) { if (a[l]<a[r]) S.addedge(-a[r],a[l]); if (a[l]>a[r]) S.addedge(a[l],a[l]),S.addedge(-a[r],-a[r]); return; } ++l,++r; } if (a[l]&&!a[r]) { fl=0;return ; }}int main(){// freopen("C.in","r",stdin);// freopen(".out","w",stdout); int n=read(),m=read(); S.mem(m); l[0]=r[0]=0; For(i,n) { cnt[i]=read(); l[i]=r[i-1]+1; r[i]=l[i]; For(j,cnt[i]) { a[r[i]++]=read(); } a[r[i]]=0; } For(i,n-1) { check(l[i],l[i+1]); } vi v; if (!fl|| !S.work(v)) puts("No"); else { puts("Yes"); int sz=SI(v); printf("%d\n",sz); if (sz) { printf("%d\n",v[0]); For(i,sz-1) printf(" %d",v[i]); } } return 0;}
D High Cry
给一个数列,问有多少子串满足or和>max值
枚举左端点,or值最多有Log(Ai)个,可以暴力在每段2分。
E Delivery Club
F Royal Questions
10w点2分图带权匹配,注意某一边点度数均为2。
题目可以转化为,最大环加外向树生成树,类似MST。
#include<bits/stdc++.h> using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Fork(i,k,n) for(int i=k;i<=n;i++)#define ForkD(i,k,n) for(int i=n;i>=k;i--)#define Rep(i,n) for(int i=0;i<n;i++)#define ForD(i,n) for(int i=n;i;i--)#define RepD(i,n) for(int i=n;i>=0;i--)#define Forp(x) for(int p=pre[x];p;p=next[p])#define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (o<<1)#define Rson ((o<<1)+1)#define MEM(a) memset(a,0,sizeof(a));#define MEMI(a) memset(a,0x3f,sizeof(a));#define MEMi(a) memset(a,128,sizeof(a));#define MEMx(a,b) memset(a,b,sizeof(a));#define INF (0x3f3f3f3f)#define F (1000000007)#define pb push_back#define mp make_pair#define fi first#define se second#define vi vector<int> #define pi pair<int,int>#define SI(a) ((a).size())#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;#define PRi2D(a,n,m) For(i,n) { \ For(j,m-1) cout<<a[i][j]<<' ';\ cout<<a[i][m]<<endl; \ } #pragma comment(linker, "/STACK:102400000,102400000")#define ALL(x) (x).begin(),(x).end()#define gmax(a,b) a=max(a,b);#define gmin(a,b) a=min(a,b);typedef long long ll;typedef long double ld;typedef unsigned long long ull;ll mul(ll a,ll b){return (a*b)%F;}ll add(ll a,ll b){return (a+b)%F;}ll sub(ll a,ll b){return ((a-b)%F+F)%F;}void upd(ll &a,ll b){a=(a%F+b%F)%F;}inline int read(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();} while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();} return x*f;} #define MAXN (200100)int fa[MAXN],s[MAXN];int getfa(int x) {return (fa[x]==x)?x:(fa[x]=getfa(fa[x]));}pair< int ,pi > p[MAXN];int main(){// freopen("F.in","r",stdin);// freopen(".out","w",stdout); int n=read(),m=read(); For(i,n) fa[i]=i; For(i,m) p[i].se.fi=read(),p[i].se.se=read(),p[i].fi=read(); sort(p+1,p+1+m); int ans=0; ForD(i,m) { int x=p[i].se.fi,y=p[i].se.se,w=p[i].fi; x=getfa(x),y=getfa(y); if( (x^y) && (!s[y]||!s[x]) ) { fa[x]=y; s[y]+=s[x]; ans+=w; } else if (!s[x]){ ans+=w; s[x]=1; } } cout<<ans<<endl; return 0;}
阅读全文
0 0
- Codeforces Round #441 (Div. 1, by Moscow Team Olympiad)
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad)
- Codeforces Round #441 (Div. 1, by Moscow Team Olympiad) C. National Property CF875C
- Codeforces Round #441 (Div. 1, by Moscow Team Olympiad) F. Royal Questions
- Codeforces Round #441 (Div. 1, by Moscow Team Olympiad) E. Delivery Club
- Codeforces Round #441 (Div. 1, by Moscow Team Olympiad) D. High Cry
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) ABCD题解
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) D. Sorting the Coins 乱搞
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) A-D题解
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) A. Trip For Meal
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) B. Divisiblity of Differences
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) E. National Property (2-SAT问题)
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) C. Classroom Watch
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) D. Sorting the Coins
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) E. National Property
- 算法分析与设计week03--455.Assign Cookies
- HashMap解决hash冲突的方法
- CSS
- [Lintcode] #53 翻转字符串
- Ubuntu 16.04 vim YouCompleteMe自动补全的安装配置与使用
- Codeforces Round #441 (Div. 1, by Moscow Team Olympiad)
- C语言——求[a,b]内的所有回文数
- [Lintcode] #167 链表求和
- 【Python-3.5】Pygal模拟骰子点数,分析结果可视化
- JsonCpp如何判断是否有某个KEY
- 系统日至及时间同步
- ==和equals的区别
- Java-Json的格式化和转参数表格
- 学习maven的使用,看到一篇很实用的入门教程(菜鸟级入门)