8/7排位赛,codeforces501
来源:互联网 发布:剑网3捏脸数据女 编辑:程序博客网 时间:2024/04/30 16:11
A
啥都不说了,,,秒
话说我把abcd打错了WA了一发
#include<cstdio>#include<algorithm>using namespace std;int get(int p,int t){ return max(3*p/10,p-p/250*t);}int main(){ int a,b,c,d; while (scanf("%d%d%d%d",&a,&b,&c,&d)==4){ int m=get(a,c); int v=get(b,d); if (m==v)puts("Tie"); else if (m>v)puts("Misha"); else puts("Vasya"); } return 0;}
B,,,
不多说,还是秒
话说在提交A 的时候就看到有人交B了
虽然我手速慢,但,,,,这显然是以前做过啊
#include<cstdio>#include<string>#include<iostream>using namespace std;const int N=1007; string Old[N],New[N];int n,q;int Find(string st){ for (int i=1;i<=n;i++){ if (New[i]==st)return i; } return -1;}int main(){ //freopen("fuck.in","r",stdin); string st,stt; cin>>q; while (q--){ cin>>st>>stt; int pos=Find(st); if (pos!=-1)New[pos]=stt; else{ Old[++n]=st; New[ n]=stt; } } printf("%d\n",n); for (int i=1;i<=n;i++){ cout<<Old[i]<<" "<<New[i]<<endl; } return 0;}
C
题意说啥无环,,就是个树了
啊呸,森林(题目都说了)
弄个队列或者dfs都行吧,从叶子节点向上删边
显然叶子几点的sum值就是其父亲的编号
#include<cstdio>#include<iostream>#include<queue>using namespace std;const int N=100007;struct Edge{ int from,to; Edge(){} Edge(int x,int y){from=x,to=y;}}edges[N];int n,d[N],s[N];int main(){ //freopen("fuck.in","r",stdin); scanf("%d",&n); queue<int>Q; for (int i=0;i<n;i++){ scanf("%d%d",&d[i],&s[i]); if (d[i]==1)Q.push(i); } int m=0; while (!Q.empty()){ int k = Q.front();Q.pop(); if (d[k]==0)continue; edges[++m]=Edge(k,s[k]); d[s[k]]--; s[s[k]] ^= k; if (d[s[k]]==1)Q.push(s[k]); } printf("%d\n",m); for (int i=1;i<=m;i++){ printf("%d %d\n",edges[i].from,edges[i].to); } return 0;}
D,
这个,,,学术一点,叫康托展开和康托逆展开
其实就是求第几个排列和求这个排列是第几个排列
n有20W,阶乘肯定爆炸,用多项式存,每位是k!,这项达到k+1的时候就进位
反正康托展开的赤裸裸的形式也是除法取模之类的,,,这样正好直接把没项值搞出来了
数据量略大,读入的时候用树状数组或者线段树维护一下逆序对
处理的时候还是用树状数组求第k大数(注意+1,树状数组是1~n),配合一个简单的二分查找
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N=200020;int n,c[N],a[N],fac[N];void add(int k){ for (;k<=n;k+=k&(-k)){c[k]++;}}int sum(int k){ int s=0; for (;k;k-=k&(-k)){s+=c[k];} return s;}void order(){ memset(c,0,sizeof(c)); for (int i=1;i<=n;i++)scanf("%d",&a[i]); for (int i=n;i>=1;i--){ fac[n-i]+=sum(a[i]+1); add(a[i]+1); }}int get(int k){ int l = k,r = n; while (l < r){ int mid = (l+r)>>1; if (mid-sum(mid)<k) l=mid+1; else r=mid; } add(l); return l-1;}int main(){ //freopen("fuck.in","r",stdin); scanf("%d",&n); order();order(); for (int i=0;i<n;i++){ fac[i+1]+=fac[i]/(i+1); fac[i] %= (i+1); } memset(c,0,sizeof(c)); for (int i=1;i<=n;i++) a[i]=get(fac[n-i]+1); for (int i=1;i< n;i++) printf("%d ",a[i]); printf("%d\n",a[n]); return 0;}
调试的时候为了编译快一点,把MAXN调的很小,然后疯狂RTE
自己盯着代码看了半天,,
诶,还是要细心啊
E题,,,大坑待填
0 0
- 8/7排位赛,codeforces501
- 北邮新生排位赛8解题报告
- poj-Catch That Cow(排位赛8-c)
- 7-8
- 7*8
- 8-7
- 8-7
- 8-7
- 第二次排位赛
- 7月8日
- 8月7日看梦七
- 11月7#8#
- 2007-8-7
- 2008-8-7
- 7-8 task
- 第五章 7,8
- IE6、7、8兼容问题
- 7-8札记
- Android库
- django框架 modelsg更改后的数据迁移报错问题
- 面试导航
- html-显示时间
- Python与自然语言处理(三):Tensorflow基础学习
- 8/7排位赛,codeforces501
- tomacat修改编码等问题
- Ehcache缓存(一)
- Android 学习导航
- missForest一种非参数的缺失值填补方法
- LeetCode进阶之路( First Missing Positive)
- MIT License探讨
- JS对象及其方法-Date
- 安卓第三方支付之银联支付