A:因为是三位太太共同的 所以要平摊。
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <algorithm> 5 #include <iostream> 6 #include <cmath> 7 #include <queue> 8 #include <map> 9 #include <stack> 10 #include <list> 11 #include <vector> 12 #include <ctime> 13 #define LL __int64 14 #define eps 1e-8 15 using namespace std; 16 int jin(double x) 17 { 18 if(x - x/1 < 0.5) 19 return x/1 ; 20 else return x/1 +1; 21 } 22 int main() 23 { 24 25 int n ; 26 scanf("%d",&n); 27 for(int i = 1;i <= n;i++) 28 { 29 int x, y ,z ; 30 scanf("%d %d %d",&x,&y,&z); 31 32 33 x = jin(1.0*x * z/(x+y) + 1.0*(x-y) *z/(x+y)); 34 y = z - x; 35 printf("%d\n",x); 36 } 37 return 0; 38 }
B:水模拟
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <algorithm> 5 #include <iostream> 6 #include <cmath> 7 #include <queue> 8 #include <map> 9 #include <stack> 10 #include <list> 11 #include <vector> 12 #include <ctime> 13 #define LL __int64 14 #define eps 1e-8 15 using namespace std; 16 char str[10004]; 17 int sta[100005]; 18 int change(int l,int r) 19 { 20 int ans = 0 ; 21 for(int i= l; i <= r ; i ++) 22 { 23 ans *= 10 ; 24 ans += str[i] - ‘0‘; 25 } 26 return ans; 27 } 28 int main() 29 { 30 int t ; 31 scanf("%d",&t); 32 while(t--) 33 { 34 int n ; 35 int s = 0 ; 36 scanf("%d",&n); 37 for(int i = 1;i <= n;i++) 38 { 39 scanf("%s",str); 40 if(str[0] == ‘L‘) 41 { 42 sta[i] = 1; 43 s -- ; 44 } 45 else if(str[0] == ‘R‘) 46 { 47 sta[i] = 0 ; 48 s ++; 49 } 50 else { 51 52 //int k = change(8,p); 53 int k ; 54 scanf("%s",str); 55 scanf("%d",&k); 56 //printf("%d\n",k); 57 sta[i] = sta[k]; 58 if(sta[i]) 59 { 60 s -- ; 61 }else s ++ ; 62 } 63 } 64 printf("%d\n",s); 65 } 66 return 0 ; 67 }
C:细节题 ,用map代码量可能会少一点
1 // File Name: c.cpp 2 // Author: darkdream 3 // Created Time: 2014年10月07日 星期二 10时06分00秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #include<stack> 11 #include<bitset> 12 #include<algorithm> 13 #include<functional> 14 #include<numeric> 15 #include<utility> 16 #include<sstream> 17 #include<iostream> 18 #include<iomanip> 19 #include<cstdio> 20 #include<cmath> 21 #include<cstdlib> 22 #include<cstring> 23 #include<ctime> 24 #define LL long long 25 26 using namespace std; 27 char bstr[1000]; 28 char str[200][5][200]; 29 char str1[200][5][200]; 30 int lstr; 31 int lstr1; 32 void solve(char s[][5][200],int &num) 33 { 34 int p = 0 ; 35 if(bstr[1] == ‘}‘) 36 return; 37 38 while(bstr[p] != ‘}‘) 39 { 40 //printf("%d\n",p); 41 num ++ ; 42 int i ; 43 p ++ ; 44 for(i = p ;bstr[i] != ‘:‘ ;i ++) 45 { 46 s[num][1][i-p] = bstr[i]; 47 } 48 //printf("%d %s",i,s[num][1]); 49 s[num][1][i-p] = ‘\0‘; 50 p = i+1 ; 51 //printf(" %s\n",s[num][1]); 52 53 for(i = p ;bstr[i] != ‘,‘&& bstr[i] != ‘}‘;i ++) 54 { 55 s[num][2][i-p] = bstr[i]; 56 } 57 // printf("%d\n",p); 58 s[num][2][i-p] = ‘\0‘; 59 p = i; 60 } 61 } 62 int srt[200]; 63 int srt1[200]; 64 int cmp(int a,int b) 65 { 66 if(strcmp(str[a][1],str[b][1]) < 0) 67 return 1; 68 return 0 ; 69 } 70 int cmp1(int a,int b) 71 { 72 if(strcmp(str1[a][1],str1[b][1]) < 0) 73 return 1; 74 return 0 ; 75 } 76 char *push[200]; 77 char *change[200]; 78 char *sub[200]; 79 int lp,lc,ls; 80 int solve() 81 { 82 lp = lc = ls = 0; 83 int p = 1 ; 84 for(int i = 1; i <= lstr1 ;i ++) 85 { 86 int ok = 0 ; 87 int x = srt1[i]; 88 for(int j = p;j <= lstr; j ++) 89 { 90 int y = srt[j]; 91 if(strcmp(str[y][1],str1[x][1]) == 0 ) 92 { 93 for(int s = p ;s < j;s ++) 94 { 95 ls ++; 96 sub[ls] = str[srt[s]][1]; 97 //printf("%s\n",str[srt[p]][1]); 98 } 99 p = j+1; 100 if(strcmp(str[y][2],str1[x][2]) != 0 ) 101 { 102 lc ++; 103 change[lc] = str[y][1]; 104 } 105 ok = 1; 106 break; 107 } 108 } 109 if(!ok) 110 { 111 lp ++ ; 112 push[lp] = str1[x][1]; 113 //printf(" %d %s************************\n",x,str1[x][1]); 114 } 115 } 116 for(;p <= lstr; p ++) 117 { 118 ls ++ ; 119 sub[ls] = str[srt[p]][1]; 120 //printf("%s\n",str[srt[p]][1]); 121 } 122 if(lp != 0 ) 123 { 124 printf("+"); 125 for(int i = 1;i <= lp ;i ++) 126 printf(i == 1?"%s":",%s",push[i]); 127 printf("\n"); 128 } 129 if(ls != 0 ) 130 { 131 printf("-"); 132 for(int i = 1;i <= ls ;i ++) 133 printf(i == 1?"%s":",%s",sub[i]); 134 printf("\n"); 135 } 136 if(lc != 0 ) 137 { 138 printf("*"); 139 for(int i = 1;i <= lc ;i ++) 140 printf(i == 1?"%s":",%s",change[i]); 141 printf("\n"); 142 } 143 if(lp == 0 && ls == 0 && lc == 0 ) 144 { 145 return 0; 146 } 147 return 1; 148 } 149 int main(){ 150 int n ; 151 scanf("%d",&n); 152 while(n--) 153 { 154 lstr = 0 ; 155 lstr1 = 0 ; 156 scanf("%s",bstr); 157 solve(str,lstr); 158 /*for(int i = 1;i <= lstr;i ++) 159 { 160 printf("%s %s ***",str[i][1],str[i][2]); 161 } 162 printf("***\n");*/ 163 scanf("%s",bstr); 164 solve(str1,lstr1); 165 /*for(int i = 1;i <= lstr1;i ++) 166 { 167 printf("%s %s ***",str1[i][1],str1[i][2]); 168 }*/ 169 for(int i =1;i <= lstr;i ++) 170 srt[i] = i ; 171 sort(srt+1,srt+1+lstr,cmp); 172 for(int i =1;i <= lstr1;i ++) 173 srt1[i] = i ; 174 sort(srt1+1,srt1+1+lstr1,cmp1); 175 if(!solve()) 176 printf("No changes\n"); 177 printf("\n"); 178 } 179 return 0; 180 }
D:从小数点后枚举这一位 是 0 ,还是 1 装换成大数浮点形 平方以后和 n 比较,确定这一位 ,一直确定到 130位就行
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <sstream> 5 #include <algorithm> 6 #include <cmath> 7 using namespace std; 8 int a1[10010],a2[10010],b[10000],c[10000],l1,l2,s[110000]; 9 int l3,l4,l5,point,point2,point3,point1; 10 char ans[1000]; 11 char ss[23]; 12 int chengfa() 13 { 14 int pos,i,j; 15 memset(s,0,sizeof(s)); 16 for (i=1;i<=l4;i++) 17 for (j=1,pos=i;j<=l4;j++) 18 s[pos++]+=a2[i]*a2[j]; 19 pos-=1; 20 for (i=1;i<=pos;i++) 21 if (s[i]>=10) 22 { 23 if (i==pos) pos++; 24 s[i+1]+=s[i]/10; 25 s[i]%=10; 26 } 27 return pos; 28 } 29 void jia() 30 { 31 int p=1,i; 32 if (point > point1) 33 { 34 for (i=1;i<=point - point1;i++) 35 a2[p++]=a1[i]; 36 int tt=1; 37 for (i=point - point1+1;i<=l1;i++) 38 a2[p++]=a1[i]+c[tt++]; 39 point2=point; 40 } 41 else 42 { 43 for (i=1;i<=point1-point;i++) 44 a2[p++]=c[i]; 45 int tt=i; 46 for (i=1;i<=l1;i++) 47 a2[p++]=a1[i]+c[tt++]; 48 point2=point1; 49 } 50 int kk=0; 51 p--; 52 for (i=1;i<=p;i++) 53 { 54 a2[i]+=kk; 55 kk=a2[i]/10; 56 a2[i]%=10; 57 } 58 if (kk!=0) a2[++p]=kk; 59 l4=p; 60 } 61 int gobj() 62 { 63 int sl=l5,bl=l2; 64 if (sl-point3>bl) return 1; 65 else if (sl-point3<bl) return -1; 66 while (sl>0 && bl>0) 67 { 68 if (s[sl]>b[bl]) return 1; 69 if (s[sl]<b[bl]) return -1; 70 sl--;bl--; 71 } 72 if (sl==0) return 0; 73 else return 1; 74 } 75 int main() 76 { 77 int T,n; 78 scanf("%d",&T); 79 while (T--) 80 { 81 memset(ans,0,sizeof(ans)); 82 memset(a1,0,sizeof(a1)); 83 memset(a2,0,sizeof(a2)); 84 memset(c,0,sizeof(c)); 85 memset(b,0,sizeof(b)); 86 scanf("%d",&n); 87 getchar(); 88 scanf("%s",&ss); 89 int m=sqrt(n); 90 int mm=m; 91 int j=1; 92 l1=0; 93 point=0; 94 while (mm) 95 { 96 a1[j++]=mm % 10; 97 mm/=10; 98 l1++; 99 } 100 point=0; 101 mm=n; 102 j=1;l2=0; 103 while (mm) 104 { 105 b[j++]=mm%10; 106 mm/=10; 107 l2++; 108 } 109 c[1]=1;l3=1; 110 int i; 111 for (i=1;i<=130;i++) 112 { 113 for (j=1;j<=l3;j++) 114 c[j]*=5; 115 int kk=0; 116 for (j=1;j<=l3;j++) 117 { 118 c[j]+=kk; 119 kk=c[j]/10; 120 c[j]=c[j]%10; 121 } 122 if (kk) c[++l3]=kk; 123 point1=i; 124 jia(); 125 /*for (j=l4;j>0;j--) 126 { 127 if (point2==j) cout<<"."; 128 printf("%d",a2[j]); 129 } 130 cout<<endl;*/ 131 l5=chengfa(); //平方后长度 132 point3=2*point2; //平方后小数点位置 133 /*for (j=l5;j>0;j--) 134 { 135 if (point3==j) cout<<"."; 136 printf("%d",s[j]); 137 } 138 cout<<endl;*/ 139 int re=gobj(); 140 if (re==1) //1:s>b -1:s<b 141 ans[i-1]=‘0‘; 142 else if (re==-1) 143 { 144 ans[i-1]=‘1‘; 145 memset(a1,0,sizeof(a1)); 146 for (j=1;j<=l4;j++) 147 a1[j]=a2[j]; 148 l1=l4; 149 point=point2; 150 } 151 else break; 152 } 153 for (j=i;j<=130;j++) 154 ans[i]=‘0‘; 155 ans[130]=‘\0‘; 156 //cout<<ans<<endl; 157 cout<<strstr(ans,ss) - ans << endl; 158 } 159 return 0; 160 }
E:这题字典树或者 字符串排序(只对下标排序都行 见:http://www.cnblogs.com/zyue/p/4007476.html)
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <algorithm> 5 #include <iostream> 6 #include <cmath> 7 #include <queue> 8 #include <map> 9 #include <stack> 10 #include <list> 11 #include <vector> 12 #include <ctime> 13 #define LL __int64 14 #define eps 1e-8 15 using namespace std; 16 string str[1005]; 17 int b[1005]; 18 bool cmp(int a, int b) 19 { 20 return str[a] < str[b]; 21 } 22 int main() 23 { 24 int t ; 25 scanf("%d",&t); 26 while(t--) 27 { 28 int n ; 29 scanf("%d",&n); 30 for(int i = 1;i <= n;i ++) 31 cin >> str[i] ; 32 for(int i =1;i <= n;i ++) 33 b[i] = i ; 34 sort(b+1,b+1+n,cmp); 35 /* for(int i = 1;i <= n;i ++) 36 printf("%d ",b[i]); 37 printf("\n"); 38 */ 39 int k = 0 ; 40 int tk ; 41 int ans = 0 ; 42 for(int i = 2;i <= n;i ++) 43 { 44 int len1 = str[b[i-1]].size(); 45 int len2 = str[b[i]].size(); 46 for(int j = 0 ;j < len1;j++) 47 { 48 if(str[b[i-1]][j] != str[b[i]][j]) 49 { 50 tk = j + 1; 51 break; 52 } 53 } 54 ans += max(k,tk); 55 // printf("%d %d %d\n",k,tk,ans); 56 k = tk; 57 58 } 59 ans += k ; 60 printf("%d\n",ans); 61 } 62 return 0 ; 63 }
F:这个题我们可以看到 点数只有 16个点 我们可以 二进制枚举出要选点所有的情况以后 然后再用prime求出一种情况的答案。比较求得最大值
不过这里有个地方要注意,两点之间可能有多条边,如果是链接矩阵的话要判断一下再加边入阵。
1 #include<cstdio> 2 #include<cstring> 3 #include<map> 4 #include<vector> 5 #include<cmath> 6 #include<cstdlib> 7 #include<stack> 8 #include<queue> 9 #include <iomanip> 10 #include<iostream> 11 #include<algorithm> 12 using namespace std ; 13 const int inf = 1<<30 ; 14 15 int n,m,k,tmp; 16 int a[100],g[50][50],dist[100],vis[100],s[100]; 17 18 19 int work1() 20 { 21 int now ,pos=0,cost=0,MIN=inf,num; 22 //memset(vis,0,sizeof(vis)); 23 for(int i = 0 ; i < tmp; i++ ) 24 { 25 now =s[i] ; 26 dist[now] = g[1][now] ; 27 vis[now]=0; 28 // printf("%d ",dist[now]) ; 29 } // puts(""); 30 vis[1]=1;num=0; 31 for(int i = 1 ; i < tmp ; i++) 32 { 33 MIN=inf ; 34 for(int j = 0 ; j < tmp;j++) 35 { 36 now = s[j] ; 37 if(MIN > dist[now] && !vis[now]) 38 { 39 MIN=dist[now] ; 40 pos=now ; 41 } 42 } 43 cost += MIN ; 44 vis[pos]=1; 45 for(int j = 0 ; j < tmp; j++) 46 { 47 now= s[j] ; 48 if(dist[now] > g[pos][now] && !vis[now]) 49 dist[now] = g[pos][now] ; 50 } 51 } 52 int sum = 0; 53 for(int i = 0 ; i < tmp ; i++) 54 { now = s[i] ; 55 sum += a[now] ; 56 if(vis[now]) num++; 57 } 58 if(cost <= k && num == tmp) 59 return sum ; 60 else return 0 ; 61 } 62 63 int print_subset(int x) 64 { 65 tmp =0 ; 66 for(int i=0;i<n;i++) 67 if(x&(1<<i)) 68 { 69 s[tmp++]=i+1; 70 71 } 72 if(s[0]!=1 ) 73 return 0; 74 else return 1; 75 } 76 77 int main() 78 { 79 int t ,u,v,w; 80 scanf("%d",&t) ; 81 while(t--) 82 { 83 scanf("%d%d%d",&n,&m,&k); 84 for(int i = 1 ; i <= n ; i++) 85 for(int j = 1 ; j <= n ;j++) 86 g[i][j]=inf ; 87 for(int i = 1 ; i <= n ; i++) 88 scanf("%d",&a[i]) ; 89 90 for(int i = 1 ; i <= m ; i++) 91 { 92 scanf("%d%d%d",&u,&v,&w) ; 93 if(g[u][v]>w) 94 g[u][v]=g[v][u]=w ; 95 } 96 int ans = 0 ; 97 98 for(int i=0;i<(1<<n);i++) 99 { 100 int flag = print_subset(i); 101 if(tmp==1) 102 { 103 ans = max(ans,a[1]) ; 104 continue; 105 } 106 int ans1 ; 107 if(flag ) 108 { 109 ans1 = work1() ; 110 if(ans1 > ans) 111 { 112 ans = ans1; 113 /* for(int j = 0 ; j < tmp ; j++) 114 printf("%d ",s[j]) ; 115 puts(""); */ 116 } 117 118 } 119 else continue ; 120 121 } 122 123 printf("%d\n",ans) ; 124 } 125 return 0; 126 }
J:注意到点只有 1000 ,所以直接暴力DP就行 dp[i] 表示为到a[i]这个点最长的公共递增长度。
每一次输入b[j],从头开始枚举,a[i] < b[j] 且 长度最长的值,到了 b[j] = a[i],更新dp[i] 即可
1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <algorithm> 5 #include <iostream> 6 #include <cmath> 7 #include <queue> 8 #include <map> 9 #include <stack> 10 #include <list> 11 #include <vector> 12 #include <ctime> 13 #define LL __int64 14 #define eps 1e-8 15 using namespace std; 16 int a[1004]; 17 int b[1004]; 18 int dp[1004]; 19 int main() 20 { 21 int numa,numb; 22 int t; 23 scanf("%d",&t); 24 while(t--) 25 { 26 scanf("%d",&numa); 27 for(int i= 1;i<= numa;i ++) 28 scanf("%d",&a[i]); 29 30 scanf("%d",&numb); 31 memset(dp,0,sizeof(dp)); 32 for(int i= 1;i<= numb;i ++) 33 { 34 scanf("%d",&b[i]); 35 int mx = 0 ; 36 for(int j = 1;j <= numa ;j ++) 37 { 38 if(b[i] > a[j]) 39 { 40 mx = max(mx,dp[j]); 41 }else if(b[i] == a[j]){ 42 dp[j] = mx+1; 43 } 44 } 45 } 46 int mx = 0 ; 47 for(int i= 1;i <= numa;i ++) 48 { 49 mx = max(dp[i],mx); 50 } 51 printf("%d\n",mx); 52 } 53 return 0 ; 54 }
时间: 2024-11-07 14:45:31