Codeforces Round #200 (Div. 1)

来源:互联网 发布:骂人语音软件 编辑:程序博客网 时间:2024/06/05 18:54

多做点题,开拓自己的思维。

A:

题意:给你一个阻值,问最少能有多少个阻值为1的电阻,通过串并联得到。

思路:如果a>b,ans+整数部分,否则交换后接着判断。

#include<iostream>#include<set>#include<map>#include<vector>#include<queue>#include<cmath>#include<climits>#include<cstdio>#include<string>#include<cstring>#include<algorithm>typedef long long LL;using namespace std;LL ans;void gcd(LL a,LL b){    if(b==0)        return;    LL m=a/b;    ans+=m;    a-=m*b;    if(b==1)        return;    gcd(b,a);}int main(){    LL a,b;    while(cin>>a>>b)    {        ans=0;        if(a>b)        {            LL m=a/b;            ans+=m;            a=a-m*b;            gcd(b,a);        }        else            gcd(b,a);        cout<<ans<<endl;    }    return 0;}

B:

栈的应用。类似的问题学会用栈去解决!

#include<iostream>#include<set>#include<map>#include<vector>#include<queue>#include<cmath>#include<stack>#include<climits>#include<cstdio>#include<string>#include<cstring>#include<algorithm>typedef long long LL;using namespace std;int main(){    char a[100010];    while(cin>>a)    {        stack<char> q;        int len=strlen(a);        if(len==1)        {            cout<<"No"<<endl;            continue;        }        q.push(a[0]);        for(int i=1;i<len;i++)        {            if(q.size()&&a[i]==q.top())            {                q.pop();            }            else                q.push(a[i]);        }        if(q.size())            cout<<"No"<<endl;        else            cout<<"Yes"<<endl;    }    return 0;}

c:

#include <iostream>#include <cmath>using namespace std;long long h[1234567],p[1234567];int n, m;bool judge(long long t){    int cur =1 ;    long long final;    for(int i=1;i<=n;i++){        if(abs(p[cur]-h[i])>t) continue;        if(p[cur]==h[i]) cur++;        if(p[cur]<h[i]) final=max(h[i]+t-2*(h[i]-p[cur]),h[i]+(t-(h[i]-p[cur]))/2);        else final = h[i]+t;        while(p[cur]<=final&&cur<=m) cur++;    }    return (cur>m);}int main(){    cin >> n >> m;    for(int i=1;i<=n;i++) cin >> h[i];    for(int i=1;i<=m;i++) cin >> p[i];    long long l=0,r=abs(p[1]-h[1])*2+abs(p[m]-h[1]),mid;    while(l<=r){        mid = (l+r)>>1;        if(judge(mid)) r=mid-1;        else l=mid+1;    }    cout << l << endl;    return 0;}


原创粉丝点击