zoukankan      html  css  js  c++  java
  • ACdream 速攻组~

    1007 a + b

     1 /*这题就是一个快速幂,但是十分猥琐的是,模是1e10 + 7,不是1e9 + 7,这就产生了一个爆long long的问题。所以要对快速幂中的乘法操作进行一下改造。请教了BIT_Is_a_Tree,学会了传说中的 「快速加」。原理和快速幂一模一样,a^{b}是b个a相乘,a 	imes b就是b个a相加。缺点是多了log{n} 的复杂度。
     2 */
     3 using namespace std;
     4 typedef long long ll;
     5 #define MOD 10000000007LL
     6 ll fMul(ll a, ll b) {
     7     ll t = 0, y = a;
     8     while(b) {
     9         if(b & 1) t = (t + y) % MOD;
    10         y = (y + y) % MOD;
    11         b >>= 1;
    12     }
    13     return t;
    14 }
    15 ll modExp(ll a, ll b) {
    16     ll t = 1, y = a;
    17     while(b) {
    18         if(b & 1) t = (fMul(t, y)) % MOD;
    19         y = (fMul(y, y)) % MOD;
    20         b >>= 1;
    21     }
    22     return t;
    23 }
    24 int main() {
    25     int T;
    26     ll n, k, t, sum;
    27     cin >> T;
    28     while(T--) {
    29         cin >> n >> k;
    30         sum = 0;
    31         for(int i = 1; i <= n; i++) {
    32             cin >> t;
    33             t = ((t % MOD) + MOD) % MOD;
    34             sum += modExp(t, k);
    35             sum %= MOD;
    36         }
    37         cout << sum << endl;
    38     }
    39     return 0;
    40 }
    View Code

    1008 A Very Easy Triangle Counting Game

     1 /*题意:在圆上取n个点,相邻两个点之间连线,(注意,n和1相邻),然后所有点对(i ,i+2)相连,问能形成的不同的三角形有多少个?
     2 
     3 思路:画图找规律,发现n=3,cnt=1;  n=4,cnt=8; n=5 cnt=35  (5*2+5*2+ 5+5+5); n=6 cnt= 32 (6*2+6*2+ 6+2);
     4 
     5         n=7,cnt=35(7*2+7*2+7); n=8, cnt=40(8*2+8*2+8) 发现后面项演变成多边形了!
     6 
     7      于是得到规律:n>6;cnt=5*n
     8 */
     9 #include <stdio.h>  
    10     int a[7]={0,0,0,1,8,35,32};  
    11     int main()  
    12     {  
    13         int T,n,ans;  
    14         scanf("%d",&T);  
    15         for(int i=1;i<=T;i++)  
    16         {  
    17             scanf("%d",&n);  
    18             ans=n>6?(5*n):a[n];  
    19             printf("Case #%d: %d
    ",i,ans%20121111);  
    20         }  
    21         return 0;  
    22     }
    View Code

    1013 Count It!

     1 /*
     2 扫一遍,胡乱暴力一发~
     3 */
     4 #include<iostream>
     5 #include<string.h>
     6 #include<stdio.h>
     7 #include<ctype.h>
     8 #include<algorithm>
     9 #include<stack>
    10 #include<queue>
    11 #include<set>
    12 #include<math.h>
    13 #include<vector>
    14 #include<map>
    15 #include<deque>
    16 #include<list>
    17 using namespace std;
    18 int main()
    19 {
    20     int a;
    21     while(cin>>a)
    22     {
    23         string b;
    24         cin>>b;
    25         int minn=0;
    26         for(int i=0;i<b.size();i++)
    27             {
    28                 if(b[i]=='L')
    29                     minn++;
    30             }
    31         cout<<minn+a-b.size()<<" "<<minn<<endl;
    32     }
    33     return 0;
    34 }
    View Code

    1020 The Game about KILL

     1   /*
     2 约瑟夫环,n太大,首先可以想到打表找看有没有规律
     3 
     4 可以发现时有规律的
     5 
     6 可以看到,只要是2的i次幂,那么存活的是1,后面的依次加2
     7 
     8 例如4为1,5就是3,6->5,7->7,8->1
     9 --------------------------------------------------------
    10 我直接拍log(n)/log(2),使劲wa,唉唉唉,姿势长傻了,没办法
    11 */
    12  #include <stdio.h>  
    13     #include <string.h>  
    14     #include <algorithm>  
    15     using namespace std;  
    16     #define ll long long  
    17     ll f[50],n;  
    18        
    19     int main()  
    20     {  
    21         int i;  
    22         f[0] = 1;  
    23         for(i = 1; i<31; i++)  
    24             f[i] = f[i-1]*2;  
    25         while(~scanf("%lld",&n))  
    26         {  
    27             for(i = 1; i<31; i++)  
    28             {  
    29                 if(n<f[i])  
    30                     break;  
    31             }  
    32             printf("%lld
    ",1+2*(n-f[i-1]));  
    33         }  
    34        
    35         return 0;  
    36     }  
    View Code

    1037 UUZ is hunger

     1 /*
     2 sort一下,然后累加暴力一发~
     3 */
     4 #include<iostream>
     5 #include<string.h>
     6 #include<stdio.h>
     7 #include<ctype.h>
     8 #include<algorithm>
     9 #include<stack>
    10 #include<queue>
    11 #include<set>
    12 #include<math.h>
    13 #include<vector>
    14 #include<map>
    15 #include<deque>
    16 #include<list>
    17 using namespace std;
    18 long long a[100010];
    19 int main()
    20 {
    21     long long n,k;
    22     while(scanf("%lld%lld",&n,&k)!=EOF)
    23     {
    24         memset(a,0,sizeof(a));
    25         long long sum=0;
    26         int ans=0;
    27         for(int i=0;i<n;i++)
    28             cin>>a[i];
    29         sort(a,a+n);
    30         for(int i=n-1;i>=0;i--)
    31         {
    32             sum+=a[i];
    33             ans++;
    34             if(sum>=k)
    35                 break;
    36         }
    37         cout<<ans<<endl;
    38     }
    39     return 0;
    40 }
    View Code

    1061 郭式树

     1 /*
     2 啪啪啪,叫你别用cin,叫你别用cout,叫你沙茶
     3 */
     4     #include <stdio.h>  
     5     #include <string.h>  
     6     #include <algorithm>  
     7     using namespace std;  
     8        
     9     int main()  
    10     {  
    11         int t;  
    12         long long x, y;  
    13         unsigned long long z;  
    14         scanf("%d", &t);  
    15         while(t--)  
    16         {  
    17             scanf("%lld%lld", &x, &y);  
    18             if(x > y)  
    19                 z = x - y;  
    20             else  
    21                 z = y - x;  
    22             printf("%llu
    ", z);  
    23         }  
    24         return 0;  
    25     }  
    View Code

    1064 完美数

     1   /*
     2 数位DP,乱搞一发
     3 s=0表示既不含3也不含8
     4 s=1表示只含3
     5 s=2表示只含8
     6 s=3表示既含3也含8
     7 */
     8 #include<cstdio>  
     9     #include<cstring>  
    10     int a[10],f[10][4];  
    11     int new_s(int s,int d){  
    12         if(d==3)return s|1;  
    13         if(d==8)return s|2;  
    14         return s;  
    15     }  
    16     int dfs(int i,int s,bool e){  
    17         if(i==-1)return s==1||s==2;  
    18         if(!e&&f[i][s]!=-1)return f[i][s];  
    19         int res=0,u=e?a[i]:9,d;  
    20         for(d=0;d<=u;d++)res+=dfs(i-1,new_s(s,d),e&&(d==u));  
    21         return e?res:f[i][s]=res;  
    22     }  
    23     int cal(int n){  
    24         int i=0;  
    25         while(n){a[i++]=n%10,n/=10;}  
    26         return dfs(i-1,0,1);  
    27     }  
    28     int main(){  
    29         int T,l,r;  
    30         scanf("%d",&T);  
    31         memset(f,-1,sizeof(f));  
    32         while(T--){  
    33             scanf("%d%d",&l,&r);  
    34             printf("%d
    ",cal(r)-cal(l-1));  
    35         }  
    36         return 0;  
    37     } 
    View Code

    1065 同心树

     1 /*
     2 几何题目,乱搞就是
     3 */
     4 #include<iostream>
     5 #include<stdio.h>
     6 #include<cstring>
     7 #include<algorithm>
     8 #include<cmath>
     9 using namespace std;
    10 int main( )
    11 {
    12     int T;
    13     double N,a;
    14     scanf("%d",&T);
    15     while( T-- ){
    16     scanf("%lf%lf",&N,&a);
    17     if( a >= 90 )
    18         a -= 90;
    19     if( a == 0 )
    20     {
    21         printf("%.2lf
    ",N*N);
    22         continue;
    23     }
    24     a = a*3.141592654/180.0;
    25     double r = N/( 1 + cos(a) + sin(a) );
    26     printf("%.2lf
    ",N*N-r*r*(sin(2*a)));
    27     }
    28     return 0;
    29 }
    View Code

    1069 无耻的出题人

     1 /*题意:翻译题目之后,再解决翻译之后的题目
     2 思路:斐布拉契数,注意规律,
     3 翻译代码如下:
     4 #include<stdio.h>
     5 #include<cstring>
     6 char s[28]={'0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
     7 int main()
     8 {
     9   long long a[100];
    10   a[0]=1;a[1]=1;
    11   for(int i=2;i<100;i++)
    12     a[i]=a[i-1]+a[i-2];
    13   char c[100];
    14   gets(c);
    15   for(int i=0,x=0;i<strlen(c);)
    16     {
    17      for(int j=1;j<=26;j++)
    18      {
    19        if(c[i]==s[j])
    20        {
    21          c[i]=s[(j-a[x]%26+26)%26];//题目的26个字母是循环的
    22          i++;x++;
    23          break; 
    24        }
    25        else if(c[i]==' '||c[i]==',')
    26        {
    27              i++;   
    28        }
    29      }
    30     }
    31   printf("%s",c);
    32   //puts(c);
    33 }
    34 A题代码如下:
    35 */
    36 #include <stdio.h>
    37 #include <string.h>
    38 int main()
    39 {
    40   char s[100];
    41   while(scanf("%s",s)!=EOF)
    42   {
    43     int sum=0;
    44     for(int i=0;s[i];i++)
    45     {
    46       if(s[i]>='0' && s[i] <='9')
    47         sum+=s[i]-'0';
    48     }
    49     printf("%d
    ",sum);
    50   }
    51 }
    View Code

    1088 哼!我才是最短的

     1 /*
     2 输出的时候,按照8 1 7 2 6 3 5 4这种一大一小输出即可
     3 */
     4     #include<iostream>  
     5     #include<cstdio>  
     6     using namespace std;  
     7     #define M 1000005  
     8     #define MN 100000  
     9     int main()  
    10     {  
    11         int n,a;  
    12         int i,j;  
    13         cin>>n;  
    14         while(n--)  
    15         {  
    16             cin>>a;  
    17             if(a%2==0)  
    18             {  
    19                 for(i=0,j=1;i<a/2-1;i++)  
    20                 {  
    21                     cout<<a-i<<" "<<i+1<<" ";  
    22                 }  
    23                 cout<<a/2+1<<" "<<a/2<<endl;  
    24             }  
    25             else  
    26             {  
    27                 for(i=0,j=1;i<a/2;i++)  
    28                 {  
    29                     cout<<a-i<<" "<<i+1<<" ";  
    30                 }  
    31                 cout<<a/2+1<<endl;  
    32             }  
    33         }  
    34         return 0;  
    35     }  
    View Code

    1125 ACfun

     1 /*
     2 题意:找到最长的连续A的个数n,然后输出n+1个A
     3 思路:暴力。
     4 */
     5 #include<cstdio>
     6 #include<cstring>
     7 #include<iostream>
     8 using namespace std;
     9 int main()
    10 {
    11  char s[1001];
    12  int i,j,k,l,t;
    13  int sum,max;
    14  cin>>t;
    15  getchar();
    16  while(t--)
    17  {
    18    sum=max=0;
    19    gets(s);
    20    for(i=0;i<strlen(s);i++)
    21    {
    22      if(s[i]=='A')
    23      { sum=1;
    24       
    25      for(j=i+1;j<strlen(s);j++)
    26      {
    27        if(s[i]==s[j])
    28          sum++;
    29        if(sum>max)
    30        max=sum;
    31        if(s[i]!=s[j])
    32        {
    33          sum=1;
    34          break;
    35        }
    36      }
    37      }
    38    }
    39    for(i=0;i<=max;i++)
    40      printf("A");
    41    printf("
    ");
    42  }
    43  return 0;
    44 }
    View Code
  • 相关阅读:
    macOS下iTerm2+zsh+oh-my-zsh+powerlevel10k打造最强终端
    个别服务器通过公网登录MySQL数据库慢
    Linux永久添加静态路由
    mtr网络工具常用命令
    Fping常用的网络连通性测试技巧
    Linux 7修改网卡名称后配置文件中的默认网关不生效
    Mac TimeMachine备份数据到自建NAS(通过samba共享)
    Mac iTerm2使用lrzsz
    SSH登录服务器慢
    Linux服务器惨遭挖矿
  • 原文地址:https://www.cnblogs.com/qscqesze/p/3969061.html
Copyright © 2011-2022 走看看