• Codeforces Round #296 (Div. 2)


    A

    题意:给出长为a,宽为b的纸片,每次以短边作为正方形的边长,问能够得到多少个正方形

    先是直接整除个a/b,再用a%b,b作为新的纸片的长和宽,去进行同样的操作

    自己做的时候= =模拟了除法的过程(用减法= =)发现超时,于是还特判了一下如果a/b>10000单独处理= =居然当时还过了

    = = tle---tle---tle------

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<queue> 
     9 #include<algorithm>  
    10 #define mod=1e9+7;
    11 using namespace std;
    12 
    13 typedef long long LL;
    14 
    15 int main(){
    16     LL a,b,ans=0;
    17     cin>>a>>b;
    18     while(1){
    19         if(a<b) swap(a,b);
    20         if(b==0) break;        
    21         ans+=a/b;
    22         LL tmp=a%b;
    23         a=b;
    24         b=tmp;
    25     }
    26     cout<<ans<<"
    ";
    27     return 0;    
    28 }
    View Code

    B

    题意:给出两个长度相同的字符串s,t,定义距离为两个字符串相应位置上字符不同的个数,问经过一次交换能够得到的最小距离,并输出交换的位置

    用dp[a][b]分别将在相同位置上,s[i]和t[i]不同的位置记录下来,

    如果dp[a][b]和dp[b][a]都存在,那么交换之后,刚好匹配,最大距离减去2 如果只有dp[a][b]存在,那么最大距离减去1

    话说这一题,自己做的时候是一点思路都没有,好好学 这一题= =

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<queue> 
     9 #include<algorithm>  
    10 #define mod=1e9+7;
    11 using namespace std;
    12 
    13 typedef long long LL;
    14 const int maxn=200005;
    15 char s[maxn],t[maxn];
    16 int dp[105][105];
    17 int has[maxn];
    18 
    19 int main(){
    20     int i,j,n,ans=0;
    21     scanf("%d",&n);
    22     cin>>(s+1)>>(t+1);
    23     for(i=1;i<=n;i++){
    24         if(s[i]!=t[i]){
    25             dp[s[i]-'a'][t[i]-'a']=i;
    26             has[s[i]-'a']=i;    
    27             ans++;        
    28         }
    29     }
    30     
    31     for(i=0;i<26;i++){
    32         for(j=0;j<26;j++){
    33             if(dp[i][j]!=0&&dp[j][i]!=0){
    34                 printf("%d
    ",ans-2);
    35                 printf("%d %d
    ",dp[i][j],dp[j][i]);
    36                 return 0;
    37             }
    38         }
    39     }
    40     
    41     for(i=0;i<26;i++){
    42         for(j=0;j<26;j++){
    43             if(dp[i][j]!=0&&has[j]!=0){
    44                 printf("%d
    ",ans-1);
    45                 printf("%d %d
    ",dp[i][j],has[j]);
    46                 return 0;
    47             }
    48         }
    49     }
    50     
    51     printf("%d
    ",ans);
    52     printf("-1 -1
    ");
    53     return 0;    
    54 }
    View Code

    C

    题意:给出长为w,宽为h的玻璃,现在切割n刀,问每切一刀后,最大的玻璃碎片的面积

    因为每次一刀下去,当前的区间都会被分成2份,那么为了使面积最大,从当前的横向区间里面选最大的长,从当前的竖向区间里面取最大的宽

     1 #include<iostream>  
     2 #include<cstdio>  
     3 #include<cstring> 
     4 #include <cmath> 
     5 #include<stack>
     6 #include<vector>
     7 #include<map> 
     8 #include<queue> 
     9 #include<set>
    10 #include<algorithm>  
    11 #define mod=1e9+7;
    12 using namespace std;
    13 
    14 typedef long long LL;
    15 multiset<int> hh,vv;
    16 set<int >ph,qv;
    17 set<int>::iterator r,l;
    18 
    19 int main(){
    20     char c;
    21     int x,w,h,n;
    22     scanf("%d%d%d",&w,&h,&n);getchar();
    23     ph.insert(0);ph.insert(h);
    24     qv.insert(0);qv.insert(w);
    25     hh.insert(h);vv.insert(w);
    26     
    27     while(n--){
    28         scanf("%c %d",&c,&x);getchar();
    29         
    30         if(c == 'H')
    31         {
    32             l = ph.lower_bound(x);
    33             r = l; l--;
    34             ph.insert(x);
    35             hh.insert(x-(*l));
    36             hh.insert((*r)-x);
    37             hh.erase(hh.find((*r) - (*l)));
    38         }
    39         else
    40         {
    41             l = qv.lower_bound(x);
    42             r = l; l--;
    43             qv.insert(x);
    44             vv.insert(x - (*l));
    45             vv.insert((*r) - x);
    46             vv.erase(vv.find((*r) - (*l)));
    47         }
    48 
    49         printf("%I64d
    ", (long long)(*hh.rbegin()) * (*vv.rbegin()));
    50         
    51         
    52     }    
    53     return 0;            
    54 }
    View Code


     

    用数组写的,超时了,然后看的题解,用的STL里面的东西,真是太不熟悉太不熟悉了

    go---go---go----

  • 相关阅读:
    (OK) Use Android Code to Enable USB Debugging
    add software "mouse cursor" in Android-x86
    Subject: [android-porting] Mouse cursor:issue with dispatchPointer
    BUG实例分析五:binder alloc buf, no vma
    【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) A】Packets
    【ACM-ICPC 2018 南京赛区网络预赛 I】Skr
    【ACM-ICPC 2018 南京赛区网络预赛 A】An Olympian Math Problem
    【AIM Tech Round 5 (rated, Div. 1 + Div. 2) 总结】【题解往前或往后翻,不在这】
    【AIM Tech Round 5 (rated, Div. 1 + Div. 2) A】 Find Square
    【AIM Tech Round 5 (rated, Div. 1 + Div. 2) B】Unnatural Conditions
  • 原文地址:https://www.cnblogs.com/wuyuewoniu/p/4352543.html
Copyright © 2020-2023  润新知