01.30补题

CodeForces - 991C 

题意:总共n分,一个人先拿每次拿走k,另一个人拿走剩下的10%,问第一个人拿走至少一半,这样最小的k是多少

思路:二分进行模拟寻找

思考:1)一开始想模拟但是数的范围实在是太大了,难以想到二分,毕竟次数是固定的;2)越小的k和越大的k是两种截然不同的情况,体现在两个人拿的多少,体现在一个人身上是这个人递增或递减的多少,写代码时一定要分清

代码:

 1 #include<algorithm>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<cstring>
 5 #include<iostream>
 6 using namespace std;
 7 int maxx=1e5+10;
 8 int main(){
 9     long long int sum=0;
10     scanf("%lld",&sum);
11     int num=1;
12     long long int left=1,right=sum;
13     while(left<right){
14         long long int a=0,b=0;
15         long long int s=sum,i=(left+right)/2;
16         int flag1=0;
17         while(1){
18 
19             if(s==0){
20                 break;
21             }
22             if(s!=0&&s>=i){
23                 a+=i;
24                 s-=i;
25             }else if(s!=0&&s<i){
26                 a+=s;
27                 s=0;
28             }
29             if(s!=0&&s/10!=0){
30                 b+=s/10;
31                 s-=s/10;
32             }
33         }
34         if(a>=(sum+1)/2){
35             flag1=1;
36         }else{
37             flag1=2;
38         }
39 
40         /*if(left==right&&flag1==1){
41             num=left;
42             break;
43         }*/
44         if(flag1==1){
45             right=i;
46         }else if(flag1==2){
47             left=i+1;
48         }//一直认为先出现a》b
49 
50         //printf("%lld %lld\n",left,right);
51     }
52    // printf("%lld:%d ",sum,num+1);
53     printf("%lld\n",left);
54 }
View Code

CodeForces - 991D 

题意:给出一个2*n的棋盘格,部分格子可能已经放了棋子了,问最多能放几个L形的标记(可以旋转90°、180°、270°)

思路:直接寻找就行

思考:1)读题的时候因为是最后了就不太想读了,这种事情以后真的要完全杜绝;2)因为题意没有读懂,又看到这是个后面的题,也就没有仔细研究,其实这个题很简单

代码:

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     string s1,s2;
 8     cin >> s1 >> s2;
 9     int result = 0 ;
10     for (int i = 0 ; i+1 < s1.size() ; i ++ )
11     {
12         if(s1[i] == '0' && s1[i+1] == '0' && s2[i] == '0') s1[i]=s1[i+1]=s2[i]='X',result ++ ;
13         else if(s1[i] == '0' && s1[i+1] == '0' && s2[i+1] == '0') s1[i]=s1[i+1]=s2[i+1]='X',result ++ ;
14         else if(s1[i+1] == '0' && s2[i] == '0' &&  s2[i+1] == '0') s1[i+1]=s2[i]=s2[i+1]='X',result ++ ;
15         else if(s1[i] == '0' && s2[i] == '0' && s2[i+1] == '0') s1[i]=s2[i]=s2[i+1]='X',result ++ ;
16     }
17     cout << result << endl;
18     return 0;
19 }
View Code

 

posted @ 2021-02-03 14:36  bonel  阅读(77)  评论(0)    收藏  举报