[置顶] 2017“久源软件杯”安徽科技学院第八顶程序设计大赛 – 题解

Contest1068 – 2017“久源软件杯”安徽科技学院第八交程序设计大赛

至于设立“久源软件杯”

安徽科技学院第八及程序设计大赛通知

     ACM 国际大学生程序设计竞赛 (International Collegiate Programming
Contest)是由美国计算机协会(ACM)主办的平等项旨在展示大学生创新能力、团队精神和当压力下编写程序、分析以及化解问题能力的名竞赛。2010年以来,我校参与了和安徽省 ACM 程序设计竞赛,并获了优质的成。为遴选省ACM 参赛队员,特举办“久源软件杯” 安徽科技学院第八及计算机程序设计大赛,热忱欢迎广大程序设计爱好者踊跃参加。

 

主办方:安徽科技学院教务处、信息以及网络工程学院

承办方:消息和网络工程学院计算机系

赞助方:无锡久源软件股份有限公司(独家赞助)

 

相同、 比赛时间:2017 年 4 月 22(周六)上午 8:00~12:00

次、比赛地点:计算机与网试验中心(力行楼六楼)

其三、参赛对象:14~16 级计算机、网络、信息、电子等专业

季、 报名方法(免费申请参赛):

(1)报名网站: https://oj.ahstu.cc/JudgeOnline/contest_join.php?cid=1068

(2)请进入比赛 QQ 群:391668336(安科ACM官方群)

(3) 报名时:2017 年 4 月 10日到 4月 21 日

五、比赛设奖:设一等奖8%、二等奖12%、三等奖15%、优秀奖若干

(1)一二三等奖都生富的物质奖励

(2)一二等奖同学直接进入省ACM赛集训

六、竞赛相关:

1.      竞赛语言:C/C++/JAVA环境:DevCpp /CodeBlock /Eclipse

2.      比赛试题:采用 ICPC 样式——赛题 8~10 道

3.       练习和比赛网站(AOJ):https://oj.ahstu.cc/

 

连带竞赛辅导将进而进行,请关注群通知。

 

教务处、信息以及网络工程学院

2017 年 4月 11 日

Start Time: 2017-04-22
08:00:00 End Time: 2017-04-22 12:00:00

Current Time: 2017-4-22
22:28:34 Status:Ended   Public 

[Status]
[Standing]
[Statistics]

[Status]
[Standing]
[Statistics]

 

Problem ID

Title

Source

AC

Submit

N

1847 Problem  A

A -bits

icpc08th

2

48

Y

1848 Problem  B

B-黄金矿工

icpc08th

4

16

 

1849 Problem  C

C-皇后的斗

icpc08th

3

5

 

1850 Problem  D

D-纸盘游戏

icpc08th

4

48

N

1851 Problem  E

E-平均数

icpc08th

2

117

Y

1852 Problem  F

F-刹车

icpc08th

99

156

 

1853 Problem  G

G-圆组

icpc08th

2

35

Y

1854 Problem  H

H-曲线长度

icpc08th

34

56

Y

1855 Problem  I

I-相交点

icpc08th

63

70

Y

1856 Problem  J

J-老赵的逗

icpc08th

45

159

1847: A -bits

Time Limit: 1 Sec  Memory
Limit: 128 MB
Submit: 48  Solved: 2
上一题SubmitStatus签打分编纂题目信息编写测试数据下一题

Description

定义F(n)为n的二进制表示被,“连续两独1涌出的次数”例如 F(27)=2(27的二进制位11011)输入整数n(0<=n<=263 -2)求S =
F(0)+F(1)+…+F(n)的值

Input

差不多组输入,每行输入n,当n=-1时完结输入

Output

输出每行输入相应之S值

Sample Input

0615202122-1

Sample Output

Case 1: 0

Case 2: 2

Case 3: 12

Case 4: 13

Case 5: 13

Case 6: 14

立道题一开始感觉甚简单,可是不是如此简单,首先需要为此到长整型long
long,然后要考虑时间问题

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;

long long aa,bb;

void cal(long long n) {
    bb += n;
    if (bb >= (1000000000000ll)) {
        aa += bb / (1000000000000ll);
        bb %= (1000000000000ll);
    }
}

