出来るだけ寝ていたい

1日最低12時間睡眠、寝たら負け

早抜け運ゲーム


#include <bits/stdc++.h>
#define rep(i,n) for(int i=0; i<(n); i++)
#define sort(v,n) sort(v,v+n);
#define vsort(v) sort(v.begin(),v.end());
#define ll long long
#define pb(a) push_back(a)
#define fi first
#define se second
#define inf 999999999
using namespace std;
typedef pair<int,int> p;
typedef pair<ll,ll> lp;
bool is_uruu(int y) {
        return y % 4 == 0 && (y % 100 != 0 || y % 400 == 0);
}
//---------------------------------------------------------------------------//

int main(){
        string a,b,c;
        cin>>a>>b>>c;
        int i=0,j=0,k=0;
        char next='a';
        while(1) {
          if(next=='a') {
             if(i>=a.length()) {
              cout<<"A"<<endl;
                  break;
                 }
                 next=a[i];
                 ++i;
    }else if(next=='b') {
            if(j>=b.length()) {
            cout<<"B"<<endl;
                   break;
                  }
                  next=b[j];
                  ++j;
             }else{
            if(k>=c.length()) {
              cout<<"C"<<endl;
                     break;
                   }
                    next=c[k];
                    k++;
                }
        }
}

abcの三人で早抜け運ゲームをする。一番早く抜ける人を出力するソースコード

簡易テキストエディタ



#include <bits/stdc++.h>
#define rep(i,n) for(int i=0; i<n; i++)
#define sort(v,n) sort(v,v+n);
#define vsort(v) sort(v.begin(),v.end());
#define ll long long
#define pb(a) push_back(a)
#define fi first
#define se second
#define inf 999999999
using namespace std;
typedef pair<int,int> p;
typedef pair<ll,ll> lp;
bool is_uruu(int y) {
        return y % 4 == 0 && (y % 100 != 0 || y % 400 == 0);
}
//---------------------------------------------------------------------------//

int main(){
     string s,t;
     cin>>s;
     rep(i,s.length()){
         if(s[i]=='0') {
                t+="0";
        }else if(s[i]=='1') {
                t+="1";
       }else if(s[i]=='B') {
              if(t.length()>0) {
   t=t.substr(0,t.length()-1);
                }else{
                        t="";
                      }
                }
        }
        cout<<t<<endl;
}

0と1とBの3種類の文字をつかった文字列が与えられるので左端から0だったら0、1だったら1、Bだったら1つ前の文字を消すというルールのもと出来上がる文字列を出力するソースコード
例えば10BB001が入力なら001が出力。10B1なら11みたいな感じ。これはstringで入力してsubstrとlengthを使う。文字に+="何かの文字"で文字の末端に文字を追加できるのも良いなぁと思いました。

long long



#define make_pair MP

using namespace std;
//---------------------------------------------------------------------------//
long long a,b,c;
int main(){
        cin>>a>>b>>c;
 if(a%2==0 || b%2==0 || c%2==0) {
                cout<<0<<endl;
                return 0;
        }else{
  cout<<min(min(a*b,a*c),b*c)<<endl;

        }

}

これlong longじゃなくてintでやっててAC出来なくてなんでやろなーって思ってたけど、、テストケースに10000とか入ってくるとintじゃ出来ないもんね。常識レベルだけど忘れていて勉強になったなぁと。。

貪欲3


#define make_pair MP

using namespace std;
//---------------------------------------------------------------------------//
int n,a=0;
char s[2000];
int main(){
    cin>>n;
     for(int i=0; i<n; i++) {
           cin>>s[i];
        }
     int b=n-1;
     while(a<=b) {
         bool left=false;
   for(int i=0; a+i<=b; i++) {
               if(s[a]<s[b]) {
                    left =true;
                    break;
          }else if(s[a]>s[b]) {
                    left=false;
                    break;
                  }
         }
            if(left) {
               putchar(s[a++]);
           }  else{
               putchar(s[b--]);
           }
      }
}

これは与えられた文字列に対して、左端または右端の文字を選択して、作られた単語を出来るだけ辞書順で前に来るような単語を作るソースコード

貪欲2

#define make_pair MP
#define N_MAX 100000
using namespace std;
//---------------------------------------------------------------------------//
int n,s[N_MAX],t[N_MAX],min1=t[0];

int main(){
        cin>>n;
        for(int i=0; i<n; i++) {
                cin>>s[i]>>t[i];
        }
        pair<int,int > work[N_MAX];
        for(int i=0; i<n; i++) {
                work[i].first=s[i];
                work[i].second=t[i];
        }
        sort(work,work+n);
        int sum=0,f=0;
        for(int i=0; i<n; i++) {
                if(f<work[i].first) {
                        sum++;
                        f=work[i].second;
                }
        }
        cout<<sum<<endl;
}

