CSU 1826: Languages 1828: Dictionary 1830: FarAway 1831: Found 1835: Pry Sequence Transformation
阿新 • • 發佈:2019-01-29
#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;
}