noip2012 day1

简单模拟。规律的话就是密匙中A代表加0,B代表加1,以此类推。于是先把密匙大小写同一,然后与A减,得到的再用密文减即可。

需要注意的一点就是密文大小写一开始就定下来了,如果减过了‘a’或者‘A’的话,依照表的规律的话要改成‘Z’或‘z’减掉溢出。

#include<bits/stdc++.h>
using namespace std;
#define RG register
#define ll long long
#define in(x) x = read()
#define lin(x) scanf("%lld",&x)
#define llin(x) x = lread
#define din(x) scanf("%lf",&x)
#define dout(x) printf("%lf",x)
#define out(x) print(x)
#define lout(x) printf("%lld",x)
#define ex putchar('\n')
#define ko putchar(' ')
const int MAXN = 1e4 + 5;
int klen,clen;
string k,c;

inline int read()
{
	int X=0,w=1;
	char ch=getchar();
	while(ch<'0' || ch>'9')
	{
		if(ch=='-') w=-1;
		ch=getchar();
	}
	while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();
	return X*w;
}

inline ll lread()
{
	ll X=0,w=1;
	char ch=getchar();
	while(ch<'0' || ch>'9')
	{
		if(ch=='-') w=-1;
		ch=getchar();
	}
	while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();
	return X*w;
}

void print(int x)
{
	if(x<0)
	{
		putchar('-');
		x=-x;
	}
	if(x>9)
	{
		print(x/10);
	}
	putchar(x%10+'0');
}


int main()
{
//	freopen("vigenere.in","r",stdin);
//	freopen("vigenere.out","w",stdout);
	cin >> k >> c;
	klen = k.size();
	clen = c.size();
	for(int i = 0;i < klen;i++)
		if(isupper(k[i])) k[i] = tolower(k[i]);
	int now = 0;
	for(int i = 0;i < clen;i++)
	{
		bool up = 0;
		if(isupper(c[i])) up = 1;
		if(now == klen) now = 0;
		c[i] = char((int)c[i] - ((int)k[now++] - (int)'a'));
		if(up)
		{
			if(c[i] < 'A') c[i] = char((int)'Z' - ((int)'A' - (int)c[i])+1);
		}
		else
			if(c[i] < 'a') c[i] = char((int)'z' - ((int)'a' - (int)c[i])+1);
	}
	cout << c;
	return 0;
}

首先我们分析一下,如果i和j两个相邻那么i排在j前面的必要条件是

total*a[i]/b[j]<total*a[j]/b[i]

也就是说 a[i]*b[i]<a[j]*b[j]

于是我们相乘排个序就好,注意数据较大要用高精度。

#include<bits/stdc++.h>
using namespace std;
#define RG register
#define ll long long
#define in(x) x = read()
#define lin(x) scanf("%lld",&x)
#define llin(x) x = lread
#define din(x) scanf("%lf",&x)
#define dout(x) printf("%lf",x)
#define out(x) print(x)
#define lout(x) printf("%lld",x)
#define ex putchar('\n')
#define ko putchar(' ')
const int MAXN = 1e3 + 5;
int n;
ll kl,kr;
ll l[MAXN],r[MAXN];
int temp[1000000];
string mul,ans;

struct game
{
	int l,r;
	ll m;
	bool operator < (const game x) const 
	{
		return m < x.m;
	}
}g[MAXN];

string Mul(string a,ll b)
{
	string t;
	int la = a.size();
	memset(temp,0,sizeof temp);
	for(int i = la-1;i >= 0;i--) temp[la-1-i] = a[i] - '0';
	ll w = 0;
	for(int i = 0;i < la;i++)
	{
		temp[i] = temp[i]*b + w;
		w = temp[i]/10;
		temp[i] = temp[i] % 10;
	}
	
	while(w) temp[la++] = w % 10,w /= 10;
	la--;
	while(la >= 0) t += temp[la--] + '0';
	return t;
}

string Div(string a,int b)
{
    string t;
    int d = 0;
    if(a == "0") return a;
    for(int i=0;i<a.size();i++) {
        t += (d * 10 + a[i] - '0') / b + '0';
        d = (d * 10 + (a[i] - '0')) % b;
    }
    int p = 0;
    for(int i=0;i<t.size();i++)
       if(t[i] != '0') {
	      p = i;
	      break;
	   }
    return t.substr(p);
}

inline int read()
{
	int X=0,w=1;
	char ch=getchar();
	while(ch<'0' || ch>'9')
	{
		if(ch=='-') w=-1;
		ch=getchar();
	}
	while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();
	return X*w;
}

inline ll lread()
{
	ll X=0,w=1;
	char ch=getchar();
	while(ch<'0' || ch>'9')
	{
		if(ch=='-') w=-1;
		ch=getchar();
	}
	while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();
	return X*w;
}

void print(int x)
{
	if(x<0)
	{
		putchar('-');
		x=-x;
	}
	if(x>9)
	{
		print(x/10);
	}
	putchar(x%10+'0');
}

int main()
{
//	freopen("game.in","r",stdin);
//	freopen("game.out","w",stdout);
	in(n); cin >> mul; lin(kr);
	for(int i = 1;i <= n;i++)
	{
		in(g[i].l);in(g[i].r);
		g[i].m = g[i].l * g[i].r;
	}
	sort(g+1,g+1+n);
	ans = Div(mul,g[1].r);
	mul = Mul(mul,g[1].l);
	for(int i = 2;i <= n;i++)
	{
//		ans = max(sum/g[i].r,ans);
//		sum *= g[i].l;
		string temp;
		temp = Div(mul,g[i].r);
		mul = Mul(mul,g[i].l);
//		if(ans.size() > temp.size()) ;
		if(temp.size() > ans.size())
			ans = temp;
		else if(temp > ans)
			ans = temp;
	}
//	lout(ans);
	cout << ans;
	return 0;
}

第三题并不会做需填坑。

猜你喜欢

转载自blog.csdn.net/chang_yl/article/details/81070313
今日推荐