これはスケジュールにある出席可能な会議で会議同士の時間が重ならないよう出来るだけ多く出席するような最適解を求めるアルゴリズム
pair にしてソート、次に早く終わるものから順番に選択って感じ。

貪欲法

今勉強してる最適解を求めるアルゴリズム。中々良いコードが思いつかないから大変。

using namespace std;

//---------------------------------------------------------------------------//
int c[6]={1,5,10,50,100,500};
int v[6],a,min1;
int main(){
        int sum=0;
        for(int i=0; i<6; i++) {
                cin>>v[i];
        }
        cin>>a;
        for(int i=5; i>=0; i--) {
                min1=min(a/c[i],v[i]);
                sum+=min1;
                a-=min1*c[i];
        }
        cout<<sum<<endl;
}

硬貨問題です

課題4 チャレンジ

これね。意味わかんないよね。今回の問題を読んで「あ、これは10桁パンデジタル数を求めるプログラムだなぁ」と思ったが、それ以上思いついた事なし。10桁パンデジタル数?何それ?と思う人はこれでも読んでみなよ。少しだけ頭が良くなった気がするから→wikipedia:パンデジタル数
今回のプログラムで考えた事はもう何も無い。とにかくif文の条件を死ぬ気で書いただけ。左辺の各桁の値を変数で置いて制約を作って、それと右辺のことも考えて制約を書いたって感じ。まあまあ、とりあえず見てよ。

