Codeforces Round #296 (Div. 2)
A
题意:给出长为a,宽为b的纸片,每次以短边作为正方形的边长,问能够得到多少个正方形
先是直接整除个a/b,再用a%b,b作为新的纸片的长和宽,去进行同样的操作
自己做的时候= =模拟了除法的过程(用减法= =)发现超时,于是还特判了一下如果a/b>10000单独处理= =居然当时还过了
= = tle---tle---tle------
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <cmath> 5 #include<stack> 6 #include<vector> 7 #include<map> 8 #include<queue> 9 #include<algorithm> 10 #define mod=1e9+7; 11 using namespace std; 12 13 typedef long long LL; 14 15 int main(){ 16 LL a,b,ans=0; 17 cin>>a>>b; 18 while(1){ 19 if(a<b) swap(a,b); 20 if(b==0) break; 21 ans+=a/b; 22 LL tmp=a%b; 23 a=b; 24 b=tmp; 25 } 26 cout<<ans<<"\n"; 27 return 0; 28 }
B
题意:给出两个长度相同的字符串s,t,定义距离为两个字符串相应位置上字符不同的个数,问经过一次交换能够得到的最小距离,并输出交换的位置
用dp[a][b]分别将在相同位置上,s[i]和t[i]不同的位置记录下来,
如果dp[a][b]和dp[b][a]都存在,那么交换之后,刚好匹配,最大距离减去2 如果只有dp[a][b]存在,那么最大距离减去1
话说这一题,自己做的时候是一点思路都没有,好好学 这一题= =
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <cmath> 5 #include<stack> 6 #include<vector> 7 #include<map> 8 #include<queue> 9 #include<algorithm> 10 #define mod=1e9+7; 11 using namespace std; 12 13 typedef long long LL; 14 const int maxn=200005; 15 char s[maxn],t[maxn]; 16 int dp[105][105]; 17 int has[maxn]; 18 19 int main(){ 20 int i,j,n,ans=0; 21 scanf("%d",&n); 22 cin>>(s+1)>>(t+1); 23 for(i=1;i<=n;i++){ 24 if(s[i]!=t[i]){ 25 dp[s[i]-'a'][t[i]-'a']=i; 26 has[s[i]-'a']=i; 27 ans++; 28 } 29 } 30 31 for(i=0;i<26;i++){ 32 for(j=0;j<26;j++){ 33 if(dp[i][j]!=0&&dp[j][i]!=0){ 34 printf("%d\n",ans-2); 35 printf("%d %d\n",dp[i][j],dp[j][i]); 36 return 0; 37 } 38 } 39 } 40 41 for(i=0;i<26;i++){ 42 for(j=0;j<26;j++){ 43 if(dp[i][j]!=0&&has[j]!=0){ 44 printf("%d\n",ans-1); 45 printf("%d %d\n",dp[i][j],has[j]); 46 return 0; 47 } 48 } 49 } 50 51 printf("%d\n",ans); 52 printf("-1 -1\n"); 53 return 0; 54 }
C
题意:给出长为w,宽为h的玻璃,现在切割n刀,问每切一刀后,最大的玻璃碎片的面积
因为每次一刀下去,当前的区间都会被分成2份,那么为了使面积最大,从当前的横向区间里面选最大的长,从当前的竖向区间里面取最大的宽
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include <cmath> 5 #include<stack> 6 #include<vector> 7 #include<map> 8 #include<queue> 9 #include<set> 10 #include<algorithm> 11 #define mod=1e9+7; 12 using namespace std; 13 14 typedef long long LL; 15 multiset<int> hh,vv; 16 set<int >ph,qv; 17 set<int>::iterator r,l; 18 19 int main(){ 20 char c; 21 int x,w,h,n; 22 scanf("%d%d%d",&w,&h,&n);getchar(); 23 ph.insert(0);ph.insert(h); 24 qv.insert(0);qv.insert(w); 25 hh.insert(h);vv.insert(w); 26 27 while(n--){ 28 scanf("%c %d",&c,&x);getchar(); 29 30 if(c == 'H') 31 { 32 l = ph.lower_bound(x); 33 r = l; l--; 34 ph.insert(x); 35 hh.insert(x-(*l)); 36 hh.insert((*r)-x); 37 hh.erase(hh.find((*r) - (*l))); 38 } 39 else 40 { 41 l = qv.lower_bound(x); 42 r = l; l--; 43 qv.insert(x); 44 vv.insert(x - (*l)); 45 vv.insert((*r) - x); 46 vv.erase(vv.find((*r) - (*l))); 47 } 48 49 printf("%I64d\n", (long long)(*hh.rbegin()) * (*vv.rbegin())); 50 51 52 } 53 return 0; 54 }
用数组写的,超时了,然后看的题解,用的STL里面的东西,真是太不熟悉太不熟悉了
go---go---go----