int main() {
    freopen("a.in","r",stdin);
    freopen("a.out","w",stdout);
    int cas = 1;
    long long n;
    long long a,b,c,m;
    while (cin >> n && n >= 0) {
        aa = bb = 0;
        m = 1, a = n;
        for (int i = 0; i < 62; i++) {
            cal((n>>2)*m);
            if ((n & 3) == 3)
                cal((a&((1ll<<i)-1))+1);
            m <<= 1;
            n >>= 1;
        }
        printf("Case %d: ", cas++);
        if(aa) {
            cout << aa;
            printf("%012lld\n",bb);
        }
        else cout<<bb<<endl;
    }
    return 0;
}

1848: B-黄金矿工

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 16  Solved: 4
上一题SubmitStatus标签打分编写题目信息编制测试数据下一题

Description

以上个世纪前,安科的后山曾经是一个金矿山(现在无力吐槽)。在山上住着是n个矿工,他们累一年终于到了发年终奖励的下了,公司之CEO
vyoung先生决定拿同一片黄金发给最有价矿工,不过当下就十分为他嫌恶了,这些矿工每个人都是怪拼命的工作的。无奈,vyoung决定给上帝来决定。他吃n课矿工围为在同成为一个环,第一不好淘汰第m只,以后各数k个数淘汰一个,最后一个雁过拔毛的将沾这块金块。

Input

输入包含多组数。每组数据包含三独整数 n,k,m(<=2n<=10000,1<=k<=10000,1<=m<=n)

输入了标志为n=k=m=0

Output

于每组数据输出最后为留下来的人

Sample Input

8 5 3

100 9999 98

10000 10000 10000

0 0 0

Sample Output

1

93

2019

模板题,较为简单

#include<cstdio>

int main()
{
    freopen("a.in","r",stdin);
    freopen("a.out","w",stdout);
  int n,m,k,f;
  while(scanf("%d%d%d",&n,&k,&m)==3&&n)
  {
    f=0;
    for(int i=2;i<=n;i++)f=(f+k)%i;
    f=(m-k+1+f)%n;
    if(f<=0)f+=n;
    printf("%d\n",f);
  }
}

1849: C-皇后底斗殴

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 5  Solved: 3
上一题SubmitStatus标签打分编辑题目信息编纂测试数据下一题

Description

以国际象棋中,两只皇后相互攻击仅见面是以同一行,同一列,或者千篇一律对角线上。现在受闹一个nxm的棋盘,问出稍许种办法放置两独相攻击的王后

Input

大多组输入,每组输入包含两只整数n,m(0<=n,m<=106)输入完的表明也n=m=0

Output

对此每组输入,输出对应的方案往往

Sample Input

100 223

Sample Output

10907100

即道题还是未是特别亮,不过下面一个代码就一个公式就解决了,挺郁闷的

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

int main()
{   freopen("a.in","r",stdin);
    freopen("a.out","w",stdout);
    unsigned long long n,m;
    while(cin>>n>>m){
        if(!n&&!m)break;
        if(n>m)swap(n,m);
        cout<<n*m*(m+n-2)+2*n*(n-1)*(3*m-n-1)/3<<endl;
    }

    return 0;
}

1850: D-纸盘游戏

Time Limit: 1 Sec  Memory
Limit: 128 MB
Submit: 48  Solved: 4
上一题SubmitStatus标签打分编排题目信息编排测试数据下一题

Description

高校英语四级考试将赶到了,你是休是在乱之习?也许紧张得并短学期的ACM都没工夫练习了,反正我掌握之Kiki和Cici都是这样。当然,作为在考场浸润了十几满载之现世大学生,Kiki和Cici更懂得考前的放松,所谓“张弛有道”就是其一意思。这不,Kiki和Cici在每天晚上休息前都要娱乐会儿扑克牌以放宽神经。
“升级”?“双扣”?“红五”?还是“斗地主”?
当都未是!那大多无聊啊~
当计算机学院的学生,Kiki和Cici打牌的时候可没忘专业,她们打牌的平整是这样的:
1、  总共n张牌;
2、  双方轮流抓牌;
3、  每人每次抓牌的个数只能是2底幂次(即:1,2,4,8,16…)
4、  抓完牌,胜负结果为出去了:最后抓完牌的人为胜者;
借而Kiki和Cici都是够聪明(其实不用要,哪来未聪明之学童~),并且每次都是Kiki先抓牌,请问谁会大胜呢?
自然,打牌无论哪个胜还问题不老,重要的凡随即到之CET-4克生好的状态。
Good luck in CET-4 everybody!