package kadai1.prog1.main;
public class Prog003 {
            //-----------------------------------------------------------使ってないコード---------------------------------------------------------------------------//
            //素因数分解
            /*public static int primefac(long x){
                        int a=2,sum=0;
                        while(x>=a*a){
                                    if(x%a==0){
                                                x/=a;
                                                sum++;
                                    }else{
                                                a++;
                                    }
                        }
                        return sum ;
            }*/
            /*static int[] b;
            public static void primefac2(long x){
                        int a=2,i=0,sum=0;
                        int b[]=new int [50000];
                        while(x>=a){
                                    if(x%a==0){
                                                b[i]=a;
                                                System.out.println(a);
                                                i++;
                                                x/=a;
                                                sum++;
                                    }else{
                                                a++;
                                    }
                        }
                        System.out.println(sum);
            }
            //全探索
            public static boolean fullsearch(int j,int v,long x,int sum,int[] b){
                        int sum1=0;
                        if(j==sum && v>=10000 && v<100000
                                                && v/10000!=(v/1000-v/10000) && v/10000!=(v/100-v/1000-v/10000) && v/10000!=(v/10-v/10000-v/1000-v/100) && v/10000!=0
                                                && (v/1000-v/10000)!=(v/100-v/1000-v/10000) && (v/1000-v/10000)!=(v/10-v/10000-v/1000-v/100) && (v/1000-v/10000)!=0
                                                && (v/100-v/10000-v/1000)!=(v/10-v/10000-v/1000-v/100) && (v/100-v/10000-v/1000)!=0
                                                && (v/10-v/10000-v/1000-v/100)!=0
                                                && x/v/10000!=(x/v/1000-x/v/10000) &&x/ v/10000!=(x/v/100-x/v/1000-x/v/10000) && x/v/10000!=(x/v/10-x/v/10000-x/v/1000-x/v/100) && x/v/10000!=0
                                                && (x/v/1000-x/v/10000)!=(x/v/100-x/v/1000-x/v/10000) && (x/v/1000-x/v/10000)!=(x/v/10-x/v/10000-x/v/1000-x/v/100) && (x/v/1000-x/v/10000)!=0
                                                && (x/v/100-x/v/10000-x/v/1000)!=(x/v/10-x/v/10000-x/v/1000-x/v/100) && (x/v/100-x/v/10000-x/v/1000)!=0
                                                && (x/v/10-x/v/10000-x/v/1000-x/v/100)!=0 ){
                                    ++sum1;
                                    System.out.println(v+"*"+x/v+"="+x);
                                    System.out.println(sum1);
                                                return true;
                        }
                        if(fullsearch(j+1,v,x,sum,b)){
                                    return true;
                        }
                        if(fullsearch(j+1,v*b[j+1],x,sum,b)){
                                    return true;
                        }
                        return false;
            }*/
//---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
            public static void main(String[] args){
                        int sum=0;
                        outside:
                        for(int f=1;f<10;f++){
                                    for(int s=1;s<10;s++){
                                                for(int t=1;t<10;t++){
                                                            for(int q=1;q<10;q++){
                                                                        for(int w=1;w<10;w++){
                                                                                    for(int e=1;e<10;e++){
                                                                                                for(int r=1;r<10;r++){
                                                                                                            for(int y=1;y<10;y++){
                                                                                                                        for(int u=1;u<10;u++){
                                                                                                                                    int a=u*w;
                                                                                                                                    int b=(u*q+y*w+u*w/10);
                                                                                                                                    int c=(u*t+y*q+r*w+(u*q+y*w+u*w/10)/10);
                                                                                                                                    int d=(u*s+y*t+r*q+e*w+(u*t+y*q+r*w+(u*q+y*w+u*w/10)/10)/10);
                                                                                                                                    int g=(u*f+y*s+r*t+e*q+(u*s+y*t+r*q+e*w+(u*t+y*q+r*w+(u*q+y*w+u*w/10)/10)/10)/10);
                                                                                                                                    int h=(y*f+r*s+e*t+(u*f+y*s+r*t+e*q+(u*s+y*t+r*q+e*w+(u*t+y*q+r*w+(u*q+y*w+u*w/10)/10)/10)/10)/10);
                                                                                                                                    int i=(r*f+e*s+(y*f+r*s+e*t+(u*f+y*s+r*t+e*q+(u*s+y*t+r*q+e*w+(u*t+y*q+r*w+(u*q+y*w+u*w/10)/10)/10)/10)/10)/10);
                                                                                                                                    int j=(e*f+(r*f+e*s+(y*f+r*s+e*t+(u*f+y*s+r*t+e*q+(u*s+y*t+r*q+e*w+(u*t+y*q+r*w+(u*q+y*w+u*w/10)/10)/10)/10)/10)/10)/10);
                                                                                                                                    int k=(e*f+(r*f+e*s+(y*f+r*s+e*t+(u*f+y*s+r*t+e*q+(u*s+y*t+r*q+e*w+(u*t+y*q+r*w+(u*q+y*w+u*w/10)/10)/10)/10)/10)/10)/10)/10;
                                                                                                                                    if(f!=s && f!=t && f!=q && f!=w && f!=e && f!=r && f!=y && f!=u && f!=0
                                                                                                                                                && s!=t && s!=q && s!=w && s!=e && s!=r && s!=y && s!=u && s!=0
                                                                                                                                                && t!=q && t!=w && t!=e && t!=r && t!=y && t!=u && t!=0
                                                                                                                                                && q!=w && q!=e && q!=r && q!=y && q!=u && q!=0
                                                                                                                                                && w!=e && w!=r && w!=y && w!=u && w!=0
                                                                                                                                                && e!=r && e!=y && e!=u && e!=0
                                                                                                                                                && r!=y && r!=u && r!=0
                                                                                                                                                && y!=u && y!=0
                                                                                                                                                && u!=0
                                                                                                                                                && a!=b && a!=c && a!=d && a!=g && a!=h && a!=i && a!=j && a!=k && a!=0
                                                                                                                                                && b!=c && b!=d && b!=g && b!=h && b!=i && b!=j && b!=k && b!=0
                                                                                                                                                && c!=d && c!=g && c!=h && c!=i && c!=j && c!=k && c!=0
                                                                                                                                                && d!=g && d!=h && d!=i && d!=j && d!=k && d!=0
                                                                                                                                                && g!=h && g!=i && g!=j && g!=k && g!=0
                                                                                                                                                && h!=i && h!=j && h!=k && h!=0
                                                                                                                                                && i!=j && i!=k && i!=0
                                                                                                                                                && j!=k && j!=0
                                                                                                                                                && k!=0){
                                                                                                                                                System.out.println((10000*f+1000*s+100*t+10*q+w)+"*"+(10000*e+1000*r+100*y+10*u)+"="+(k)+(j)+(i)+(h)+(g)+(d)+(c)+(b)+(a)+"0");
                                                                                                                                                sum++;
                                                                                                                                                if(sum>=1000){
                                                                                                                                                            break outside;
                                                                                                                                                }
                                                                                                                                    }
                                                                                                                        }
                                                                                                            }
                                                                                                }
                                                                                    }
                                                                        }
                                                            }
                                                }
                                    }
                        }
}
}

ね?酷いでしょ?因みに上の方で書いたのは初めに右辺の各桁の変数を置いて、それを素因数分解。その後その素因数を何個か使って各桁の値が異なる5桁の数が作れるか調べる。作れたら10桁パンデジタル数をその5桁で割って出てきた5桁の数も各桁が異なるかを判断。全てがうまくいったら出力。というやり方でやれたら良いなぁという幻想のもと作られた悲しい関数たちです。dpの関数らへんで諦めたから完成すらしてないけどね。とりあえず自分はこんな感じで解いたってだけです。