我的隔天Codeforces——Round #334 (Div. 2)

最近我都不知道怎么评价自己了,说努力的话还远远不够,但说不努力可也比以前好多了,总之就是在进步吧。继续加油!

A. Uncowed Forces
题意:简单来说,就是给你一个函数关系(文字表达),和参数,让你求出函数值
分析:这题比较水吧,就是写一函数算每一道题目的得分,然后加起来加上hack的得分,没啥难度,注意精度把!

#include <map>
#include <set>
#include <stack>
#include <cmath>
#include <queue>
#include <bitset>
#include <string>
#include <vector>
#include <cstdio>
#include <cctype>
#include <cstdlib>
#include <sstream>
#include <cstring>
#include <iostream>
#include <algorithm>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;


#define clr(x,y) memset(x,y,sizeof(x))
#define maxn 40000+5
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define IT iterator


typedef long long ll;
const double eps = 1e-9;
const double pi  = acos(-1);
const ll mod = 1e9+7; 


double cal(int m,int w,int x)
{
	x*=500;
	return max(0.3*x,(1.0-m/250.0)*x-50.0*w);
}
int main()
{
	int m[5],w[5],h0,h1;
	double sco=0;
	for(int i=0;i<5;i++)
		scanf("%d",m+i);
	for(int i=0;i<5;i++)
		scanf("%d",w+i);
	scanf("%d %d",&h0,&h1);
	for(int i=0;i<5;i++)
		sco+=cal(m[i],w[i],i+1);
	sco+=(h0*100.0-50.0*h1);
	printf("%.0f\n",sco);
	return 0;
}

B. More Cowbell

题意:给你n个物品,每个物品有权值wi(权值按从小到大给出,无须排序)。让你将这些物品刚好放在k个盒子里(不能有盒子是空的),而且每个盒子最多只能放两个物品,这两个物品的权值和不能超过盒子的权值。求相同的k个盒子的最小权值是多少。
分析:不用想太多,这就是一道简单的贪心题,先判断k是不是比n大或者相等,如果满足那么直接输出最后一个盒子的权值;如果不满足,那么将前2*(n-m)个物品对折放置,就是第1个与第2*(n-m)个放在一起,第2个与第2(n-m)-1个放在一起,依次类推。。。求出此时最大的权值,输出即可!


#include <map>
#include <set>
#include <stack>
#include <cmath>
#include <queue>
#include <bitset>
#include <string>
#include <vector>
#include <cstdio>
#include <cctype>
#include <cstdlib>
#include <sstream>
#include <cstring>
#include <iostream>
#include <algorithm>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;


#define clr(x,y) memset(x,y,sizeof(x))
#define maxn 100000+5
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define IT iterator


typedef long long ll;
const double eps = 1e-9;
const double pi  = acos(-1);
const ll mod = 1e9+7; 


int box[maxn];
int main()
{
    int n,m;
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%d",box+i);
    if(m>=n)
    {
        printf("%d\n",box[n]);
        return 0;
    }
    m=n-m;
    int ma=box[n];
    for(int i=1;i<=m;i++)
        ma=max(ma,box[i]+box[2*m+1-i]);
    printf("%d\n",ma);
    return 0;
}
C - Alternative Thinking

题意:简单的说,就是给你一个01串,允许你翻转其中的一个连续的01子串,翻转之后求不一定连续的01子串的最大长度,而且要求这个子串每相邻的两个字符不同。

分析:这也是一道贪心。我是这么想的:我先处理一下给我的原01串,将01串中连续相同字符的个数记录下来,得到一个数组。要使所求子串的长度最大,显然发现不管怎么翻转,最多将长度扩大2,最少扩大0。那么考察分别扩大0,1,2的情况:如果数组中有一个数大于2(至少为3),那么我可以翻中间的子串,那么此时扩大2;当数组中出现没有数超过2,但是有2个及其以上的2的时候,我可以取相邻(两个2之间没有其他2)的2,一个从2的后一个开始,一个从2的前一个结束,将这个连续子串翻转,那么也可以扩大2;当仅有一个2出现时,那么此时从这个2的后一个开始,一直到结束,全部翻转,那么最多扩大1;如果更加不辛的,整个子串是01010.....,那么不管你怎么翻转,长度只会减少或者不变,那么原样输出!

#include <map>
#include <set>
#include <stack>
#include <cmath>
#include <queue>
#include <bitset>
#include <string>
#include <vector>
#include <cstdio>
#include <cctype>
#include <cstdlib>
#include <sstream>
#include <cstring>
#include <iostream>
#include <algorithm>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;


#define clr(x,y) memset(x,y,sizeof(x))
#define maxn 100000+5
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define IT iterator


typedef long long ll;
const double eps = 1e-9;
const double pi  = acos(-1);
const ll mod = 1e9+7; 


char str[maxn];
int main()
{
    int n;
    scanf("%d %s",&n,str);
    int ans=0,k=1;
    bool f1=false;
    int kk=0;
    for(int i=1;i<n;i++)
    {
        if(str[i]==str[i-1])k++;
        else 
        {
            if(k>2)f1=true;
            else if(k==2)kk++;
            k=1;
            ans++;
        }
    }
    if(k>2)f1=true;
    else if(k==2)kk++;
    ans++;
    if(f1||kk>=2)printf("%d\n",ans+2);
    else if(kk)printf("%d\n",ans+1);
    else printf("%d\n",ans);
    return 0;
}



D - Moodular Arithmetic

题意:给你一个函数关系等式,求满足这个等式的函数的个数。

分析:这学期刚学离散,但这并不代表我就会。最后还是没有想到,唉!光荣的看了别人的题解!

这道先将k分情况考虑,当k为0的时候,那么除了f(0)=0之外,其他的随意,那就是p^(p-1);当k为1时,所有情况都随意,那么就是p^p;当k大于1的时候,判断有多少个互相联系制约的组(类似等价类、划分神马的)(0不用管,f(0)=0必须的),那么每个组的解有p种(因为这个组里是互相制约的,就相当于定好了一个,那么其他的也确定了,不能改变了),那么就是p^cnt(cnt是组数)。

#include <map>
#include <set>
#include <stack>
#include <cmath>
#include <queue>
#include <bitset>
#include <string>
#include <vector>
#include <cstdio>
#include <cctype>
#include <cstdlib>
#include <sstream>
#include <cstring>
#include <iostream>
#include <algorithm>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;


#define clr(x,y) memset(x,y,sizeof(x))
#define maxn 1000000+5
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define IT iterator


typedef long long ll;
const double eps = 1e-9;
const double pi  = acos(-1);
const ll mod = 1e9+7; 




int vis[maxn];
ll qlow(ll a,ll n)
{
	ll ans=1;
	while(n)
	{
		if(n&1)ans=(ans*a)%mod;
		a=(a*a)%mod;
		n>>=1;
	}
	return ans;
}
int main()
{
	ll k,p;
	scanf("%I64d %I64d",&p,&k);
	ll ans;
	if(k==0)ans=qlow(p,p-1);
	else if(k==1)ans=qlow(p,p);
	else 
	{
		ll ant=0;
		clr(vis,0);
		vis[0]=1;
		for(int i=1;i<p;i++)
		{
			if(vis[i])continue;
			vis[i]=1;
			ll cc=i;
			while(1)
			{
				cc=(cc*k)%p;
				if(vis[cc])break;
				vis[cc]=1;
			}
			ant++;
		}
		ans=qlow(p,ant);
	}
	printf("%I64d\n",ans%mod);
	return 0;
}

最后吐槽一下,这csdn的文本编辑器太烂了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值