闭关修炼屯题中,期末考完A
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\n",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\n",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\n",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]\n",a,b,len); printf("*"); while(a--)printf(" "); printf("%s",str[i]); while(b--)printf(" "); printf("*\n"); } 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",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\n",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\n",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.\n",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\n",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\n",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\n",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]='\0'; s=str; t=str+i+1; mmp[t]=s; break; } } } while(gets(str)) { if(!strcmp(str,"START")){continue;} if(!strcmp(str,"END")){break;} int len=strlen(str),pos=0; for(int i=0;i<len;i++){ if(str[i]>='a'&&str[i]<='z') { ttr[pos++]=str[i]; } else { ttr[pos]=0; if(mmp.count(ttr)){ cout<<mmp.find(ttr)->second; } else{ cout<<ttr; } printf("%c",str[i]); pos=0; } } puts(""); } return 0; }
1821
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int maxn = 1005; int main() { char str[maxn]; while(~scanf("%s",str)) { int flag=0; for(int i=0;i<strlen(str);i++){ if(str[i]=='.'&&str[i-1]=='9'){ puts("GOTO Vasilisa."); flag=1; break; } } if(flag){continue;} for(int i=0;i<strlen(str);i++){ if(str[i+1]=='.'){ int num=str[i+2]-'0'; if(num>=5){ str[i]++; } putchar(str[i]); break; } putchar(str[i]); } puts(""); } return 0; }
2357
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int maxn = 20000+7; int n,s,arr[maxn]; int main() { while(~scanf("%d%d",&n,&s)) { for(int i=0;i<n;i++){ scanf("%d",&arr[i]); } sort(arr,arr+n); int ans=0; for(int i=0;i<n;i++){ ans+=upper_bound(arr+i+1,arr+n,s-arr[i])-arr-i-1; } printf("%d\n",ans); } return 0; }
1742
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int maxn = 1e6+7; int a[30],b[15]; char str[maxn]; int main() { while(~scanf("%s",str)) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); for(int i=0;i<strlen(str);i++){ if(str[i]>='0'&&str[i]<='9'){ b[str[i]-'0']++; } else{ a[str[i]-'a']++; } } int max_pos=0,flag=1,max_val=0; for(int i=0;i<26;i++){ if(a[i]>max_val){ max_val=a[i]; max_pos=i; } } for(int i=0;i<10;i++){ if(b[i]>max_val){ max_val=b[i]; max_pos=i; flag=2; } } if(flag==1){ printf("%c %d\n",max_pos+'a',max_val); } else{ printf("%c %d\n",max_pos+'0',max_val); } } return 0; }
(20)
1551
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <queue> using namespace std; const int maxn = 105; struct node { int to,w,next; }arr[maxn*maxn*2]; int first[maxn],sign,n,in[maxn]; void init() { memset(first,0,sizeof(first)); memset(in,0,sizeof(in)); sign=1; } void add_edge(int u,int v,int w) { arr[sign].w=w; arr[sign].to=v; arr[sign].next=first[u]; first[u]=sign++; } void toposort() { queue<int>q; for(int i=1;i<=n;i++){ if(in[i]==0){ q.push(i); } } int f=1; while(!q.empty()){ int now=q.front(); q.pop(); if(f){ printf("%d",now); f=0; } else{ printf(" %d",now); } for(int i=first[now];i;i=arr[i].next){ in[arr[i].to]--; if(in[arr[i].to]==0){ q.push(arr[i].to); } } } puts(""); } int main() { int u,v,w; while(~scanf("%d",&n)) { init(); for(int i=1;i<=n;i++){ while(~scanf("%d",&v)&&v){ add_edge(i,v,1); in[v]++; } } toposort(); } return 0; }
1905
#include <bits/stdc++.h> using namespace std; int main() { long long a,b,c; while(~scanf("%I64d%I64d%I64d",&a,&b,&c)){ printf("%I64d\n",min(min(min(2*(a+b),a+b+c),2*(b+c)),2*(a+c))); } return 0; }
2023 两个等于条件都要写
#include <bits/stdc++.h> using namespace std; const int maxn = 10005; bool checkBig(int a,int b,int c,int d) { if(a>=2*b&&a>=2*c&&a>=2*d) { return 1; } return 0; } bool checkSmall(int a,int b,int c,int d) { if(a*2<=b&&a*2<=c&&a*2<=d) { return 1; } return 0; } int main() { string a,b,c,d; int la,lb,lc,ld,pos=0,flag=0; bool finds=0; getline(cin,a); getline(cin,b); getline(cin,c); getline(cin,d); la=a.length()-2; lb=b.length()-2; lc=c.length()-2; ld=d.length()-2; //printf("%d %d %d %d\n",la,lb,lc,ld); if(checkBig(la,lb,lc,ld)) { if(finds) { puts("C");flag=1; } finds=1; pos=1; } if(checkSmall(la,lb,lc,ld)) { if(finds) { puts("C");flag=1; } finds=1; pos=1; } /// if(checkBig(lb,lc,ld,la)) { if(finds) { puts("C");flag=1; } finds=1; pos=2; } if(checkSmall(lb,lc,ld,la)) { if(finds) { puts("C");flag=1; } finds=1; pos=2; } /// if(checkBig(lc,ld,la,lb)) { if(finds) { puts("C");flag=1; } finds=1; pos=3; } if(checkSmall(lc,ld,la,lb)) { if(finds) { puts("C");flag=1; } finds=1; pos=3; } /// if(checkBig(ld,la,lb,lc)) { if(finds) { puts("C");flag=1; } finds=1; pos=4; } if(checkSmall(ld,la,lb,lc)) { if(finds) { puts("C");flag=1; } finds=1; pos=4; } if(pos&&!flag) { switch (pos) { case 1: puts("A"); break; case 2: puts("B"); break; case 3: puts("C"); break; case 4: puts("D"); break; } } else if(!flag){ puts("C"); } return 0; }
2227
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { ll l1,r1,l2,r2,k,ans; while(cin>>l1>>r1>>l2>>r2>>k) { if(l2<l1){ swap(l1,l2); swap(r1,r2); } if(r1<l2){ puts("0"); } else{ if(r2<=r1){ ans=r2-l2+1; if(k<=r2&&k>=l2){ ans--; } } else{ ans=r1-l2+1; if(k<=r1&&k>=l2){ ans--; } } cout<<ans<<endl; } } return 0; }
*2313
#include <bits/stdc++.h> using namespace std; const int maxn = 1005; int vis[maxn]; int main() { int t,n,m,value; while(~scanf("%d",&t)) { while(t--) { memset(vis,0,sizeof(vis)); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ int ret=0; for(int j=1;j<=m;j++){ scanf("%d",&value); ret=ret*2+value; } vis[i]=ret; } int ans=0; for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ if(vis[i]&vis[j]){ ans++; } } } printf("%d\n",ans); } } return 0; }