1. 程式人生 > >CSU 1826: Languages 1828: Dictionary 1830: FarAway 1831: Found 1835: Pry Sequence Transformation

CSU 1826: Languages 1828: Dictionary 1830: FarAway 1831: Found 1835: Pry Sequence Transformation

#include<iostream>
#include<string>
#include<cstdio>
#include<cstring>
#include<vector>
#include<math.h>
#include<map>
#include<queue> 
#include<sstream> 
#include<algorithm>

using namespace std;

const double pi=acos(-1.0);
const int inf = 0x3f3f3f3f
; const int maxn=100005; const double eps=1e-8; int n; map<string,string>mp;//map string a,b,c; int main() { scanf ("%d",&n); mp.clear();//清空 getchar(); //得將換行符吃掉,沒加這個就過不了 for (int i=0;i<n;i++){ getline(cin,a); stringstream ss(a);//定義 ss>>b;//先輸入語言名稱
while (ss>>c){ for (int j=0;j<c.size();j++){ if (c[j]>='A'&&c[j]<='Z'){ c[j]+=32;//改成小寫 } } mp[c]=b;//對映 } } while (getline(cin,a)){ string tmp; int len=a.size(); for
(int i=0;i<len;i++){//把標點符號改成空格 if (a[i]==','||a[i]=='.'||a[i]=='!'||a[i]==';'||a[i]=='?'||a[i]=='('||a[i]==')'){ a[i]=' '; } } stringstream ss1(a);//定義 while (ss1>>tmp){ for (int i=0;i<tmp.size();i++){ if (tmp[i]>='A'&&tmp[i]<='Z'){ tmp[i]+=32;//該小寫 } } if (mp.count(tmp)){ cout<<mp[tmp]<<endl;//如果找到就輸出 break; } } } return 0; }
#include<iostream>
#include<cstdio>
using namespace std;
#define ll long long
int f[10];
void init()
{
    f[1]=1;
    for(int i=2;i<10;i++)
        f[i]=f[i-1]*i;
}
int main()
{
    int N,M;
    char s[10];
    init();
    scanf("%d",&N);
    while(N--)
    {
        int ans=0;
        scanf("%s",s);
        for(int i=0;i<9;i++)
        {
            int temp=0;
            for(int j=i+1;j<9;j++)
                if(s[j]<s[i])temp++;
            ans+=temp*f[9-i-1];
        }
        printf("%d\n",ans+1);
    }
    return 0;
}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <queue>
#include <set>
#include <map>
#include <algorithm>
#include <math.h>
#include <vector>
using namespace std;
typedef long long ll;

const int mod=1e9+7;
const int maxn=1e5+10;

int dis[maxn];

struct Edge{
    int v,val;
};

vector<Edge>G[maxn];

void bfs(){
    queue<int>q;
    q.push(1);
    dis[1]=0;
    while (!q.empty()){
        int u=q.front();q.pop();
        for (int i=0;i<G[u].size();i++){
            int v=G[u][i].v;
            dis[v]=dis[u]+G[u][i].val;
            q.push(v);
        }
    }
}
int C,M;
int main()
{
    int T;
    scanf ("%d",&T);
    while (T--){
        scanf ("%d%d",&C,&M);
        for (int i=0;i<=C;i++)G[i].clear();
        int u,v,val;
        for (int i=0;i<C-1;i++){
            scanf ("%d%d%d",&u,&v,&val);
            G[u].push_back(Edge{v,val});
        }
        bfs();
        int ans=0;
        for (int i=1;i<=C;i++){
            ans=max(dis[i],ans);
        }
        if (ans>=M)printf ("%d\n",ans);
        else printf ("-1\n");
    }   
    return 0;
}
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;

const int mod = 9973; 

int n,m;
long long num;
int mp[105][105];

struct matrix{
    int mat[105][105];
    matrix operator * (const matrix& t) const{
        matrix tmp;
        for (int i=0;i<n*n;i++){
            for (int j=0;j<n*n;j++){
                tmp.mat[i][j]=0;
                for (int k=0;k<n*n;k++){
                    tmp.mat[i][j]+=mat[i][k]*t.mat[k][j]%mod;
                    tmp.mat[i][j]%=mod;
                }
            }
        }
        return tmp;
    }
}res;

matrix Pow(matrix &t,long long num){
    matrix ans;
    memset (ans.mat,0,sizeof (ans.mat));
    for (int i=0;i<n;i++) ans.mat[i][i]=1;
    while(num){
        if (num&1) ans=ans*t;
        num>>=1;
        t=t*t;
    }
    return ans;
}

int main()
{
    int cas;
    scanf ("%d",&cas);
    while (cas--){
        scanf ("%d%d%lld",&n,&m,&num);
        memset (mp,0,sizeof (mp));
        memset (res.mat,0,sizeof (res.mat)); 
        int u,v;
        for (int i=0;i<m;i++){
            scanf ("%d%d",&u,&v);
            mp[u][v]=1;
            mp[v][u]=1;
        }
        for (int i=0;i<n*n;i++){
            int x1=i%n+1,y1=i/n+1;//x1表示a當前的位置,y1表示b當前的位置 
            if (x1==y1) continue;//a,b兩個人的位置不能一樣 
            for (int j=0;j<n*n;j++){
                int x2=j%n+1,y2=j/n+1;//x2表示a下一分鐘可能到達的位置,y1表示b下一分鐘可能到達的位置 
                if(x2==y2)continue;
                if (x1==x2||y1==y2)continue;//a,b移動前後不能一樣 
                if (!mp[x1][x2]||!mp[y1][y2]) continue;
                res.mat[i][j]=1;
            }
        }
        res=Pow(res,num-1);
        int ans=0;
        for (int i=0;i<n*n;i++){
            int x1=i%n+1,y1=i/n+1;
            if (x1==y1)continue;
            //n-1表示的是初始狀態(0,n-1 ==> 也就是一開始a在0,b在n-1的位置) 
            //然後最終在i這個位置相遇,而i這個狀態中,a的位置為i%n+1,b的位置為i/n+1 
            if (!res.mat[n-1][i])continue;
            for (int j=1;j<=n;j++){
                if (mp[x1][j]&&mp[y1][j]){//如果兩個人在下一秒能同時移動到同一點 
                    ans+=res.mat[n-1][i]%mod;
                    ans%=mod; 
                }
            }
        }
        printf ("%d\n",ans);
    }   
    return 0;
 } 
#include<cstdio>
#include<algorithm>
#include<string.h>
using namespace std;
const int MX = 2e4 + 5;
char S[MX],T[MX];
double dp[2][MX];

int val(char c){return c-'a'+1;}
double INS(char c){return 1+val(c)*0.01;}
double REP(char c1,char c2){return c1==c2?0:(val(c1)+val(c2))*0.1;}
int main(){
    int cas;
    int k;
    //freopen("in.txt","r",stdin);
    scanf("%d",&cas);
    while(cas--){
        scanf("%d",&k);
        scanf("%s%s",S+1,T+1);
        int n=strlen(S+1),m=strlen(T+1);
        dp[0][0]=0;
        for(int i=1;i<=k;i++) dp[0][i]=dp[0][i-1]+INS(T[i]);
        int cur,pre;
        for(int i=1;i<=n;i++){
            cur=i%2;
            pre=cur^1;
            dp[cur][0]=i;
            int mx=min(m,i+k+1);
            for(int j=max(1,i-k-1);j<=mx;j++){
                dp[cur][j]=dp[pre][j-1]+REP(S[i],T[j]);
                if(abs(i-j)<=k) dp[cur][j]=min(dp[cur][j],dp[pre][j]+1);
                if(abs(j-i)<=k) dp[cur][j]=min(dp[cur][j],dp[cur][j-1]+INS(T[j]));
            }
        }
        if(dp[cur][m]>k) printf("TOSS\n");
        else printf("%.4f\n",dp[cur][m]);
    }
    return 0;
}