• Educational Codeforces Round 42 (Rated for Div. 2)[A,B,C]【B题:暴力+贪心】【C题:暴力】【D题:思维+暴力【好】】


     1 #include<bits/stdc++.h>
     2  
     3 using namespace std;
     4 #define int long long 
     5 int vis[30];
     6 int f(int x,int y){
     7     int s=1;
     8     while(y){
     9         if(y%2){
    10             s*=x;
    11         }
    12         x=x*x;
    13         y/=2;
    14     }
    15     return s;
    16 }
    17 int arr[561654];
    18 signed main(){
    19     int n;
    20     cin>>n;int s=0;
    21     for(int i=1;i<=n;i++){
    22         cin>>arr[i];
    23         s+=arr[i]; 
    24     }
    25     int add=0;int t=s/2;
    26     if(s%2)
    27         t++;        
    28     for(int i=1;i<=n;i++){
    29         add+=arr[i];
    30         if(add>=t){
    31             cout<<i;return 0;
    32         }
    33     }
    34     return 0;
    35 }

     1 #include<bits/stdc++.h>
     2  
     3 using namespace std;
     4 #define int long long
     5 int arr[666666];
     6 map<int,int> vis;
     7 signed main(){
     8     int n,a,b;
     9     cin>>n>>a>>b;
    10     string str;
    11     cin>>str;
    12     int cnt=0;
    13     int sum=0;
    14     for(int i=0;i<n+1;i++){
    15         if(str[i]=='.'){
    16             sum++;
    17         }else{
    18             if(sum)
    19                 arr[cnt++]=sum;
    20             sum=0;
    21         }
    22     }
    23     if(!cnt) {
    24         cout<<"0";
    25         return 0;
    26     }
    27     int A=a;
    28     int B=b;
    29     int f=0;
    30     for(int k=0;k<cnt;k++){
    31         if(a>b) f=1;
    32         else f=0;
    33         int cnt=0;
    34         for(int i=0;i<arr[k];i++){
    35             cnt++;
    36             if(f){
    37                 if(cnt%2==1&&a>0){
    38                     a--;
    39                 }else if(cnt%2==0&&b>0){
    40                     b--;
    41                 }
    42             }else{
    43                 if(cnt%2==1&&b>0){
    44                     b--;
    45                 }else if(cnt%2==0&&a>0){
    46                     a--;
    47                 }
    48             }
    49         }
    50     }
    51     int ans=(A-a)+(B-b);
    52     cout<<ans;
    53     return 0;
    54 }

     思路:每次删除一些数,让删除了这些数之后,剩下的数能够是平方数,即x^2=y这种。因为数最大为2*10^9,只有10位,所以只用枚举10位数,把所有的可能枚举出来,然后转化为数字,再判断是否为平方数。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define int long long
     4 #define N 11
     5 int arr[N];
     6 signed main(){
     7     string str;
     8     cin>>str;
     9     int len=str.size();
    10     for(int ans=0;ans<len;ans++){
    11         memset(arr,1,sizeof(arr));
    12         for(int i=0;i<ans;i++) arr[i]=0;
    13         int F=1;
    14         do{
    15             int f=1;int temp=0;
    16             for(int i=0;i<str.size();i++){
    17                 if(arr[i]){
    18                     temp=str[i]-'0';break;
    19                 }
    20             }
    21             if(temp==0) f=0;
    22             if(f){
    23                 int sum=0;
    24                 for(int i=0;i<str.size();i++){
    25                     if(arr[i]) sum=sum*10+(str[i]-'0');
    26                 }
    27                 int T=(int)sqrt(sum*1.00);
    28                 if(T*T==sum){
    29                     cout<<ans;
    30                     return 0;
    31                 }
    32             } 
    33         }while(next_permutation(arr,arr+len));
    34     }
    35     cout<<"-1";
    36     return 0;
    37 } 

    题目大意:给定一串正整数,至少有两个相同的数。重复做以下操作:

    找到相同的,最先出现的,最小的,两个数,把位置在前面的数去掉,位置排在后面的那个数翻倍。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define int long long
     4 #define N 6666666
     5 int arr[N];
     6 map<int,int> vis; 
     7 map<int,int> mp;
     8 signed main(){
     9     int n;
    10     cin>>n;
    11     for(int i=1;i<=n;i++) cin>>arr[i];
    12     for(int i=1;i<=n;i++){
    13         if(!vis[arr[i]]){
    14             vis[arr[i]]=i;
    15         }else{
    16             if(vis[arr[i]]){
    17                 mp[vis[arr[i]]]=1;
    18                 vis[arr[i]]=0;
    19                 arr[i]=arr[i]*2;
    20                 while(vis[arr[i]]){
    21                     mp[vis[arr[i]]]=1;
    22                     vis[arr[i]]=0;
    23                     arr[i]=arr[i]*2;
    24                 }    
    25                 vis[arr[i]]=i;
    26             }
    27         }
    28     }
    29     int sum=0;
    30     for(int i=1;i<=n;i++){
    31         if(!mp[i]) 
    32             sum++;
    33         //cout<<arr[i]<<" ";
    34     }
    35     cout<<sum<<'
    ';
    36     for(int i=1;i<=n;i++){
    37         if(!mp[i]) 
    38          cout<<arr[i]<<" ";
    39     }
    40     return 0;
    41 } 
  • 相关阅读:
    20199137 2019-2020-2 《网络攻防实践》第七次作业
    2019-2020-2 20199137《网络攻防实践》 第六周作业
    2019-2020-2 20199137《网络攻防实践》第五周作业
    2019-2020 -2 20199137 《网络攻防实践》第四周作业
    20199111 2019-2020-2 《网络攻防实践》第十二周作业
    20199111 2019-2020-2 《网络攻防实践》第十一周作业
    20199111 2019-2020-2 《网络攻防实践》第十周作业
    20199111 2019-2020-2 《网络攻防实践》第九周作业
    20199111 2019-2020-2 《网络攻防实践》第八周作业
    20199111 2019-2020-2 《网络攻防实践》第七周作业
  • 原文地址:https://www.cnblogs.com/pengge666/p/12200667.html
Copyright © 2020-2023  润新知