@morehigh
2016-12-14T15:13:27.000000Z
字数 2239
阅读 1216
第二次作业
**Friendship of Frog **
题意:
给出一串小写字母,求两个相同字母最小距离为多少
解题思路:
直接暴力求解
ac代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define INF 1e9
using namespace std;
char a[1010];
int main()
{
int t;
int cas=1;
cin>>t;
while(t--)
{
scanf("%s",a);
int ans=INF;
for(int i=0;a[i]!='\0';i++)
{
for(int j=i+1;a[j]!='\0';j++)
{
if(a[i]==a[j])
{
ans=min(ans,j-i);
break;
}
}
}
if(ans!=INF)
cout<<"Case #"<<cas++<<": "<<ans<<endl;
else
cout<<"Case #"<<cas++<<": "<<"-1"<<endl;
}
return 0;
}
**Li;nearization of the kernel functions in SVM **
题意:
f(x,y,z) = ax^2 + by^2 + cy^2 + dxy + eyz + fzx + gx + hy + iz + j
x^2 <-> p, y^2 <-> q, z^2 <-> r, xy <-> u, yz <-> v, zx <-> w
g(p,q,r,u,v,w,x,y,z) = ap + bq + cr + du + ev + fw + gx + hy + iz + j
形成f->g的一个映射,给出a, b, c, d, e, f, g, h, i, j,将g输出
解题思路:
做这道题的时候,发现自己的想法有好多漏洞,其中要考虑“+”什么时候加,系数为1和-1时的情况,系数为0的情况,系数全为0的情况。
ac代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
char ss[] = {'p', 'q', 'r', 'u', 'v', 'w', 'x', 'y', 'z', '\0'};
int a[15];
int main (){
int t;
scanf("%d", &t);
while(t--){
for(int i = 0; i < 10; ++i)
scanf("%d", &a[i]);
int ans = 0;
int flag = 0;
for(int i = 0; i < 9; ++i){
if(a[i] == 0) continue;
if(a[i] == 1 ){
if(flag)
printf("+");
else
flag++;
printf("%c", ss[i]);
continue;
}
if(a[i] == -1){
printf("-%c", ss[i]);
flag++;
continue;
}
if(a[i] > 0){
if(flag)
printf("+");
else
flag++;
printf("%d%c", a[i], ss[i]);
}
else
printf("%d%c", a[i], ss[i]), flag++;
}
if(a[9] > 0){
if(flag)
printf("+");
else
flag++;
printf("%d", a[9]);
}
else if( a[9] < 0){
flag ++;
printf("%d", a[9]);
}
if(!flag)
printf("0");
printf("\n");
}
return 0;
}
**Game with Pearls **
题意:
Jerry 和 Tom 玩一个游戏 , 给你 n 个盒子 , a[ i ] 表示开始时 ,
第 i 个盒子中的小球的个数 。 然后 Jerry 可以在每个盒子里加入0或k的倍数的小球 ,
操作完后,Jerry 可以重新排列盒子的顺序,最终使第i个盒子中有i个小球。若Jerry能
使最终的盒子变成那样,就输出 “Jerry” ,否则输出 “Tom” 。
题解:
M<=500,1 <= N <= 100, 1 <= K <= N,暴力搜索能够直接让a[j]加上k的整数倍或者是0,得到的数若为i,然后把这个数的位置进行标记,并把这个数赋值为i,直到i==n,然后匹配是否满足1--n所有的数。
ac代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define N 101234
using namespace std;
int a[120];
int flag[120];
bool cmp(int x,int y)
{
return x<y;
}
int main()
{
int n,k,t;
cin>>t;
while(t--)
{
cin>>n>>k;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
memset(flag,0,sizeof(flag));
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(a[j]<=i){
if((i-a[j])%k==0&&!flag[j])
{
flag[j]=1;
a[j]=i;
break;
}
}
}
}
int mm=0;
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
if(a[i]!=i)
mm=1;
}
if(mm==0)
printf("Jerry\n");
else
printf("Tom\n");
}
return 0;
}