ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

高一阶段测试-2021.4.21

2022-04-24 09:02:44  阅读:169  来源: 互联网

标签:tmp ch 21 int 高一 ++ WR include 2021.4


建议改名:冬天丶的雨的生日派对(没错今天是我生日awa)

A. Efim与奇怪的成绩

B. 美丽的IP地址

C. Tic-tac-toe

D. 小 X 与煎饼达人

赛时得分:320

排行:1

 

 

开场先切T1

一个裸的四舍五入模拟题……判断整数进位了但一开始没删小数点

由于是IOI很快就发现了bug,拿到一血

A. Efim与奇怪的成绩

 

 

非常显然

 

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#define WR WinterRain
using namespace std;
const int WR=1001000;
char ch[WR];
int a[WR],b[WR],cnt,tot,tag,pnt;
int n,m;
int read(){
    int s=0,w=1;
    char ch=getchar();
    while(ch>'9'||ch<'0'){
        if(ch=='-') w=-1;
        ch=getchar();
    }
    while(ch<='9'&&ch>='0'){
        s=(s<<1)+(s<<3)+ch-48;
        ch=getchar();
    }
    return s*w;
}
int main(){
    freopen("grade.in","r",stdin);
    freopen("grade.out","w",stdout);
    n=read(),m=read();
    scanf("%s",ch+1);
    bool flag=false;
    for(int i=1;i<=n;i++){
        if(ch[i]=='.'){flag=true,pnt=i;continue;}
     //一开始这里寄了没判断点,输入99.9999我会输出100. if(flag) a[++cnt]=ch[i]-48; else b[++tot]=ch[i]-48; } tag=cnt; for(int i=1;i<=min(n,m);i++){ flag=false; for(int j=1;j<=tag;j++){ if(a[j]>=5){ flag=true; a[j-1]++,tag=j-1; break; } } if(!flag) break; } flag=true; if(a[0]) b[tot]++,flag=false; int tmp=tot; while(b[tmp]>=10){ b[tmp]-=10; b[tmp-1]++; tmp--; } if(b[0]) printf("%d",b[0]); for(int i=1;i<=tot;i++){ printf("%d",b[i]); } if(flag) putchar('.'); for(int i=1;i<=tag;i++){ printf("%d",a[i]); } fclose(stdin); fclose(stdout); return 0; }

挺合理的。

 

然后看怎么kiritokazuto大佬和joke大佬都切了T4???

D. 小 X 与煎饼达人

略作思考:

线段树!

然鹅打到一半发现伪了,滚回去做差分(这不校门外的树么。。。)

//Happy Birthday!!!
#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#define WR WinterRain
using namespace std;
const int WR=1001000;
int n,m;
int a[WR],cnt,ans;
int read(){
    int s=0,w=1;
    char ch=getchar();
    while(ch>'9'||ch<'0'){
        if(ch=='-') w=-1;
        ch=getchar();
    }
    while(ch<='9'&&ch>='0'){
        s=(s<<1)+(s<<3)+ch-48;
        ch=getchar();
    }
    return s*w;
}
int main(){
    freopen("flip.in","r",stdin);
    freopen("flip.out","w",stdout);
    n=read(),m=read();
    for(int i=1;i<=m;i++){
        int x,y;
        x=read(),y=read();
        a[x]++,a[y+1]--;
    }
    for(int i=1;i<=n;i++){
        cnt+=a[i];
        if(cnt%2) ans++;
    }
    printf("%d",ans);
    fclose(stdin);
    fclose(stdout);
    return 0;
}

四十五分钟切了T4。。。此刻还剩五十分钟,看了眼T2发现不是很可做

滚去看T3

Tic-tac-toe

 

emm……这个我熟啊,初三玩了半年的(bushi

看了看发现就是简单的硬判断,直接打模拟

然鹅代码有点冗长……

有几种非常诡异的情况:

1. 如果其中一方连着下了好几步? illegal

2. 如果两个人同时都赢了? illegal

为啥只输出illegal能拿50分啊……

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#define WR WinterRain
using namespace std;
const int WR=100;
char mp[WR][WR];
int cnta,cntb;
bool fa,fb;
int main(){
    freopen("tic.in","r",stdin);
    freopen("tic.out","w",stdout);
    for(int i=1;i<=3;i++){
        for(int j=1;j<=3;j++){
            cin>>mp[i][j];
            if(mp[i][j]=='X') cnta++;
            if(mp[i][j]=='0') cntb++;
        }
    }
    if(cnta<cntb||cnta>5||cntb>5||((cnta!=cntb)&&(cnta-cntb!=1))){
        printf("illegal");
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    for(int i=1;i<=3;i++){
        if(mp[i][1]==mp[i][2]&&mp[i][2]==mp[i][3]){
            if(mp[i][1]=='X') fa=true;
            if(mp[i][1]=='0') fb=true;
        }
        if(mp[1][i]==mp[2][i]&&mp[2][i]==mp[3][i]){
            if(mp[1][i]=='X') fa=true;
            if(mp[1][i]=='0') fb=true;
        }
    }
    if(mp[1][1]==mp[2][2]&&mp[2][2]==mp[3][3]){
        if(mp[1][1]=='X') fa=true;
        if(mp[1][1]=='0') fb=true;
    }
    if(mp[1][3]==mp[2][2]&&mp[2][2]==mp[3][1]){
        if(mp[1][3]=='X') fa=true;
        if(mp[1][3]=='0') fb=true;
    }
    if(fa==fb&&fa==true){
        printf("illegal");
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    if(fa){
        printf("the first player won");
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    if(fb){
        printf("the second player won");
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    if(!fa&&!fb&&cnta==5&&cntb==4){
        printf("draw");
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    if(cnta==cntb){
        printf("first");
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    if(cnta==cntb+1){
        printf("second");
        fclose(stdin);
        fclose(stdout);
        return 0;
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}

 

为了AK只能肝T2了。。。

美丽的IP地址

我的天可恶的大深搜

可以枚举前三位,第四位能轻易地推出来

赛时只有20分然鹅是因为没写完……拿了一个输出0的部分分……

赛后改过了,确实还是比较恶心的

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<vector>
#define WR WinterRain
using namespace std;
const int WR=100;
int n,a[WR];
vector<int>s;
int res;
int num[WR],tmp[WR],ans;
int read(){
    int s=0,w=1;
    char ch=getchar();
    while(ch>'9'||ch<'0'){
        if(ch=='-') w=-1;
        ch=getchar();
    }
    while(ch<='9'&&ch>='0'){
        s=(s<<1)+(s<<3)+ch-48;
        ch=getchar();
    }
    return s*w;
}
void add(int x){
    if(!x) return;
    add(x/10);
    s.push_back(x%10);
}
bool check(){
    for(int i=0;i<=9;i++)
        if(!num[i]&&tmp[i])
            return false;
    return true;
}
int get(){
    for(int i=0;i<s.size();i++)
        if(s[i]!=s[s.size()-1-i])
            return 0;
    return 1;
}
bool judge(int x){
    if(!x) return true;
    num[x%10]++;
    return judge(x/10)&&tmp[x%10];
}
void pushup(int x){
    if(!x) return;
    num[x%10]--;
    pushup(x/10);
}
int query(int a,int b,int c){
    s.clear();//vector存,丝滑~
    res=0;
    add(a/10),s.push_back(a%10);
    add(b/10),s.push_back(b%10);
    add(c/10),s.push_back(c%10);
    s.push_back(s[0]);
    res+=get();
    s[s.size()-1]=s[1];
    s.push_back(s[0]);
    if(s[1]) res+=get();
    if(s[2]*100+s[1]*10+s[0]<=255&&s[2]){
        s[s.size()-2]=s[2];
        s[s.size()-1]=s[1];
        s.push_back(s[0]);
        res+=get();
    }
    return res;
}
int main(){
    freopen("ipadd.in","r",stdin);
    freopen("ipadd.out","w",stdout);
    n=read();
    for(int i=1;i<=n;i++){
        int x=read();
        tmp[x]=1;
    }
    for(int i=0;i<=255;i++){
        num[i%10]++;//这里一定要加1!!!否则judge会直接返回true而不会加num
        if(judge(i/10)&&tmp[i%10])
            for(int j=0;j<=255;j++){
                num[j%10]++;
                if(judge(j/10)&&tmp[j%10])
                    for(int k=0;k<=255;k++){
                        num[k%10]++;
                        if(judge(k/10)&&tmp[k%10]&&check())
                            ans+=query(i,j,k);
                        num[k%10]--;
                        pushup(k/10);
                    }
                num[j%10]--;
                pushup(j/10);
            }
        num[i%10]--;
        pushup(i/10);
    }
    printf("%d",ans);
    fclose(stdin);
    fclose(stdout);
    return 0;
}

 

这次比赛还是比较简单的,算是普及组难度(?

今后也要继续努力QWQ!

标签:tmp,ch,21,int,高一,++,WR,include,2021.4
来源: https://www.cnblogs.com/WintersRain/p/16184334.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有