2017-2018 ACM-ICPC Pacific Northwest Regional Contest(Div.2)(コンニャク解題)(すべて水題と思考題)

15415 ワード

2018.5.14:あと3つは補っていませんが、1つは色の種類で、1つはfnを求めて、1つの尺は書くことができる問題を取ります(推定は簡単なdpです)http://codeforces.com/gym/101652 A problemNは1つの文字列を与えて、その文字列のすべての文字列(単語consectiveに注意して、連続しているので、文字列を返す)の長さが奇数列であるかどうかを判断します.もしOdd.を出力したらOr notを出力します.
考え方:文字列が偶数の場合、必ず同じ文字が2つあるので、私たちはこの2つを差し引いて、偶数の文字列を構成しているので、隣接する2つの文字が同じかどうかを判断するだけでいい
#include 

using namespace std;

int main()
{    string s;
      while(cin>>s){
      bool flag=false;
      for(int i=0;i1&&!flag;i++){
          if(s[i]==s[i+1])flag=true;
      }
      if(flag)
         puts("Or not.");
     else
         puts("Odd.");
  }
    return 0;
}

B:problme Oはマトリクスを与えて、そのマトリクスの各行の各列のアルファベットがそれぞれ異なっていると判断して、しかも第1行と第1列の要素はすべて自然な順序で並べ替えられている(小さいから大きいまで)試してみると、出力Reducedは第1条件を満たして第2条件を満たさなければ、出力Not reducedはすべて満たさなければ、出力NO
構想:シミュレーション(2回の列挙問題の意味を間違えて、自然の順序は下がって、必ずしも1だけ悪いとは限らない)
#include 
#include 
#include 
using namespace std;
set<int>se;
char a[50][50];
int solve(char a,char b){
     int aa;
     int bb;
     if(a>='A'&&a<='Z')aa=(a-'A'+10);
     else if(a>='0'&&a<='9')aa=a-'0';
     if(b>='A'&&b<='Z')bb=(b-'A'+10);
     else if(b>='0'&&b<='9')bb=b-'0';
     return a-b;
}
int main()
{      int m;
      while(cin>>m){
           bool flag=false;
           for(int i=1;i<=m;i++){
              for(int j=1;j<=m;j++){
                 cin>>a[i][j];
                }
             }
             for(int i=1;i<=m;i++){
                 se.clear();
                 for(int j=1;j<=m;j++){
                    se.insert(a[i][j]);
                  }
                  if(se.size()true;
                   }
             }
             for(int i=1;i<=m;i++){
                se.clear();
                for(int j=1;j<=m;j++){
                   se.insert(a[j][i]);
                }
                if(se.size()true;
             }
             if(flag){
               puts("No");
             }
             else{
                for(int i=2;i<=m;i++){
                   if(solve(a[1][i],a[1][i-1])<=0)
                    flag=true;
                }
                for(int j=2;j<=m;j++){
                   if(solve(a[j][1],a[j-1][1])<=0)
                   flag=true;
                }
                if(flag){
                  puts("Not Reduced");
                }
                else{
                  puts("Reduced");
                }

             }





      }



    return 0;
}

M:problemZは言わないで、コードを見て何の問題があるか知っています.の
#include 
#include 
#include 
using namespace std;
bool check(int m){
     while(m){
        int ans=m%10;
        if(!ans)return true;
        m/=10;
     }
     return false;
}
int main()
{      int m;
        while(cin>>m){
             m++;
             while(check(m))m++;
             cout<return 0;
}

L:problemY題意:既知x,k,p,x*n+k*p/nの最小値を求める
構想:対番関数は、nが整数であるため、sqrt(k*p/x)左右の2つの整点対応関数値の最小値を出力する.O(1).. これは明らかに大物の考えで、私は3点を考えていたが、後で1 e 7を試してみてもいいと思った.すぐに...
#include 
#include 
#include 
#include 
#include 
using namespace std;
 int k, p, x;
double cal(int n) {
     return 1.0 * x * n + 1.0 * k * p / n;
 }
int main()
{





     scanf("%d%d%d", &k, &p, &x);
     int n = sqrt((k * p + 0.5) / x);//      
     printf("%.3f
"
, min(cal(n), cal(n + 1))); return 0; return 0; }

暴力
#include 
#include 
#include 
using namespace std;
void senfen(){

}
double k,p,x;
int main()
{     while(~scanf("%lf%lf%lf",&k,&p,&x)){
           double ans=1e9+7;
           for(int i=1;i<=1e7;i++){
                double s=x*i+(k*p)/(1.0*i);
               ans=min(ans,s);
           }
           printf("%.3f
"
,ans); } return 0; }

H:problemuはふるい(dieはふるいの意味がある)を与え、各面の確率は以下の通り(明らかに水銀が注入されている)、表面の値を3.5にすることを期待し、変更された数字と原数の差を最小限に抑えることができる.考え方:うん、並べ替えておけばよかった
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
double a[6];
struct Node{
   double l;
   int r;
};
bool cmp2(Node a,Node b){
    return a.l>b.l;
}
int main()
{   Node a[6];
    double sum=0;
     for(int i=0;i<6;i++){
         cin>>a[i].l;
         sum+=a[i].l*(i+1);
         a[i].r=i;
     }
     sort(a,a+6,cmp2);
     //cout<
        //cout<
        //cout<double tt=abs(sum-3.5)/a[0].l;
printf("%.3f",tt);
return 0;
}

K:problemxはいくつかの星を与え、以下のルールは1行ごとに同じ数です.1行目は、2行目より小さい隣接行の差を待たなければなりません.最大1は、どのような合法的なスキームがあるかを尋ねます.考え方:ちょっとぼんやりしていますね.のその後、3つの状況が発見された.1行が等しい.2差分値は1、総数奇数2差分値は1、総数偶数恩
#include 
#include 
#include 
#include 
#include 
using namespace std;
const int maxn=12;
setint,int> >q;
int main()
{   int s;
    while(cin>>s){
         q.clear();
         for(int i=2;iif(s%i==0)
               q.insert(make_pair(i,i));
         }
         for(int i=2;iif(s%(i+i-1)==0||((s-i)%(i+i-1)==0))
             q.insert(make_pair(i,i-1));
         }
         printf("%d:
"
,s); setint,int> >::iterator it; for(it=q.begin();it!=q.end();it++){ cout<first<<","<second<return 0; }