Input

输入数据包含多单测试用例,每个测试用例占一执行,包含一个整数n(1<=n<=1000)。

Output

只要Kiki能胜之口舌,请输出“Kiki”,否则要输出“Cici”,每个实例的出口占一行。

立刻道题也是,看了代码少的简直难以置信,考察之博弈论。

轻找到规律,最佳策略是由此取1或2张牌,使留给对手的牌数总是3之倍数,这时对方不容许同软取光,而你就算得将除以3的余数部分取光。

这样一来就自然胜利。

#include<iostream>
#include<cstdio>
using namespace std;
int main(void)
{
    freopen("a.in","r",stdin);
    freopen("a.out","w",stdout);
    int n;
    while(scanf("%d",&n)==1)
    {
        if(n%3==0)
            cout<<"Cici"<<endl;
        else
            cout<<"Kiki"<<endl;
    }
    return 0;
}

1851: E-平均数

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 117  Solved: 2
上一题SubmitStatus标签打分编制题目信息编制测试数据下一题

Description

让出n个数,每相邻两只数求一不良平均数得到n-1独数,在经过n-1不善操作后,剩下1个数,求之累是微。

Input

基本上组输入,先输入T,表示有T组测试数据 每行输入一个n(0<=n<=50000),接下去一样实行输入n个数a[i],(-1000<=a[i]<=1000)

Output

本着每组输入输出最后取得的一个屡(保留小数点后三员)

Sample Input

4110.421.0 2.231 2 351 2 3 4 5

解题思路:类似与杨辉三角,第i个数起始于加了C(n−1i−1)次。总共发生2n−1单数相加。但是盖n有50000,250000从来存不产,所以借助log函数。

#include <iostream>
#include <cstring>
#include <cstdlib>
#include <set>
#include <cstdio>
#include <string>
#include <vector>
#include <map>
#include <cmath>
#include <algorithm>

#define LL long long
#define LLU unsigned long long

using namespace std;

double log_C[50005],a[50005];

int main()
{
    int n,T;
    scanf("%d",&T);
    for (int kcase=1;kcase<=T;++kcase)
    {
        scanf("%d",&n);
        for (int i=0;i<n;++i)
            scanf("%lf",&a[i]);
        log_C[0]=log10(1);
        for (int i=1;i<n;++i)
            log_C[i]=log_C[i-1]+log10(n-i)-log10(i);//,printf("%lf %lf\n",log_C[i],pow(10,log_C[i]));
        double ans=0.0;
        for (int i=0;i<n;++i)
            if (a[i]<0)
                ans-=pow(10,log_C[i]+log10(-a[i])-log10(2)*(n-1));
            else
                ans+=pow(10,log_C[i]+log10(a[i])-log10(2)*(n-1));
        printf("Case #%d: %.3lf\n",kcase,ans);
    }
    return 0;
}

1852: F-刹车

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 156  Solved: 99
上一题SubmitStatus签打分编制题目信息编制测试数据下一题

Description

汽车一样各级时n km的进度行驶,到某处需要减速停车。设汽车为等加速度 a
m/s2\  停顿。问于开暂停,到停车,汽车驶过多少去。

Input

差不多组输入,每行输入n (0<=n<=400),a(-10<=a<=10)

Output

于每组输入,输出汽车到已驶过的离(单位:米)(小数点后保留三员)

Sample Input

36 -5

简单题

#include<iostream>
#include<cstdio>
using namespace std;

