Codeforces Round #313 (Div. 2)(A,B,C,D)

4231 ワード

A題:
タイトルアドレス:Currency System in Geraldion
标题:n中の貨幣の額面(貨幣ごとに無数の枚がある)を与え、表示できない貨幣の最小値を要求し、すべての額面のものが表示できれば、-1を出力する.
考え方:水題は、額面が1の通貨があるかどうかを見て、もしあるならば、すべての額面の通貨はすべて1の累積で得ることができて、もしないならば、最小の表示できないのはもちろん1辛です.
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
int main()
{
    int n,m,i;
    while(~scanf("%d",&n))
    {
        int flag = 0;
        for(i=0;i

B題:
タイトルアドレス:Gerald is into Art
标题:1枚の板と2枚の絵があって、2枚の絵の組み合わせが板の中にあるかどうかを聞く(2枚の絵は重なり合って交差してはいけない.
考え方:全部で8つの組み合わせの方法について、全部リストアップすればいいです.
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
int main()
{
    int n,m,a,b,c,d;
    int flag;
    while(~scanf("%d %d",&n,&m)){
        scanf("%d %d",&a,&b);
        scanf("%d %d",&c,&d);
        flag=0;
        if(a+c<=n&&max(b,d)<=m){
           flag=1;
        }
        else if(a+c<=m&&max(b,d)<=n){
            flag=1;
        }
        else if(a+d<=n&&max(b,c)<=m){
            flag=1;
        }
        else if(a+d<=m&&max(b,c)<=n){
            flag=1;
        }
        else if(b+d<=n&&max(a,c)<=m){
            flag=1;
        }
        else if(b+d<=m&&max(a,c)<=n){
            flag=1;
        }
        else if(b+c<=n&&max(a,d)<=m){
            flag=1;
        }
        else if(b+c<=m&&max(a,d)<=n){
            flag=1;
        }
        if(flag)
            puts("YES");
        else
            puts("NO");
    }
    return 0;
}
C題:
タイトルアドレス:Gerald's Hexagon
題意:与えられた6本の辺が時計回りに構成された六角形はどれだけの面積が1の等辺三角形を形成することができるか.
構想:実はこの六角形の面積を求めて、法則の問題で、3本のつながっていない辺を探してそれから1つの大きい等辺三角形を延長して形成してそれから余分な充填の小さい三角形を減らして最後の結果です.
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
int main()
{
    int a,b,c,d,e,f;
    int t,ans;
    while(~scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f)){
        t=(e+d+c);
        ans=t*t-a*a-e*e-c*c;
        printf("%d
",ans); } return 0; }

D題:
タイトルアドレス:Equivalent Strings題意:2つの等長の文字列を与え、文字列が等しいと判断する方法(2つの文字列をそれぞれ等長の2つの部分に切り、a 1、a 2、b 1、b 2、a 1=b 1&&a 2=b 2またはa 1=b 2&&a 2=b 1)を与え、2つの文字列が等しいかどうかを判断させる.
考え方:文字列は偶数個しかない場合に分割でき、奇数個しかない場合は最初から後ろに比較します.そして検索すればいいです.
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long LL;
const int inf=0x3f3f3f3f;
const double pi= acos(-1.0);
const double esp=1e-6;
const int MAXN=200010;
char a[MAXN],b[MAXN];
int Find(char *str1,char *str2,int len)
{
    int i;
    if(len&1){
        for(i=0;i