湘潭大学新生赛总结

总体情况还算可以。

需要注意以下几点:

1。比赛开始时不要慌,头脑必须清醒,不能乱。

2。对于数据超级大的题,不是公式题就可能是规律题,此时就可以小范围打表,观察是否有规律。

3。相信队友。

最最最重要的是,不要过了样例就TM浪,(T.T)   我想哭。。。。

下面是几道题总结:

Clock

题目描述

钟的一圈是12小时,其中时针、分钟都是匀速移动。一天从00:00~23:59,请问某一时刻,时针与分针的夹角是多少?

输入

第一行是一个整数T(1T1440),表示样例的个数。以后每行是一个时刻,格式为HH:MM。

输出

每行输出一个样例的结果,如果结果不是整数,小数部分不要输出多余的0。

样例输入

2
00:01
00:30

样例输出

5.5
#include
#include
#include
#include
using namespace std;
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int h,m,j=0;
        scanf("%d:%d",&h,&m);
        if(h>=12)
            h-=12;
        double p=fabs(h*30*1.0+m*(0.5-6));
        if(p>180)
            p=360-p;
        if(m&1)
            printf("%.1lf\n",p);
        else
            printf("%.0lf\n",p);
    }
}
这道题没啥说的,公式题;

角度公式:9点36分:9*30+36*0.5-36*12;


继续:

Finally, which light is on?

题目描述

有n盏灯,编号1~n。一开始灯都是关着的,每个灯有一个开关,按奇数次为打开,按偶数次为关闭。我们先把编号为1的倍数的灯按一下开关,再把编号为2的倍数的灯按一下开关,依次下去,一直到把编号为n的倍数灯按一下,请问最后有多少盏灯是亮的?

输入

第一行是一个整数T(1T10000),表示样例的个数。以后的每行一个样例,为一个整数n(1n109)

输出

每行输出一个样例的结果。

样例输入

2
1
5

样例输出

1
2

样例解释

第2个样例,先把1~5都打开;然后把2,4关掉;然后把3关掉;然后把4打开;然后把5关掉;所以,最后剩1和4是亮着的。

#include
#include
#include
#include
using namespace std;
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,m=3,i;
        int sum=0;
        scanf("%d",&n);
        for( i=0;sum

这道题没法说,一直尝试用类似于素数筛法的方法怼出来,可惜没什么卵用,,,

打了前几项的表才发现,原来是个规律题,,,3,,5,,7,,9,,,,,(长个记性)


Balance

题目描述

小明有一架天平,小明想称出1n克的物品,请问最少需要几颗砝码?
比如小明想称出14克的物品,需要2颗砝码,为1和3克。

输入

第一行是一个整数T(1T10000),表示样例的个数。以后每行一个样例,为一个整数 (1n109)。

输出

每行输出一个样例的结果。

样例输入

3
1
4
40

样例输出

1
2
4

#include
#include
#include
#include
using namespace std;
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        long long n;
        scanf("%lld",&n);
        long long ans=0,sum=0,l=1;
        while(sum




Estrella's Travel

Accepted : 100   Submit : 258
Time Limit : 1000 MS   Memory Limit : 65536 KB 

Estrella's Travel

题目描述

Estrella喜欢旅行,她准备去自己心仪的城市看风景。她精心选择了一条线路,准备自驾游。自驾线路是一条链路,上有n+1座城市,编号依次为0n,Estrella住在0号城市,目的地是n号城市。Estrella为了环保,驾驶了一辆纯电动车,所以最多只能一次行驶m个城市的距离。如果Estrella在某个城市(包括n号城市)停留,自然会需要一些费用,当然每个城市的花费是不一样,Estrella想知道,这个花费最小是多少?

输入

多组数据输入。
每组数据第一行两个整数n(1<n<1000),m(1m<n)
第二行n个整数ai(0<ai1000),表示编号为1,2,,n的城市的停留花费。

输出

对于每个数据,输出一行,表示总的花费。

样例输入

5 2
1 2 3 4 5
6 2
6 5 4 3 2 1

样例输出

9
9

样例解释

第1个样例,依次到城市1,3,5,所以花费为1+3+5=9;
第2个样例,依次到城市2,4,6,所以花费为5+3+1=9。


感悟:放了这道题一直每补,那个时候最短路spfa还没学,动规学的还不好,搜索也不行,过了几个月了,
回头补了一下题,发现这道题也不是那么难。
思路:
简单dp:假设当前位置为最优状态,就是花费最少。也都知道,动规是往前推,一直找到初始状态,假设
dp[i]为当前最优,那么考虑一下dp[i]怎么来的,是由距离j不超过m的每一个dp[j]加上a[i](假设a数组存的是
对应的花费),我们只需要取他们之间最小的加上a[i]就可以了,前提是,对应的dp[j]也是最优状态哦。
并且注意初始位置是dp[0],而不是dp[1],(我就晕在这了),然后就没啥了。
(竟然被我想到用动规了,并且还实现了,,作为一枚菜鸡,太高兴了)
代码:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long LL;
const int N=1010;
const int INF=1e9+10;
int a[N],dp[N];
int main()
{
    int n,k;
    while(~scanf("%d%d",&n,&k))
    {
        memset(dp,INF,sizeof(dp));
        for(int i=1; i<=n; i++)
            scanf("%d",&a[i]);
        dp[0]=0;
        for(int i=1; i<=n; i++)
            for(int j=i-1; j>=i-k&&j>=0; j--)
                dp[i]=min(dp[i],dp[j]+a[i]);
        printf("%d\n",dp[n]);
    }
}




你可能感兴趣的:(ACM竞赛,【比赛后的思考】,ACM的进程)