int main(){
    // freopen("a.in","r",stdin);
      //  freopen("a.out","w",stdout);
int a,n;
while(cin>>n>>a){

    double v0 = n*1000*1.0/3600;
    double t = v0*1.0/(a*-1);
    double s = v0*t + 0.5*a*t*t;
    printf("%.3f\n",s);
}
return 0;
}

1853: G-圆组

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 35  Solved: 2
上一题SubmitStatus标签打分编制题目信息修测试数据下一题

Description

让出n个到的圆心和半径,相交的圆算在平等组被,如圆1和圆2和圆3相交,则圆1,2,3于一如既往组吃。求总共发生几乎组全面。

Input

差不多组输入,第一实践输入n,表示有n(0<=n<=1000)个完美,接下去n行,每行输入 圆心坐标 x,y,半径r (都是int型)

Output

针对每组输入输出总共圆之组数

Sample Input

42 0 10 2 1-2 0 10 -2 1

Sample Output

4

问题较为简单,遍历判断任意两单到,并查集进行操作即可

#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std;

typedef struct round {
    int x;
    int y;
    int r;
};
int n;
const int maxn  = 1000+10;
//int mp[maxn][maxn];
int f[maxn];
vector<struct round>V;
int findset(int x){
    return x==f[x]?x:f[x] = findset(f[x]);
}
void init(){
    V.clear();
    for(int i=0;i<maxn;i++)
        f[i]=i;
for(int i=0;i<n;i++){
    int x0,y0,R;
    scanf("%d%d%d",&x0,&y0,&R);
    struct round s;
    s.x = x0;
    s.y = y0;
    s.r = R;
    V.push_back(s);
}
}

void Union(int a,int b){
    int x = findset(a);
    int y = findset(b);
    if(x!=y)
        f[y]=x;
}
double  dis(struct round a,struct round b){
    double s = sqrt(1.0*(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    return s;
}
bool charge(struct round a,struct round b){
    return dis(a,b)<(a.r+b.r);
}
void solve(){
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            if(charge(V[i],V[j])&&i!=j){
               // cout<<dis(V[i],V[j])<<endl;
                Union(i,j);
            }
        }
    }
    int s = 0;
    for(int i=0;i<n;i++)
        if(f[i]==i)s++;
        printf("%d\n",s);
}
int main(){
    freopen("a.in","r",stdin);
    freopen("a.out","w",stdout);
    while(~scanf("%d",&n)){
        init();
        solve();
    }
    return 0;
}

1854: H-曲线长度

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 56  Solved: 34
上一题SubmitStatus签打分编排题目信息编辑测试数据下一题

Description

计算曲线y  =
x3/2  达成相应被ab的平段落弧长(-100<a,b<100,a,b均为int)

Input

基本上组输入,每组包含两只数,a,b

Output

于每组输入,输出对应区间的弧长,结果小数点后保留三员

Sample Input

1 2

Sample Output

1.578

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;


int main(){
    //freopen("a.in","r",stdin);
   // freopen("a.out","w",stdout);
int a,b;
while(cin>>a>>b){
       // double d = 3.0/2;
double s = 2.0/3*(pow((1+b)*1.0,1.5)-pow((1+a)*1.0,1.5));

printf("%.3f\n",s);

}
return 0;
}

1855: I-相交点

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 70  Solved: 63
上一题SubmitStatus签打分编制题目信息编制测试数据下一题

Description

圆1 圆心坐标(-1,0)半径为1.5,圆2圆心坐标为(2,0)半径为2,求即简单独到的交点坐标,结果保留小数点后三员

Input

Output

各个输出两单点坐标,输出格式如下

x1 y1

x2 y2

#include<iostream>
#include<cmath>
#include<cstdio>

using namespace std;

int main()
{
    freopen("a.out","w",stdout);
    int x1 = -1,y1 = 0,r1 = 1.5;
    int x2 = 2,y2 = 0, r2 = 2;
    double mid = 1.0*(x2+x1)/2;
    double x  = 2 - mid;
    double y = sqrt(4-x*x*1.0);
    printf("%.3f %.3f\n%.3f %.3f\n",x,y,x,y*-1);
    return 0;
}

1856: J-老赵的逗

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 159  Solved: 45
上一题SubmitStatus签打分编排题目信息编排测试数据下一题

