KTU Programming Camp Day1
题目链接:http://codeforces.com/gym/100735
D. Triangle Formation
题意:n个棒组成多少三角形,每根棒只能用一次
题解:n(<=15),枚举两边和判断三角形
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
ll len[20];
int used[20],ans=0;
int main() {
scanf("%d",&n);
for(int i=1; i<=n; i++) {
scanf("%lld",&len[i]);
}
if(n<=2) return cout<<0,0;
memset(used,0,sizeof(used));
sort(len+1,len+n+1);
for(int i=1; i<=n; i++) {
for(int j=i+1; j<=n; j++) {
for(int k=j+1; k<=n; k++) {
if(!used[i]&&!used[j]&&!used[k]&&(len[i]+len[j]>len[k])) {
used[i]=1;
used[j]=1;
used[k]=1;
ans++;
}
}
}
}
return cout<<ans,0;
}
E. Restore
题意:n * n,行、列、主副对角线和相等,不给出主对角线,还原n * n
题解:除主对角线外所有元素总和为每行(列,对角线)的和的(n-1)倍;依次还原主对角线
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,a[105][105],sr[105],sum=0;
int main(){
scanf("%lld",&n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%lld",&a[i][j]);
sr[i]+=a[i][j];
}
sum+=sr[i];
}
for(int i=0;i<n;i++){
a[i][i]=sum/(n-1)-sr[i];
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<a[i][j]<<" ";
}
if(i!=n-1) cout<<endl;
}
}
G. LCS Revised
题意:给定长为N的01组成的串A,B是任意一个长为N的01组成的串(2^n种),求AB的最长公共子序列的长度的最小值
题解:统计A中0,1的个数,较小的即为答案
#include<bits/stdc++.h>
using namespace std;
string s;
int cnt0=0,cnt1=0;
int main(){
cin>>s;
for(int i=0;i<s.size();i++){
if(s[i]=='0') cnt0++;
else cnt1++;
}
return cout<<min(cnt0,cnt1),0;
}