A | ||||
B | ||||
C | ||||
D | ||||
E |
点击题号进入题面
---------
新笔记本终于到了,可以愉快的写代码了..
------
A 807A
题意:
给一个codeforces比赛的final standing和比赛前后的rating值,保证不存在一样的rating,
问你是否能知道本场比赛是否计分,如果不能判断则输出maybe
分析:
遍历即可
有人变化直接输出rated,无人变化如果不是顺序则unrated,否则maybe
1 /********************** 2 *@Name: 3 * 4 *@Author: Nervending 5 *@Describtion: 6 *@DateTime: 2018-02-04 03:39:20 7 ***********************/ 8 #include9 using namespace std;10 const int maxn=1e5+10;11 const int INF=0x3f3f3f3f;12 int n;13 int a[maxn];14 int b[maxn];15 int c[maxn];16 int cmp(int a,int b){17 return a>b;18 }19 int main(){20 //#define test21 #ifdef test22 freopen("in.txt","r",stdin);23 freopen("out.txt","w",stdout);24 #endif25 cin>>n;26 for(int i=0;i >a[i]>>b[i];28 c[i]=a[i];29 }30 sort(c,c+n,cmp);31 for(int i=0;i a[i-1]){39 cout<<"unrated";40 return 0;41 }42 }43 cout<<"maybe";44 45 #ifdef test46 fclose(stdin);47 fclose(stdout);48 system("out.txt");49 #endif50 return 0;51 }
------
B 807B
题意:
在一场CF比赛中,需要至少达到y分,当前以及获得足够的x分,x>=y
除此之外,为了获得奖品,你需要改变自己的分数使得当前分数x经过下列伪代码获得的名次值中存在你的当前名次a
通过hack的成功和失败可以改变自己的分数x,成功加100失败减50
求最小的成功次数,输入保证有解
i := (s div 50) mod 475 repeat 25 times: i := (i * 96 + 42) mod 475 print (26 + i)
分析:
枚举即可
先尝试只失败不成功
然后尝试成功,每次测试也尝试额外失败一次的情况
1 /********************** 2 *@Name: 3 * 4 *@Author: Nervending 5 *@Describtion: 6 *@DateTime: 06/02/18 22:05 7 ***********************/ 8 #include9 using namespace std;10 const int maxn=1e5+10;11 const int maxm=1e6+10;12 const int INF=0x3f3f3f3f;13 #define show(x) cout<<#x<<"="< << endl14 int a,x,y;15 int check(int s){16 int na=(s/50)%475;17 for(int i=0;i<25;i++){18 na=(na*96+42)%475;19 if(a==na+26)return true;20 }21 return false;22 }23 24 int main() {25 //#define test26 #ifdef test27 freopen("in.txt","r",stdin);28 freopen("out.txt","w",stdout);29 #endif30 cin>>a>>x>>y;31 for(int i=x;i>=y;i-=50){32 if(check(i)){33 cout<<0;34 return 0;35 }36 }37 for(int i=x+100,j=1;;j++,i+=100){38 if(check(i)||check(i-50)){39 cout<
-------
C 807C
题意;
你当前的成功次数是x,总次数是y,你希望比值达到a/b,求最小的尝试次数,不存在输出-1
分析:
可以发现,只需要总次数达到b的整数倍即可,最小的合法倍数必然为解
成功次数只要为正值且小于总次数即可
二分枚举倍数即可以获得答案
注意是可能不存在解的,比如a==b而x!=y,或者a==0而x!=0,可以预先剪枝
1 /********************** 2 *@Name: 3 * 4 *@Author: Nervending 5 *@Describtion: 6 *@DateTime: 7 ***********************/ 8 #include9 #define show(x) cout<<#x<<"="< < >casn;29 while(casn--){30 cin>>x>>y>>a>>b;31 if((a==b&&x!=y)||(a==0&&x!=0)){32 cout<<-1< >1;39 ll ac=mid*a;40 ll at=mid*b;41 if(ac>=x&&at>=y&&ac-x<=at-y){42 ans=at-y;43 r=mid-1;44 }else {45 l=mid+1;46 }47 }48 if(ans==-1)cout<<-1<