Description

贯通数学的老赵现在纪念麻烦啊转热爱编程的童鞋们,现在于来一个三角形的老三长达边a,b,c求出之三角的内切圆和外接圆的面积

Input

多组输入,每行包括三单整数数a,b,c

Output

从未有过每组输入输出对应三角形的内切圆和外面圆面积(结果保留小数点后三各类)

Sample Input

3 4 5

Sample Output

3.142 19.635

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;

double cacu(double r){
double pi = atan(1)*4;
return pi*r*r;
}
int main(){
  //  freopen("a.in","r",stdin);
   // freopen("a.out","w",stdout);
int a,b,c;
while(cin>>a>>b>>c){
    double p = 1.0*(a+b+c)/2;
    double temp = p*(p-a)*(p-b)*(p-c);
    double s = sqrt(temp);
    double R = 1.0*a*b*c/(4*s);
    double r = 2*s/(a+b+c);
    double S1 = cacu(r);
    double S2 = cacu(R);
    printf("%.3f %.3f\n",S1,S2);
}
return 0;
}

蹭终榜

https://oj.ahstu.cc/JudgeOnline/contestrank.php?cid=1068

365bet手机app下载 1

属于我到场的终极一顶校赛了,简单总结下这次校赛吧,这次校赛考的大部都是数学题,比赛刚起经常,不知底问题是pdf文档,有接触意思,一开始举行A题,考的二进制,感觉来思路,于是写,结果老是通不过样例,写的非常着急的,当时成千上万同班都AC好几修了,有硌好了,再变下同样挥毫,一看即是约瑟夫环问题,挺好的,准备的发模板,然后形容上不怕AC了,C题D题跳了,感觉没什么好之思绪,E题平均数,随便写了瞬间为AC了,接着写F题,写了写吗AC了,感觉日子比较雄厚,不是老十分了,又回去去描绘A题,终于啊AC了。。结果临时说问题全部重判了,重判了,结果都WA了,全部WA,名次一下掉至了最后。我及时来什么方法也,我也杀绝望啊。算了咔嚓,感觉这次成绩会杀不同,已经这么了,那慢慢写吧,接着看A题,感觉数据量有接触老,似乎有些麻烦,还是看B题吧,于是更写了一致合约瑟夫环问题,因为材料准备充分,找了只纯数学方法勾勒了平普,然后就是AC了,然后F题,真是无掌握凡是啊问题,过了充分老,用c++再付了相同遍然后即过了,很是无语啊,不过还好F题最后还是重判了,不过真正吗花了碰时寻找问题。再拘留I题相交点,因为不少都AC了当下题,乍一看押觉得那个是累啊,没有样例,又过了老长远才懂就书就同样组数据,输出结果就是哼了,我却还当追寻什么输入输出格式。。。然后AC了I题,接着写J,什么内切圆和外接圆面积之题目,怎么这么多数学啊,公式什么的早已经忘了,慢慢推吧,感觉一时半会又推动不有。。。内切圆是寻找资料写好之,最后要经过余弦定理求来他搭圆之半径,于是AC了,然后H题,H题求弧长,是考定积分的,一开始没有怎么形容,算了挺久然后可积分不出来,最后发现积分里发地方写错了,挺简单的积分为我为得很复杂,修改了转,可是还是通不过样例,输出了千篇一律串奇怪之差,我深信这次写的不见面生出问题,可是还是不对,时间纵即将收场了,不见面自己就道题也刻画不出去吧,,最后发现先后中一个变量用了简单不善,似乎值就变更了,其实很已经发现了,可是我便是看那么呢是不见面起题目之,最后要AC了,这道题。还剩10几近分钟,觉得好从不什么时间写接下的几修了,虽然最少发生平等开要时有发生明晰的思路,还是无写了,然后后便这么了结了。

总而言之,感觉要实力有不少欠缺吧,希望团结会连努力学习,还有就是是看有时候自己稍钻牛角尖,导致浪费广大日子。

校赛结束了,准备省赛了,舞台非常非常,我还是颇不起眼,加油吧!

发表评论

电子邮件地址不会被公开。 必填项已用*标注