FJUTOJ
1279
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <queue> #include <cmath> #include <map> #include <string> using namespace std; const int N=10000+5; struct node { char str[10]; int deep; }Node; node s,e,now,tmp; char str[10],ttr[10]; int vis[N]={0}; int use[10005]={0}; void get_prime() { ///0 is prime int m=sqrt(N+0.5); for(int i=2;i<=m;i++) { if(!vis[i]) { for(int j=i*i;j<=N;j+=i) { vis[j]=1; } } } } bool is_prime(char num[]) { int data=0; for(int i=0;i<4;i++) { data=data*10+num[i]-'0'; } if(vis[data]==0) { vis[data]=1;///去重 return 1; } return 0; } bool bfs() { queue<node>que; que.push(s); while(!que.empty()) { now=que.front(); que.pop(); if(!strcmp(now.str,e.str)) { printf("%d ",now.deep); return 1; } for(int i=0;i<4;i++) { strcpy(tmp.str,now.str); for(int j=0;j<=9;j++) { if(i==0&&j==0) continue; tmp.str[i]=j+'0'; if(is_prime(tmp.str)) { tmp.deep=now.deep+1; que.push(tmp); } } } } puts("Impossible"); return 0; } int main() { int t; while(~scanf("%d",&t)) { while(t--) { memset(vis,0,sizeof(vis)); get_prime(); memset(use,0,sizeof(use)); scanf("%s%s",s.str,e.str); s.deep=0; bfs(); } } return 0; }
1332
太毒了,先按3*3 4*4 5*5 6*6 确定箱子数,在拿1*1 2*2填细节会少一点
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; int box[7]={0}; int main() { while(1) { box[0]=0; for(int i=1;i<=6;i++){ scanf("%d",&box[i]); box[0]|=box[i]; } if(!box[0]){ break; } int ans=0; ans=(box[3]+3)/4+box[4]+box[5]+box[6]; ///2 int left=box[4]*5; if(box[3]%4==3){ left++; } else if(box[3]%4==2){ left+=3; } else if(box[3]%4==1){ left+=5; } if(left<box[2]){ ans+=(box[2]-left+8)/9; } ///1 left=36*ans-36*box[6]-25*box[5]-16*box[4]-9*box[3]-4*box[2]; if(left<box[1]){ ans+=(box[1]-left+35)/36; } printf("%d ",ans); } return 0; }
1008
#include <bits/stdc++.h> using namespace std; char str[1005][1005]; int pos=0,maxLen=0; int main() { while(gets(str[pos])){ maxLen=max(maxLen,(int)strlen(str[pos++])); } //printf("max=%d ",maxLen); for(int i=0;i<=maxLen+1;i++){ printf("*"); } puts(""); int flag=1; for(int i=0;i<pos;i++) { int len=strlen(str[i]); int left=maxLen-len; int a,b; a=b=left/2; if(left&1){ if(flag){ a=a; flag=0; } else{ a++; flag=1; } } b=left-a; //printf("[%d %d len=%d] ",a,b,len); printf("*"); while(a--)printf(" "); printf("%s",str[i]); while(b--)printf(" "); printf("* "); } for(int i=0;i<=maxLen+1;i++){ printf("*"); } puts(""); return 0; } /** * 5 *4 5 * 5 *5 4 * Round *2 3 * Round *2 3 */
1205
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 1005; char str[maxn]; int main() { while(~scanf("%s",str)&&str[0]!='0') { int num=0; int len=strlen(str); for(int i=0;i<len;i++){ num=(num*10+str[i]-'0')%17; } if(num==0){ puts("1"); } else{ puts("0"); } } return 0; }
1955
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; int main() { int n,m; while(~scanf("%d%d",&n,&m)&&(n||m)) { int s=0; for(int i=2;i<=n;i++) { s=(s+m)%i; } printf("%d %d %d ",n,m,s+1); } return 0; }
1299
#include <cstdio> int main() { int t,s,u; scanf("%d",&t); while(t--) { scanf("%d%d",&s,&u); puts("1"); } }
1210
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 1005; char str[maxn]; int main() { while(~scanf("%s",str)){ int ans=strlen(str); int a=-1,b=-1,c=-1; int len=strlen(str); for(int i=0;i<len;i++){ if(str[i]=='a'){ a=i; if(b!=-1&&c!=-1){ ans=min(ans,a-min(b,c)+1); } } else if(str[i]=='b'){ b=i; if(a!=-1&&c!=-1){ ans=min(ans,b-min(a,c)+1); } } else if(str[i]=='c'){ c=i; if(a!=-1&&b!=-1){ ans=min(ans,c-min(a,b)+1); } } } printf("%d ",ans); } return 0; }
1208
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1005; int n,m,arr[maxn][maxn],dp[maxn][maxn]; int main() { while(~scanf("%d%d",&n,&m)) { memset(arr,0,sizeof(arr)); memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%d",&arr[i][j]); } } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { dp[i][j]=max(max(max(dp[i][j-1],dp[i-1][j]),dp[i-1][j]+arr[i][j]),dp[i][j-1]+arr[i][j]); } } printf("%d ",dp[n][m]); } return 0; }
1202
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1e5+7; long long t,n,m,x,y,arr[maxn]; long long toRight[maxn],toLeft[maxn]; int main() { scanf("%I64d",&t); while(t--) { toRight[1]=0; scanf("%I64d%I64d",&n,&m); for(int i=2;i<=n;i++){ scanf("%I64d",&arr[i]); toRight[i]=arr[i]+toRight[i-1]; } for(int i=1;i<=m;i++) { scanf("%I64d%I64d",&x,&y); long long beginPos=(i-1)%n+1; long long ans=0; if(x<y){ if(beginPos<=x){///b x y ans=toRight[y]-toRight[beginPos]; } else{///x b y ans=2*toRight[n]-toRight[beginPos]+toRight[y]; } } else{///y x ans=2*toRight[n]-toRight[beginPos]-toRight[y]; } cout<<ans<<endl; } } return 0; }
2094
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <queue> using namespace std; const int maxn = 10; int mp[maxn][maxn]; char str[5],ttr[5]; struct node { int x,y,deep; }s,e,tmp,now; int Next[8][2]={-2,1,-2,-1,-1,2,-1,-2,2,1,2,-1,1,2,1,-2}; void bfs() { queue<node>q; q.push(s); mp[s.x][s.y]=1; while(!q.empty()) { now=q.front(); q.pop(); if(now.x==e.x&&now.y==e.y) { printf("To get from %s to %s takes %d knight moves. ",str,ttr,now.deep); return ; } for(int i=0;i<8;i++) { int xx=now.x+Next[i][0]; int yy=now.y+Next[i][1]; if(xx<0||yy<0||xx>7||yy>7||mp[xx][yy]){ continue; } tmp.x=xx; tmp.y=yy; tmp.deep=now.deep+1; q.push(tmp); } } } int main() { while(~scanf("%s%s",str,ttr)) { memset(mp,0,sizeof(mp)); s.x=str[0]-'a'; s.y=str[1]-'1'; e.x=ttr[0]-'a'; e.y=ttr[1]-'1'; s.deep=0; bfs(); } return 0; }
1237
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <map> using namespace std; const int maxn = 1e5+7; char str[maxn]; string s,t; map<string,string>mmp; map<string,string>::iterator it; int main() { while(gets(str)) { if(str[0]==0){break;} for(int i=0;i<strlen(str);i++) { if(str[i]==' '){ str[i]=0; i++; s=str; t=str+i; mmp[t]=s; break; } } } while(~scanf("%s",str)) { if(mmp.count(str)) { cout<<mmp.find(str)->second<<endl; } else{ cout<<"eh"<<endl; } } return 0; }
(11)
2092
#include <bits/stdc++.h> using namespace std; char mp[105][105]; int sum,mov[8][2]={-1,-1,-1,0,-1,1,0,1,0,-1,1,1,1,-1,1,0},n,m; void dfs(int x,int y) { if(!mp[x][y]||mp[x][y]=='*') { return ; } mp[x][y]='*'; for(int i=0;i<8;i++) { dfs(x+mov[i][0],y+mov[i][1]); } } int main() { while(~scanf("%d%d",&n,&m)&&n&&m) { sum=0; memset(mp,0,sizeof(mp)); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>mp[i][j]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(mp[i][j]=='@') { sum++; dfs(i,j); } } } printf("%d ",sum); } return 0; }
1446
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <queue> #include <vector> #include <map> using namespace std; const int maxn = 1005; int n,m,x; vector<pair<int,int> >E[maxn]; int inq[maxn],dis[maxn]; void init() { for(int i=1; i<=n; i++) { E[i].clear(); } } int SPFA(int s,int t) { int now; queue<int>q; q.push(s); dis[s]=0,inq[s]=1; while(!q.empty()) { now=q.front(); q.pop(); inq[now]=0; for(int i=0;i<E[now].size();i++) { int to=E[now][i].first; if(dis[to]>dis[now]+E[now][i].second) { dis[to]=dis[now]+E[now][i].second; if(!inq[to]){ inq[to]=1; q.push(to); } } } } return dis[t]; } void show() { for(int i=1; i<=n; i++) { for(int j=0; j<E[i].size(); j++) { printf("[%d %d] ",E[i][j].first,E[i][j].second); } puts(""); } } int main() { int u,v,w,ans; while(~scanf("%d%d%d",&n,&m,&x)) { init(); for(int i=1; i<=m; i++) { scanf("%d%d%d",&u,&v,&w); E[u].push_back(make_pair(v,w)); } //show(); ans=0; for(int i=1; i<=n; i++) { for(int j=0; j<maxn; j++) { inq[j]=0; dis[j]=1e9; } int To=SPFA(i,x); for(int j=0; j<maxn; j++) { inq[j]=0; dis[j]=1e9; } int Back=SPFA(x,i); ans=max(To+Back,ans); } printf("%d ",ans); } return 0; }
1409
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> const int N=100000+5; using namespace std; int vis[N]={0}; void get_prime() { int m=sqrt(N+0.5); for(int i=2;i<=m;i++) { if(!vis[i]) { for(int j=i*i;j<=N;j+=i) { vis[j]=1; } } } } int main() { get_prime(); int num; int cas=1; while(~scanf("%d",&num)) { if(num<=0){break;} printf("%d: ",cas++); if(num==1||num==2)puts("no"); else if(vis[num])puts("no"); else puts("yes"); } return 0; }
1983
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; int main() { char str[105],ret[105]={0}; scanf("%s",str); long long num=(str[0]-'0')*10000+(str[1]-'0')+(str[2]-'0')*1000+(str[3]-'0')*10+(str[4]-'0')*100; long long ans=1; for(int i=1;i<=5;i++){ ans=(ans*num)%100000; } //cout<<ans<<endl; int pos=5; while(pos--) { ret[pos]=ans%10+'0'; ans/=10; } printf("%s ",ret); return 0; }
1240
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 26; int t,n; char str[10000+7]; typedef struct Trie { Trie *next[maxn]; int v; }Trie; Trie *root; void createTrie(char str[]) { int len=strlen(str); Trie *p=root,*q; for(int i=0;i<len;i++) { int id=str[i]-'0'; if(p->next[id]==NULL) { q=(Trie*)malloc(sizeof(Trie)); q->v=1; for(int j=0;j<maxn;j++){ q->next[j]=NULL; } p->next[id]=q; p=p->next[id]; } else { p->next[id]->v++; p=p->next[id]; } } p->v=-1; } int findTrie(char str[]) { int len=strlen(str); Trie *p=root; for(int i=0;i<len;i++) { int id=str[i]-'0'; p=p->next[id]; if(p==NULL){ ///不存在前缀 return 0; } if(p->v==-1){ ///字符集中已有串是此串的前缀 return -1; } } return -1; ///前缀 } int dealTrie(Trie *T) { if(T==NULL){ return 0; } for(int i=0;i<maxn;i++){ if(T->next[i]!=NULL){ dealTrie(T->next[i]); } } free(T); return 0; } int main() { while(~scanf("%d",&t)) { while(t--) { int flag=0; root=(Trie*)malloc(sizeof(Trie)); memset(root->next,0,sizeof(root->next)); scanf("%d",&n); while(n--) { scanf("%s",str); if(findTrie(str)==-1){ flag=1; } if(!flag){ createTrie(str); } } if(flag){puts("NO");} else{puts("YES");} dealTrie(root); } } return 0; }
1233
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <map> using namespace std; string s,t; map<string,string>mmp; map<string,string>::iterator it; char str[3005],ttr[3005]; int main() { while(gets(str)) { if(!strcmp(str,"START")){continue;} if(!strcmp(str,"END")){break;} int len=strlen(str); for(int i=0;i<len;i++){ if(str[i]==' '){ str[i]='