Codeforces Round #719 (Div. 3) ABCDEF题解

目录

  • A - Do Not Be Distracted!
  • B - Ordinary Numbers
  • C - Not Adjacent Matrix
  • D - Same Differences
  • E - Arranging The Sheep
  • F1 - Guess the K-th Zero (Easy version)
  • 总结


A - Do Not Be Distracted!

题目链接
题意:一个字母只能在一堆出现,后面不能出现

样例没过就交

#include 
using namespace std;
typedef unsigned long long ll;
const int N = 105;
ll t, n, m, x, a[N], sum[N], cnt, q, maxx;
string s;
int main() {
    cin>>t;
    while(t--) {
        cin>>n>>s;
        memset(a, 0, sizeof a);
        q=0;
        a[s[0]-'A']++;//第一个字母忘记存了
        for(int i=1; i<n; i++) {
            if(s[i]!=s[i-1]&&a[s[i]-'A']) {
                q++;
                break;
            }
            a[s[i]-'A']++;
        }
        if(q) cout<<"NO"<<endl;
        else cout<<"YES"<<endl;
    }
    return 0;
}

B - Ordinary Numbers

tmlj
题意 找 1 − n 1-n 1n范围内 数字每位相同的数有几个

WA2后来暴力做了
然后这份代码我偷的 因为比我的好看hhh

    #include
    #define ll long long
    using namespace std;
    int vis[50];
    set<long long>se;
    int main()
    {
        for(int i=1;i<=9;i++)
        {
            long long temp=i;
            while(temp<=1000000000)
            {
                se.insert(temp);
                temp=temp*10+i;
    //            cout<
            }
        }
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n,cnt=0;
            scanf("%d",&n);
            for(auto x:se)
            {
                if(x<=n)cnt++;
            }
            printf("%d\n",cnt);
        }
     
        return 0;
    }

C - Not Adjacent Matrix

题目链接
题意:构造 n ∗ n n*n nn的矩阵使 ( i , j ) (i, j) (i,j) ( i , j + 1 ) (i, j+1) (i,j+1) ( i + 1 , j ) (i+1, j) (i+1,j) ( i + 1 , j + 1 ) (i+1, j+1) (i+1,j+1)这几个位置的数字相差不能为1

就想到相差2,然后先排奇数再排偶数

#include
using namespace std;
typedef  long long ll;
const int N = 1000005;
ll t, n, m, flag, q, dis, a[20], vis[N], ans[20];
int main() {
    cin>>t;
    while(t--) {
        cin>>n;
        q=1;
        m=2;
        if(n==2) {//就2不行
                cout<<-1<<endl;
                continue;
        }
        for(int i=1; i<=n; i++) {
            for(int j=1; j<=n; j++) {
               if(q<=n*n) cout<<q<<" ", q+=2;
               else cout<<m<<" ", m+=2;
            }
            cout<<endl;
        }
    }
    return 0;
}

D - Same Differences

题目链接

题意:给你一串数组,问你有几个 a j − a i = = j − i ( j > i ) aj-ai==j-i(j>i) ajai==ji(j>i)

写的时候被B搞烦了 愣了好久
就是假如满足题目的要求的话 a j − j , a i − i aj-j, ai-i ajj,aii是相等的 就移项呗

#include 
using namespace std;
typedef unsigned long long ll;
const int N = 105;
map<ll, ll> mp;
set<ll> se;
ll t, n, m, x, a[N], sum[N], cnt, q, maxx, ans;
string s;
int main() {
    cin>>t;
    while(t--) {
        cin>>n;
        se.clear();
        mp.clear();
        ans=0;
        for(int i=1; i<=n; i++) {
            cin>>a[i];
            mp[a[i]-i]++;
            se.insert(a[i]-i);
        }
        for(auto x:se) {
            ans+=mp[x]*(mp[x]-1)/2;//就求和公式
        }
        cout<<ans<<endl;
    }
    return 0;
}

E - Arranging The Sheep

题目链接
题意:给你 ∗ . ∗ . . . ∗ . ∗ ∗ 。 *.*...*.**。 .....$"*是小绵羊你要把小绵羊弄到一块去问你最少移多少步

这题超级气的 反正就是加加减减一直能不出来 然后最后一分钟交 然后评测机炸了 然后97%98%99%像等死刑一样 最后re5 干的漂亮

就是中位数啦
建议移步->货仓选址
然后还有 思怡mm(点击即可关注 提供的另外一种思路 动空格的位置 不动羊的 然后空格的位置往羊少的地方放 好棒!!只需2min

#include
using namespace std;
const int N=1e6+10;//就是这里re!!竟然还有人想hack我都这么惨了就因为没关同步
typedef long long ll;
map<ll,int> mp;
ll a[N], b[N], n, t, cnt, m,ans;
string s;
int main(){
	cin>>t;
	while(t--) {
        cin>>n>>s;
        ans=cnt=0;
        for(int i=0; i<n; i++) {
            if(s[i]=='*') a[cnt++]=i+1;
        }
        m=a[cnt/2];
        //cout<
        for(int i=0; i<cnt; i++) {
            if(a[i]<m) ans+=m-(cnt/2-i)-a[i];
            else if(a[i]>m)ans+=a[i]-(i-cnt/2)-m;//这个地方要搞晕了
        }
        cout<<ans<<endl;
	}
	return 0;
}

在这里:

#include
using namespace std;
const int maxn=1e6+86;
typedef long long ll;
char a[maxn];int sum[maxn];
int main(){
    ll t;
    cin>>t;
    while(t--){
         ll n;
        cin>>n;
        for(int i=1;i<=n;i++) {
            cin>>a[i];
            if(a[i]=='*'){
                sum[i]=sum[i-1]+1;
            }  
            else {
                sum[i]=sum[i-1];
            }
        }
        ll ans=0;
        for(int i=1;i<=n;i++){
            if(a[i]=='.') {
                ll minn=min(sum[i],sum[n]-sum[i]);
                ans+=minn;
            }
        }
        cout<<ans<<endl;
    }
 return 0;
}

F1 - Guess the K-th Zero (Easy version)

题目链接
反正交互老是都跑掉啦 不会


总结

水题不能wa 样例好好看

本来能上分的 哭哭 下次一定

你可能感兴趣的:(codeforces,算法,数据结构,经验分享)